{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/array-intersect/dist/array-intersect.js","node_modules/axios/index.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/cancel/Cancel.js","node_modules/axios/lib/cancel/CancelToken.js","node_modules/axios/lib/cancel/isCancel.js","node_modules/axios/lib/core/Axios.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/createError.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/core/enhanceError.js","node_modules/axios/lib/core/mergeConfig.js","node_modules/axios/lib/core/settle.js","node_modules/axios/lib/core/transformData.js","node_modules/axios/lib/defaults.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/normalizeHeaderName.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/utils.js","node_modules/babel-helper-vue-jsx-merge-props/index.js","node_modules/babel-runtime/core-js/json/stringify.js","node_modules/babel-runtime/core-js/object/keys.js","node_modules/babel-runtime/core-js/promise.js","node_modules/babel-runtime/core-js/symbol.js","node_modules/babel-runtime/core-js/symbol/iterator.js","node_modules/babel-runtime/helpers/asyncToGenerator.js","node_modules/babel-runtime/helpers/classCallCheck.js","node_modules/babel-runtime/helpers/typeof.js","node_modules/babel-runtime/regenerator/index.js","node_modules/base64-js/index.js","node_modules/buffer/index.js","node_modules/core-js/library/fn/json/stringify.js","node_modules/core-js/library/fn/object/keys.js","node_modules/core-js/library/fn/promise.js","node_modules/core-js/library/fn/symbol/index.js","node_modules/core-js/library/fn/symbol/iterator.js","node_modules/core-js/library/modules/_a-function.js","node_modules/core-js/library/modules/_add-to-unscopables.js","node_modules/core-js/library/modules/_an-instance.js","node_modules/core-js/library/modules/_an-object.js","node_modules/core-js/library/modules/_array-includes.js","node_modules/core-js/library/modules/_classof.js","node_modules/core-js/library/modules/_cof.js","node_modules/core-js/library/modules/_core.js","node_modules/core-js/library/modules/_ctx.js","node_modules/core-js/library/modules/_defined.js","node_modules/core-js/library/modules/_descriptors.js","node_modules/core-js/library/modules/_dom-create.js","node_modules/core-js/library/modules/_enum-bug-keys.js","node_modules/core-js/library/modules/_enum-keys.js","node_modules/core-js/library/modules/_export.js","node_modules/core-js/library/modules/_fails.js","node_modules/core-js/library/modules/_for-of.js","node_modules/core-js/library/modules/_global.js","node_modules/core-js/library/modules/_has.js","node_modules/core-js/library/modules/_hide.js","node_modules/core-js/library/modules/_html.js","node_modules/core-js/library/modules/_ie8-dom-define.js","node_modules/core-js/library/modules/_invoke.js","node_modules/core-js/library/modules/_iobject.js","node_modules/core-js/library/modules/_is-array-iter.js","node_modules/core-js/library/modules/_is-array.js","node_modules/core-js/library/modules/_is-object.js","node_modules/core-js/library/modules/_iter-call.js","node_modules/core-js/library/modules/_iter-create.js","node_modules/core-js/library/modules/_iter-define.js","node_modules/core-js/library/modules/_iter-detect.js","node_modules/core-js/library/modules/_iter-step.js","node_modules/core-js/library/modules/_iterators.js","node_modules/core-js/library/modules/_library.js","node_modules/core-js/library/modules/_meta.js","node_modules/core-js/library/modules/_microtask.js","node_modules/core-js/library/modules/_new-promise-capability.js","node_modules/core-js/library/modules/_object-create.js","node_modules/core-js/library/modules/_object-dp.js","node_modules/core-js/library/modules/_object-dps.js","node_modules/core-js/library/modules/_object-gopd.js","node_modules/core-js/library/modules/_object-gopn-ext.js","node_modules/core-js/library/modules/_object-gopn.js","node_modules/core-js/library/modules/_object-gops.js","node_modules/core-js/library/modules/_object-gpo.js","node_modules/core-js/library/modules/_object-keys-internal.js","node_modules/core-js/library/modules/_object-keys.js","node_modules/core-js/library/modules/_object-pie.js","node_modules/core-js/library/modules/_object-sap.js","node_modules/core-js/library/modules/_perform.js","node_modules/core-js/library/modules/_promise-resolve.js","node_modules/core-js/library/modules/_property-desc.js","node_modules/core-js/library/modules/_redefine-all.js","node_modules/core-js/library/modules/_redefine.js","node_modules/core-js/library/modules/_set-species.js","node_modules/core-js/library/modules/_set-to-string-tag.js","node_modules/core-js/library/modules/_shared-key.js","node_modules/core-js/library/modules/_shared.js","node_modules/core-js/library/modules/_species-constructor.js","node_modules/core-js/library/modules/_string-at.js","node_modules/core-js/library/modules/_task.js","node_modules/core-js/library/modules/_to-absolute-index.js","node_modules/core-js/library/modules/_to-integer.js","node_modules/core-js/library/modules/_to-iobject.js","node_modules/core-js/library/modules/_to-length.js","node_modules/core-js/library/modules/_to-object.js","node_modules/core-js/library/modules/_to-primitive.js","node_modules/core-js/library/modules/_uid.js","node_modules/core-js/library/modules/_user-agent.js","node_modules/core-js/library/modules/_wks-define.js","node_modules/core-js/library/modules/_wks-ext.js","node_modules/core-js/library/modules/_wks.js","node_modules/core-js/library/modules/core.get-iterator-method.js","node_modules/core-js/library/modules/es6.array.iterator.js","node_modules/core-js/library/modules/es6.object.keys.js","node_modules/core-js/library/modules/es6.object.to-string.js","node_modules/core-js/library/modules/es6.promise.js","node_modules/core-js/library/modules/es6.string.iterator.js","node_modules/core-js/library/modules/es6.symbol.js","node_modules/core-js/library/modules/es7.promise.finally.js","node_modules/core-js/library/modules/es7.promise.try.js","node_modules/core-js/library/modules/es7.symbol.async-iterator.js","node_modules/core-js/library/modules/es7.symbol.observable.js","node_modules/core-js/library/modules/web.dom.iterable.js","node_modules/debounce/index.js","node_modules/decode-uri-component/index.js","node_modules/es6-object-assign/auto.js","node_modules/es6-object-assign/index.js","node_modules/es6-promise/auto.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/ieee754/index.js","node_modules/is-buffer/index.js","node_modules/isarray/index.js","node_modules/jquery/dist/jquery.js","node_modules/js-cookie/src/js.cookie.js","node_modules/magnific-popup/dist/jquery.magnific-popup.js","node_modules/merge/merge.js","node_modules/moment/moment.js","node_modules/mustache/mustache.js","node_modules/object-assign/index.js","node_modules/object-fit-images/dist/ofi.common-js.js","node_modules/polyfill-array-includes/index.js","node_modules/portal-vue/dist/portal-vue.js","node_modules/process/browser.js","node_modules/query-string/index.js","node_modules/regenerator-runtime/runtime-module.js","node_modules/regenerator-runtime/runtime.js","node_modules/strict-uri-encode/index.js","node_modules/timers-browserify/main.js","node_modules/vue-js-modal/dist/index.js","node_modules/vue-notification/dist/index.js","node_modules/vue-pagination-2/compiled/Pagination.js","node_modules/vue-pagination-2/compiled/bus.js","node_modules/vue-pagination-2/compiled/config.js","node_modules/vue-pagination-2/compiled/template.js","node_modules/vue-pagination-2/compiled/themes/bootstrap3.js","node_modules/vue-pagination-2/compiled/themes/bootstrap4.js","node_modules/vue-pagination-2/compiled/themes/bulma.js","node_modules/vue-pagination-2/index.js","node_modules/vue-router/dist/vue-router.common.js","node_modules/vue-tables-2/compiled/bus.js","node_modules/vue-tables-2/compiled/computed/all-columns.js","node_modules/vue-tables-2/compiled/computed/colspan.js","node_modules/vue-tables-2/compiled/computed/custom-q.js","node_modules/vue-tables-2/compiled/computed/datepicker-columns.js","node_modules/vue-tables-2/compiled/computed/filterable-columns.js","node_modules/vue-tables-2/compiled/computed/filtered-data.js","node_modules/vue-tables-2/compiled/computed/filtered-query.js","node_modules/vue-tables-2/compiled/computed/has-child-row.js","node_modules/vue-tables-2/compiled/computed/has-generic-filter.js","node_modules/vue-tables-2/compiled/computed/list-columns-object.js","node_modules/vue-tables-2/compiled/computed/opts.js","node_modules/vue-tables-2/compiled/computed/q.js","node_modules/vue-tables-2/compiled/computed/storage.js","node_modules/vue-tables-2/compiled/computed/table-data.js","node_modules/vue-tables-2/compiled/computed/templates-keys.js","node_modules/vue-tables-2/compiled/computed/total-pages.js","node_modules/vue-tables-2/compiled/config/defaults.js","node_modules/vue-tables-2/compiled/filters/custom-filters.js","node_modules/vue-tables-2/compiled/filters/format-date.js","node_modules/vue-tables-2/compiled/filters/highlight-matches.js","node_modules/vue-tables-2/compiled/filters/option-text.js","node_modules/vue-tables-2/compiled/helpers/is-empty.js","node_modules/vue-tables-2/compiled/helpers/is-valid-moment-object.js","node_modules/vue-tables-2/compiled/helpers/object-filled-keys-count.js","node_modules/vue-tables-2/compiled/helpers/resizeable-columns.js","node_modules/vue-tables-2/compiled/helpers/ucfirst.js","node_modules/vue-tables-2/compiled/index.js","node_modules/vue-tables-2/compiled/methods/apply-filters.js","node_modules/vue-tables-2/compiled/methods/cell-classes.js","node_modules/vue-tables-2/compiled/methods/child-row-toggler-class.js","node_modules/vue-tables-2/compiled/methods/client-search.js","node_modules/vue-tables-2/compiled/methods/column-class.js","node_modules/vue-tables-2/compiled/methods/currently-sorted.js","node_modules/vue-tables-2/compiled/methods/date-format.js","node_modules/vue-tables-2/compiled/methods/default-sort.js","node_modules/vue-tables-2/compiled/methods/dispatch.js","node_modules/vue-tables-2/compiled/methods/display.js","node_modules/vue-tables-2/compiled/methods/filterable.js","node_modules/vue-tables-2/compiled/methods/get-child-row-template.js","node_modules/vue-tables-2/compiled/methods/get-column-name.js","node_modules/vue-tables-2/compiled/methods/get-data.js","node_modules/vue-tables-2/compiled/methods/get-group-slot.js","node_modules/vue-tables-2/compiled/methods/get-heading-tooltip.js","node_modules/vue-tables-2/compiled/methods/get-heading.js","node_modules/vue-tables-2/compiled/methods/get-initial-date-range.js","node_modules/vue-tables-2/compiled/methods/get-name.js","node_modules/vue-tables-2/compiled/methods/get-open-child-rows.js","node_modules/vue-tables-2/compiled/methods/get-response-data.js","node_modules/vue-tables-2/compiled/methods/get-sort-fn.js","node_modules/vue-tables-2/compiled/methods/get-value.js","node_modules/vue-tables-2/compiled/methods/has-date-filters.js","node_modules/vue-tables-2/compiled/methods/init-custom-filters.js","node_modules/vue-tables-2/compiled/methods/init-date-filters.js","node_modules/vue-tables-2/compiled/methods/init-options.js","node_modules/vue-tables-2/compiled/methods/init-order-by.js","node_modules/vue-tables-2/compiled/methods/init-pagination.js","node_modules/vue-tables-2/compiled/methods/init-query.js","node_modules/vue-tables-2/compiled/methods/init-state.js","node_modules/vue-tables-2/compiled/methods/initial-order-ascending.js","node_modules/vue-tables-2/compiled/methods/is-date-filter.js","node_modules/vue-tables-2/compiled/methods/is-list-filter.js","node_modules/vue-tables-2/compiled/methods/is-text-filter.js","node_modules/vue-tables-2/compiled/methods/on-pagination.js","node_modules/vue-tables-2/compiled/methods/only-column.js","node_modules/vue-tables-2/compiled/methods/order-by-column.js","node_modules/vue-tables-2/compiled/methods/refresh.js","node_modules/vue-tables-2/compiled/methods/register-client-filters.js","node_modules/vue-tables-2/compiled/methods/register-server-filters.js","node_modules/vue-tables-2/compiled/methods/render.js","node_modules/vue-tables-2/compiled/methods/reset-query.js","node_modules/vue-tables-2/compiled/methods/row-was-clicked.js","node_modules/vue-tables-2/compiled/methods/send-request.js","node_modules/vue-tables-2/compiled/methods/server-search.js","node_modules/vue-tables-2/compiled/methods/set-columns-dropdown-close-listener.js","node_modules/vue-tables-2/compiled/methods/set-data.js","node_modules/vue-tables-2/compiled/methods/set-datepicker-text.js","node_modules/vue-tables-2/compiled/methods/set-filter.js","node_modules/vue-tables-2/compiled/methods/set-filters-dom.js","node_modules/vue-tables-2/compiled/methods/set-limit.js","node_modules/vue-tables-2/compiled/methods/set-order.js","node_modules/vue-tables-2/compiled/methods/set-page.js","node_modules/vue-tables-2/compiled/methods/set-user-multi-sort.js","node_modules/vue-tables-2/compiled/methods/should-show-column-on-init.js","node_modules/vue-tables-2/compiled/methods/sortable-chevron-class.js","node_modules/vue-tables-2/compiled/methods/sortable-class.js","node_modules/vue-tables-2/compiled/methods/sortable.js","node_modules/vue-tables-2/compiled/methods/toggle-child-row.js","node_modules/vue-tables-2/compiled/methods/toggle-column.js","node_modules/vue-tables-2/compiled/methods/toggle-columns-dropdown.js","node_modules/vue-tables-2/compiled/methods/toggle-group-direction.js","node_modules/vue-tables-2/compiled/methods/transform-date-strings-to-moment.js","node_modules/vue-tables-2/compiled/methods/update-state.js","node_modules/vue-tables-2/compiled/mixins/before-destroy.js","node_modules/vue-tables-2/compiled/mixins/computed.js","node_modules/vue-tables-2/compiled/mixins/created.js","node_modules/vue-tables-2/compiled/mixins/data.js","node_modules/vue-tables-2/compiled/mixins/methods.js","node_modules/vue-tables-2/compiled/modules/column-filters.js","node_modules/vue-tables-2/compiled/modules/columns-dropdown.js","node_modules/vue-tables-2/compiled/modules/date-filter.js","node_modules/vue-tables-2/compiled/modules/dropdown-item-wrapper.js","node_modules/vue-tables-2/compiled/modules/dropdown-pagination-count.js","node_modules/vue-tables-2/compiled/modules/dropdown-pagination.js","node_modules/vue-tables-2/compiled/modules/dropdown-wrapper.js","node_modules/vue-tables-2/compiled/modules/headings.js","node_modules/vue-tables-2/compiled/modules/list-filter.js","node_modules/vue-tables-2/compiled/modules/normal-filter.js","node_modules/vue-tables-2/compiled/modules/pagination.js","node_modules/vue-tables-2/compiled/modules/per-page-values.js","node_modules/vue-tables-2/compiled/modules/per-page.js","node_modules/vue-tables-2/compiled/modules/rows.js","node_modules/vue-tables-2/compiled/modules/sort-control.js","node_modules/vue-tables-2/compiled/modules/text-filter.js","node_modules/vue-tables-2/compiled/slots.js","node_modules/vue-tables-2/compiled/state/data.js","node_modules/vue-tables-2/compiled/state/mutations.js","node_modules/vue-tables-2/compiled/state/normal.js","node_modules/vue-tables-2/compiled/state/register-module.js","node_modules/vue-tables-2/compiled/state/state.js","node_modules/vue-tables-2/compiled/state/vuex.js","node_modules/vue-tables-2/compiled/table.js","node_modules/vue-tables-2/compiled/template-compiler.js","node_modules/vue-tables-2/compiled/templates/default.js","node_modules/vue-tables-2/compiled/templates/footer-pagination.js","node_modules/vue-tables-2/compiled/themes/bootstrap3.js","node_modules/vue-tables-2/compiled/themes/bootstrap4.js","node_modules/vue-tables-2/compiled/themes/bulma.js","node_modules/vue-tables-2/compiled/v-client-table.js","node_modules/vue-tables-2/compiled/v-server-table.js","node_modules/vue-tables-2/node_modules/clone/clone.js","node_modules/vue/dist/vue.common.js","node_modules/vue/dist/vue.common.prod.js","node_modules/vue/dist/vue.runtime.common.js","node_modules/vue/dist/vue.runtime.common.prod.js","node_modules/vueify/lib/insert-css.js","node_modules/vuejs-datepicker/dist/build.js","node_modules/vuex/dist/vuex.common.js","src/js/master.js","src/js/modules/analytics-actions.js","src/js/modules/branch-bar.js","src/js/modules/collection-maker.js","src/js/modules/custom-orderer-info.js","src/js/modules/custom-select.js","src/js/modules/filter-machine-accessories.js","src/js/modules/filter-news.js","src/js/modules/image-popup.js","src/js/modules/machine-search.js","src/js/modules/navigation.js","src/js/modules/select-material-language.js","src/js/modules/services/api.js","src/js/modules/services/data-service.js","src/js/modules/services/user-rights.js","src/js/modules/show-more-file-inputs.js","src/js/modules/video-popup.js","src/js/modules/vue/apps/app.vue","src/js/modules/vue/apps/common-settings.js","src/js/modules/vue/apps/complaints-app/index.js","src/js/modules/vue/apps/complaints-app/router/index.js","src/js/modules/vue/apps/customer-machines-app/router/index.js","src/js/modules/vue/apps/customers-app/index.js","src/js/modules/vue/apps/customers-app/router/index.js","src/js/modules/vue/apps/customers-app/view-home.vue","src/js/modules/vue/apps/forgotten-password-app/index.js","src/js/modules/vue/apps/forgotten-password-app/router/index.js","src/js/modules/vue/apps/own-company-app/router/index.js","src/js/modules/vue/apps/update-password-app/index.js","src/js/modules/vue/apps/update-password-app/router/index.js","src/js/modules/vue/apps/user-settings-app/router/index.js","src/js/modules/vue/apps/warranty-registrations-app/router/index.js","src/js/modules/vue/components/modal-company.vue","src/js/modules/vue/components/modal-complaint.vue","src/js/modules/vue/components/modal-user.vue","src/js/modules/vue/components/modal-warranty-registration.vue","src/js/modules/vue/components/the-1-column-layout.js","src/js/modules/vue/components/the-sidebar-layout.js","src/js/modules/vue/components/the-subheader.js","src/js/modules/vue/components/v-complaint-user-info.vue","src/js/modules/vue/components/v-currency-input.vue","src/js/modules/vue/components/v-data-items.vue","src/js/modules/vue/components/v-file.vue","src/js/modules/vue/components/v-form-field.vue","src/js/modules/vue/components/v-form.vue","src/js/modules/vue/components/v-modal-content.vue","src/js/modules/vue/components/v-number-input.vue","src/js/modules/vue/components/v-pass-strength.vue","src/js/modules/vue/components/view-change-password.vue","src/js/modules/vue/components/view-companies.vue","src/js/modules/vue/components/view-company.vue","src/js/modules/vue/components/view-complaint.vue","src/js/modules/vue/components/view-complaints.vue","src/js/modules/vue/components/view-customer-machine.vue","src/js/modules/vue/components/view-customer-machines.vue","src/js/modules/vue/components/view-edit-account.vue","src/js/modules/vue/components/view-forgotten-password.vue","src/js/modules/vue/components/view-update-password.vue","src/js/modules/vue/components/view-user-settings.vue","src/js/modules/vue/components/view-warranty-registration.vue","src/js/modules/vue/components/view-warranty-registrations.vue","src/js/modules/vue/store/index.js"],"names":[],"mappings":"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","file":"hakkipilke-extranet.min.js","sourceRoot":"/","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n rest[_key - 1] = arguments[_key];\n }\n\n return rest.reduce(function (accum, current) {\n return accum.filter(function (x) {\n return current.indexOf(x) !== -1;\n });\n }, first);\n};\n\nreturn intersect;\n\n})));\n","module.exports = require('./lib/axios');","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar buildURL = require('./../helpers/buildURL');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (requestData === undefined) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n return createInstance(mergeConfig(axios.defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\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 config.method = config.method ? config.method.toLowerCase() : 'get';\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(utils.merge(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(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar isAbsoluteURL = require('./../helpers/isAbsoluteURL');\nvar combineURLs = require('./../helpers/combineURLs');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Support baseURL config\n if (config.baseURL && !isAbsoluteURL(config.url)) {\n config.url = combineURLs(config.baseURL, config.url);\n }\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers || {}\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData(\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData(\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code\n };\n };\n return error;\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n utils.forEach(['url', 'method', 'params', 'data'], function valueFromConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n }\n });\n\n utils.forEach(['headers', 'auth', 'proxy'], function mergeDeepProperties(prop) {\n if (utils.isObject(config2[prop])) {\n config[prop] = utils.deepMerge(config1[prop], config2[prop]);\n } else if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (utils.isObject(config1[prop])) {\n config[prop] = utils.deepMerge(config1[prop]);\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n\n utils.forEach([\n 'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',\n 'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',\n 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'maxContentLength',\n 'validateStatus', 'maxRedirects', 'httpAgent', 'httpsAgent', 'cancelToken',\n 'socketPath'\n ], function defaultToConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n\n return config;\n};\n","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\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 // Only Node.JS has a process variable that is of [[Class]] process\n if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n } else if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\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\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","'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","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\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","'use strict';\n\nvar bind = require('./helpers/bind');\nvar isBuffer = require('is-buffer');\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Function equal to merge with the difference being that no reference\n * to original objects is kept.\n *\n * @see merge\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction deepMerge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = deepMerge(result[key], val);\n } else if (typeof val === 'object') {\n result[key] = deepMerge({}, val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n deepMerge: deepMerge,\n extend: extend,\n trim: trim\n};\n","var nestRE = /^(attrs|props|on|nativeOn|class|style|hook)$/\n\nmodule.exports = function mergeJSXProps (objs) {\n return objs.reduce(function (a, b) {\n var aa, bb, key, nestedKey, temp\n for (key in b) {\n aa = a[key]\n bb = b[key]\n if (aa && nestRE.test(key)) {\n // normalize class\n if (key === 'class') {\n if (typeof aa === 'string') {\n temp = aa\n a[key] = aa = {}\n aa[temp] = true\n }\n if (typeof bb === 'string') {\n temp = bb\n b[key] = bb = {}\n bb[temp] = true\n }\n }\n if (key === 'on' || key === 'nativeOn' || key === 'hook') {\n // merge functions\n for (nestedKey in bb) {\n aa[nestedKey] = mergeFn(aa[nestedKey], bb[nestedKey])\n }\n } else if (Array.isArray(aa)) {\n a[key] = aa.concat(bb)\n } else if (Array.isArray(bb)) {\n a[key] = [aa].concat(bb)\n } else {\n for (nestedKey in bb) {\n aa[nestedKey] = bb[nestedKey]\n }\n }\n } else {\n a[key] = b[key]\n }\n }\n return a\n }, {})\n}\n\nfunction mergeFn (a, b) {\n return function () {\n a && a.apply(this, arguments)\n b && b.apply(this, arguments)\n }\n}\n","module.exports = { \"default\": require(\"core-js/library/fn/json/stringify\"), __esModule: true };","module.exports = { \"default\": require(\"core-js/library/fn/object/keys\"), __esModule: true };","module.exports = { \"default\": require(\"core-js/library/fn/promise\"), __esModule: true };","module.exports = { \"default\": require(\"core-js/library/fn/symbol\"), __esModule: true };","module.exports = { \"default\": require(\"core-js/library/fn/symbol/iterator\"), __esModule: true };","\"use strict\";\n\nexports.__esModule = true;\n\nvar _promise = require(\"../core-js/promise\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (fn) {\n return function () {\n var gen = fn.apply(this, arguments);\n return new _promise2.default(function (resolve, reject) {\n function step(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 return _promise2.default.resolve(value).then(function (value) {\n step(\"next\", value);\n }, function (err) {\n step(\"throw\", err);\n });\n }\n }\n\n return step(\"next\");\n });\n };\n};","\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};","\"use strict\";\n\nexports.__esModule = true;\n\nvar _iterator = require(\"../core-js/symbol/iterator\");\n\nvar _iterator2 = _interopRequireDefault(_iterator);\n\nvar _symbol = require(\"../core-js/symbol\");\n\nvar _symbol2 = _interopRequireDefault(_symbol);\n\nvar _typeof = typeof _symbol2.default === \"function\" && typeof _iterator2.default === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = typeof _symbol2.default === \"function\" && _typeof(_iterator2.default) === \"symbol\" ? function (obj) {\n return typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n} : function (obj) {\n return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n};","module.exports = require(\"regenerator-runtime\");\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","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","var core = require('../../modules/_core');\nvar $JSON = core.JSON || (core.JSON = { stringify: JSON.stringify });\nmodule.exports = function stringify(it) { // eslint-disable-line no-unused-vars\n return $JSON.stringify.apply($JSON, arguments);\n};\n","require('../../modules/es6.object.keys');\nmodule.exports = require('../../modules/_core').Object.keys;\n","require('../modules/es6.object.to-string');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/web.dom.iterable');\nrequire('../modules/es6.promise');\nrequire('../modules/es7.promise.finally');\nrequire('../modules/es7.promise.try');\nmodule.exports = require('../modules/_core').Promise;\n","require('../../modules/es6.symbol');\nrequire('../../modules/es6.object.to-string');\nrequire('../../modules/es7.symbol.async-iterator');\nrequire('../../modules/es7.symbol.observable');\nmodule.exports = require('../../modules/_core').Symbol;\n","require('../../modules/es6.string.iterator');\nrequire('../../modules/web.dom.iterable');\nmodule.exports = require('../../modules/_wks-ext').f('iterator');\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","module.exports = function () { /* empty */ };\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","var core = module.exports = { version: '2.6.10' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\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","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var IS_WRAP = type & $export.W;\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE];\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && has(exports, key)) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? ctx(out, global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","module.exports = {};\n","module.exports = true;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\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 gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","exports.f = Object.getOwnPropertySymbols;\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","exports.f = {}.propertyIsEnumerable;\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var hide = require('./_hide');\nmodule.exports = function (target, src, safe) {\n for (var key in src) {\n if (safe && target[key]) target[key] = src[key];\n else hide(target, key, src[key]);\n } return target;\n};\n","module.exports = require('./_hide');\n","'use strict';\nvar global = require('./_global');\nvar core = require('./_core');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","exports.f = require('./_wks');\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","\n\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImVzNi5vYmplY3QudG8tc3RyaW5nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJmaWxlIjoib3V0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiIl19","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n","'use strict';\n// https://github.com/tc39/proposal-promise-try\nvar $export = require('./_export');\nvar newPromiseCapability = require('./_new-promise-capability');\nvar perform = require('./_perform');\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapability.f(this);\n var result = perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n","require('./_wks-define')('asyncIterator');\n","require('./_wks-define')('observable');\n","require('./es6.array.iterator');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar TO_STRING_TAG = require('./_wks')('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n 'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n 'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n 'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n 'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n var NAME = DOMIterables[i];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = Iterators.Array;\n}\n","/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing. The function also has a property 'clear' \n * that is a function which will clear the timer to prevent previously scheduled executions. \n *\n * @source underscore.js\n * @see http://unscriptable.com/2009/03/20/debouncing-javascript-methods/\n * @param {Function} function to wrap\n * @param {Number} timeout in ms (`100`)\n * @param {Boolean} whether to execute at the beginning (`false`)\n * @api public\n */\nfunction debounce(func, wait, immediate){\n var timeout, args, context, timestamp, result;\n if (null == wait) wait = 100;\n\n function later() {\n var last = Date.now() - timestamp;\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n context = args = null;\n }\n }\n };\n\n var debounced = function(){\n context = this;\n args = arguments;\n timestamp = Date.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n\n debounced.clear = function() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n };\n \n debounced.flush = function() {\n if (timeout) {\n result = func.apply(context, args);\n context = args = null;\n \n clearTimeout(timeout);\n timeout = null;\n }\n };\n\n return debounced;\n};\n\n// Adds compatibility for ES modules\ndebounce.debounce = debounce;\n\nmodule.exports = debounce;\n","'use strict';\nvar token = '%[a-f0-9]{2}';\nvar singleMatcher = new RegExp(token, 'gi');\nvar multiMatcher = new RegExp('(' + token + ')+', 'gi');\n\nfunction decodeComponents(components, split) {\n\ttry {\n\t\t// Try to decode the entire string first\n\t\treturn decodeURIComponent(components.join(''));\n\t} catch (err) {\n\t\t// Do nothing\n\t}\n\n\tif (components.length === 1) {\n\t\treturn components;\n\t}\n\n\tsplit = split || 1;\n\n\t// Split the array in 2 parts\n\tvar left = components.slice(0, split);\n\tvar right = components.slice(split);\n\n\treturn Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));\n}\n\nfunction decode(input) {\n\ttry {\n\t\treturn decodeURIComponent(input);\n\t} catch (err) {\n\t\tvar tokens = input.match(singleMatcher);\n\n\t\tfor (var i = 1; i < tokens.length; i++) {\n\t\t\tinput = decodeComponents(tokens, i).join('');\n\n\t\t\ttokens = input.match(singleMatcher);\n\t\t}\n\n\t\treturn input;\n\t}\n}\n\nfunction customDecodeURIComponent(input) {\n\t// Keep track of all the replacements and prefill the map with the `BOM`\n\tvar replaceMap = {\n\t\t'%FE%FF': '\\uFFFD\\uFFFD',\n\t\t'%FF%FE': '\\uFFFD\\uFFFD'\n\t};\n\n\tvar match = multiMatcher.exec(input);\n\twhile (match) {\n\t\ttry {\n\t\t\t// Decode as big chunks as possible\n\t\t\treplaceMap[match[0]] = decodeURIComponent(match[0]);\n\t\t} catch (err) {\n\t\t\tvar result = decode(match[0]);\n\n\t\t\tif (result !== match[0]) {\n\t\t\t\treplaceMap[match[0]] = result;\n\t\t\t}\n\t\t}\n\n\t\tmatch = multiMatcher.exec(input);\n\t}\n\n\t// Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else\n\treplaceMap['%C2'] = '\\uFFFD';\n\n\tvar entries = Object.keys(replaceMap);\n\n\tfor (var i = 0; i < entries.length; i++) {\n\t\t// Replace all decoded components\n\t\tvar key = entries[i];\n\t\tinput = input.replace(new RegExp(key, 'g'), replaceMap[key]);\n\t}\n\n\treturn input;\n}\n\nmodule.exports = function (encodedURI) {\n\tif (typeof encodedURI !== 'string') {\n\t\tthrow new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`');\n\t}\n\n\ttry {\n\t\tencodedURI = encodedURI.replace(/\\+/g, ' ');\n\n\t\t// Try the built in decoder first\n\t\treturn decodeURIComponent(encodedURI);\n\t} catch (err) {\n\t\t// Fallback to a more advanced decoder\n\t\treturn customDecodeURIComponent(encodedURI);\n\t}\n};\n","'use strict';\n\nrequire('./index').polyfill();\n","/**\n * Code refactored from Mozilla Developer Network:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n */\n\n'use strict';\n\nfunction assign(target, firstSource) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert first argument to object');\n }\n\n var to = Object(target);\n for (var i = 1; i < arguments.length; i++) {\n var nextSource = arguments[i];\n if (nextSource === undefined || nextSource === null) {\n continue;\n }\n\n var keysArray = Object.keys(Object(nextSource));\n for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {\n var nextKey = keysArray[nextIndex];\n var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n return to;\n}\n\nfunction polyfill() {\n if (!Object.assign) {\n Object.defineProperty(Object, 'assign', {\n enumerable: false,\n configurable: true,\n writable: true,\n value: assign\n });\n }\n}\n\nmodule.exports = {\n assign: assign,\n polyfill: polyfill\n};\n","// This file can be required in Browserify and Node.js for automatic polyfill\n// To use it: require('es6-promise/auto');\n'use strict';\nmodule.exports = require('./').polyfill();\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version v4.2.8+1e68dce6\n */\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.ES6Promise = factory());\n}(this, (function () { 'use strict';\n\nfunction objectOrFunction(x) {\n var type = typeof x;\n return x !== null && (type === 'object' || type === 'function');\n}\n\nfunction isFunction(x) {\n return typeof x === 'function';\n}\n\n\n\nvar _isArray = void 0;\nif (Array.isArray) {\n _isArray = Array.isArray;\n} else {\n _isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n}\n\nvar isArray = _isArray;\n\nvar len = 0;\nvar vertxNext = void 0;\nvar customSchedulerFn = void 0;\n\nvar asap = function asap(callback, arg) {\n queue[len] = callback;\n queue[len + 1] = arg;\n len += 2;\n if (len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (customSchedulerFn) {\n customSchedulerFn(flush);\n } else {\n scheduleFlush();\n }\n }\n};\n\nfunction setScheduler(scheduleFn) {\n customSchedulerFn = scheduleFn;\n}\n\nfunction setAsap(asapFn) {\n asap = asapFn;\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function () {\n return process.nextTick(flush);\n };\n}\n\n// vertx\nfunction useVertxTimer() {\n if (typeof vertxNext !== 'undefined') {\n return function () {\n vertxNext(flush);\n };\n }\n\n return useSetTimeout();\n}\n\nfunction useMutationObserver() {\n var iterations = 0;\n var observer = new BrowserMutationObserver(flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function () {\n node.data = iterations = ++iterations % 2;\n };\n}\n\n// web worker\nfunction useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = flush;\n return function () {\n return channel.port2.postMessage(0);\n };\n}\n\nfunction useSetTimeout() {\n // Store setTimeout reference so es6-promise will be unaffected by\n // other code modifying setTimeout (like sinon.useFakeTimers())\n var globalSetTimeout = setTimeout;\n return function () {\n return globalSetTimeout(flush, 1);\n };\n}\n\nvar queue = new Array(1000);\nfunction flush() {\n for (var i = 0; i < len; i += 2) {\n var callback = queue[i];\n var arg = queue[i + 1];\n\n callback(arg);\n\n queue[i] = undefined;\n queue[i + 1] = undefined;\n }\n\n len = 0;\n}\n\nfunction attemptVertx() {\n try {\n var vertx = Function('return this')().require('vertx');\n vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return useVertxTimer();\n } catch (e) {\n return useSetTimeout();\n }\n}\n\nvar scheduleFlush = void 0;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && typeof require === 'function') {\n scheduleFlush = attemptVertx();\n} else {\n scheduleFlush = useSetTimeout();\n}\n\nfunction then(onFulfillment, onRejection) {\n var parent = this;\n\n var child = new this.constructor(noop);\n\n if (child[PROMISE_ID] === undefined) {\n makePromise(child);\n }\n\n var _state = parent._state;\n\n\n if (_state) {\n var callback = arguments[_state - 1];\n asap(function () {\n return invokeCallback(_state, child, callback, parent._result);\n });\n } else {\n subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n}\n\n/**\n `Promise.resolve` returns a promise that will become resolved with the\n passed `value`. It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n resolve(1);\n });\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.resolve(1);\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n @method resolve\n @static\n @param {Any} value value that the returned promise will be resolved with\n Useful for tooling.\n @return {Promise} a promise that will become fulfilled with the given\n `value`\n*/\nfunction resolve$1(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(noop);\n resolve(promise, object);\n return promise;\n}\n\nvar PROMISE_ID = Math.random().toString(36).substring(2);\n\nfunction noop() {}\n\nvar PENDING = void 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\n\nfunction selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) {\n try {\n then$$1.call(value, fulfillmentHandler, rejectionHandler);\n } catch (e) {\n return e;\n }\n}\n\nfunction handleForeignThenable(promise, thenable, then$$1) {\n asap(function (promise) {\n var sealed = false;\n var error = tryThen(then$$1, thenable, function (value) {\n if (sealed) {\n return;\n }\n sealed = true;\n if (thenable !== value) {\n resolve(promise, value);\n } else {\n fulfill(promise, value);\n }\n }, function (reason) {\n if (sealed) {\n return;\n }\n sealed = true;\n\n reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n reject(promise, error);\n }\n }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n if (thenable._state === FULFILLED) {\n fulfill(promise, thenable._result);\n } else if (thenable._state === REJECTED) {\n reject(promise, thenable._result);\n } else {\n subscribe(thenable, undefined, function (value) {\n return resolve(promise, value);\n }, function (reason) {\n return reject(promise, reason);\n });\n }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then$$1) {\n if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) {\n handleOwnThenable(promise, maybeThenable);\n } else {\n if (then$$1 === undefined) {\n fulfill(promise, maybeThenable);\n } else if (isFunction(then$$1)) {\n handleForeignThenable(promise, maybeThenable, then$$1);\n } else {\n fulfill(promise, maybeThenable);\n }\n }\n}\n\nfunction resolve(promise, value) {\n if (promise === value) {\n reject(promise, selfFulfillment());\n } else if (objectOrFunction(value)) {\n var then$$1 = void 0;\n try {\n then$$1 = value.then;\n } catch (error) {\n reject(promise, error);\n return;\n }\n handleMaybeThenable(promise, value, then$$1);\n } else {\n fulfill(promise, value);\n }\n}\n\nfunction publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n publish(promise);\n}\n\nfunction fulfill(promise, value) {\n if (promise._state !== PENDING) {\n return;\n }\n\n promise._result = value;\n promise._state = FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n asap(publish, promise);\n }\n}\n\nfunction reject(promise, reason) {\n if (promise._state !== PENDING) {\n return;\n }\n promise._state = REJECTED;\n promise._result = reason;\n\n asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n var _subscribers = parent._subscribers;\n var length = _subscribers.length;\n\n\n parent._onerror = null;\n\n _subscribers[length] = child;\n _subscribers[length + FULFILLED] = onFulfillment;\n _subscribers[length + REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n asap(publish, parent);\n }\n}\n\nfunction publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) {\n return;\n }\n\n var child = void 0,\n callback = void 0,\n detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n var hasCallback = isFunction(callback),\n value = void 0,\n error = void 0,\n succeeded = true;\n\n if (hasCallback) {\n try {\n value = callback(detail);\n } catch (e) {\n succeeded = false;\n error = e;\n }\n\n if (promise === value) {\n reject(promise, cannotReturnOwn());\n return;\n }\n } else {\n value = detail;\n }\n\n if (promise._state !== PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n resolve(promise, value);\n } else if (succeeded === false) {\n reject(promise, error);\n } else if (settled === FULFILLED) {\n fulfill(promise, value);\n } else if (settled === REJECTED) {\n reject(promise, value);\n }\n}\n\nfunction initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value) {\n resolve(promise, value);\n }, function rejectPromise(reason) {\n reject(promise, reason);\n });\n } catch (e) {\n reject(promise, e);\n }\n}\n\nvar id = 0;\nfunction nextId() {\n return id++;\n}\n\nfunction makePromise(promise) {\n promise[PROMISE_ID] = id++;\n promise._state = undefined;\n promise._result = undefined;\n promise._subscribers = [];\n}\n\nfunction validationError() {\n return new Error('Array Methods must be provided an Array');\n}\n\nvar Enumerator = function () {\n function Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(noop);\n\n if (!this.promise[PROMISE_ID]) {\n makePromise(this.promise);\n }\n\n if (isArray(input)) {\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate(input);\n if (this._remaining === 0) {\n fulfill(this.promise, this._result);\n }\n }\n } else {\n reject(this.promise, validationError());\n }\n }\n\n Enumerator.prototype._enumerate = function _enumerate(input) {\n for (var i = 0; this._state === PENDING && i < input.length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n Enumerator.prototype._eachEntry = function _eachEntry(entry, i) {\n var c = this._instanceConstructor;\n var resolve$$1 = c.resolve;\n\n\n if (resolve$$1 === resolve$1) {\n var _then = void 0;\n var error = void 0;\n var didError = false;\n try {\n _then = entry.then;\n } catch (e) {\n didError = true;\n error = e;\n }\n\n if (_then === then && entry._state !== PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof _then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === Promise$1) {\n var promise = new c(noop);\n if (didError) {\n reject(promise, error);\n } else {\n handleMaybeThenable(promise, entry, _then);\n }\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function (resolve$$1) {\n return resolve$$1(entry);\n }), i);\n }\n } else {\n this._willSettleAt(resolve$$1(entry), i);\n }\n };\n\n Enumerator.prototype._settledAt = function _settledAt(state, i, value) {\n var promise = this.promise;\n\n\n if (promise._state === PENDING) {\n this._remaining--;\n\n if (state === REJECTED) {\n reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n fulfill(promise, this._result);\n }\n };\n\n Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) {\n var enumerator = this;\n\n subscribe(promise, undefined, function (value) {\n return enumerator._settledAt(FULFILLED, i, value);\n }, function (reason) {\n return enumerator._settledAt(REJECTED, i, reason);\n });\n };\n\n return Enumerator;\n}();\n\n/**\n `Promise.all` accepts an array of promises, and returns a new promise which\n is fulfilled with an array of fulfillment values for the passed promises, or\n rejected with the reason of the first passed promise to be rejected. It casts all\n elements of the passed iterable to promises as it runs this algorithm.\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = resolve(2);\n let promise3 = resolve(3);\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // The array here would be [ 1, 2, 3 ];\n });\n ```\n\n If any of the `promises` given to `all` are rejected, the first promise\n that is rejected will be given as an argument to the returned promises's\n rejection handler. For example:\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = reject(new Error(\"2\"));\n let promise3 = reject(new Error(\"3\"));\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // Code here never runs because there are rejected promises!\n }, function(error) {\n // error.message === \"2\"\n });\n ```\n\n @method all\n @static\n @param {Array} entries array of promises\n @param {String} label optional string for labeling the promise.\n Useful for tooling.\n @return {Promise} promise that is fulfilled when all `promises` have been\n fulfilled, or rejected if any of them become rejected.\n @static\n*/\nfunction all(entries) {\n return new Enumerator(this, entries).promise;\n}\n\n/**\n `Promise.race` returns a new promise which is settled in the same way as the\n first passed promise to settle.\n\n Example:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 2');\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // result === 'promise 2' because it was resolved before promise1\n // was resolved.\n });\n ```\n\n `Promise.race` is deterministic in that only the state of the first\n settled promise matters. For example, even if other promises given to the\n `promises` array argument are resolved, but the first settled promise has\n become rejected before the other promises became fulfilled, the returned\n promise will become rejected:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n reject(new Error('promise 2'));\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // Code here never runs\n }, function(reason){\n // reason.message === 'promise 2' because promise 2 became rejected before\n // promise 1 became fulfilled\n });\n ```\n\n An example real-world use case is implementing timeouts:\n\n ```javascript\n Promise.race([ajax('foo.json'), timeout(5000)])\n ```\n\n @method race\n @static\n @param {Array} promises array of promises to observe\n Useful for tooling.\n @return {Promise} a promise which settles in the same way as the first passed\n promise to settle.\n*/\nfunction race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (!isArray(entries)) {\n return new Constructor(function (_, reject) {\n return reject(new TypeError('You must pass an array to race.'));\n });\n } else {\n return new Constructor(function (resolve, reject) {\n var length = entries.length;\n for (var i = 0; i < length; i++) {\n Constructor.resolve(entries[i]).then(resolve, reject);\n }\n });\n }\n}\n\n/**\n `Promise.reject` returns a promise rejected with the passed `reason`.\n It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n reject(new Error('WHOOPS'));\n });\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.reject(new Error('WHOOPS'));\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n @method reject\n @static\n @param {Any} reason value that the returned promise will be rejected with.\n Useful for tooling.\n @return {Promise} a promise rejected with the given `reason`.\n*/\nfunction reject$1(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(noop);\n reject(promise, reason);\n return promise;\n}\n\nfunction needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n let promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n let xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {Function} resolver\n Useful for tooling.\n @constructor\n*/\n\nvar Promise$1 = function () {\n function Promise(resolver) {\n this[PROMISE_ID] = nextId();\n this._result = this._state = undefined;\n this._subscribers = [];\n\n if (noop !== resolver) {\n typeof resolver !== 'function' && needsResolver();\n this instanceof Promise ? initializePromise(this, resolver) : needsNew();\n }\n }\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n Chaining\n --------\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n Assimilation\n ------------\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n If the assimliated promise rejects, then the downstream promise will also reject.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n Simple Example\n --------------\n Synchronous Example\n ```javascript\n let result;\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n Advanced Example\n --------------\n Synchronous Example\n ```javascript\n let author, books;\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n function foundBooks(books) {\n }\n function failure(reason) {\n }\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n\n\n Promise.prototype.catch = function _catch(onRejection) {\n return this.then(null, onRejection);\n };\n\n /**\n `finally` will be invoked regardless of the promise's fate just as native\n try/catch/finally behaves\n \n Synchronous example:\n \n ```js\n findAuthor() {\n if (Math.random() > 0.5) {\n throw new Error();\n }\n return new Author();\n }\n \n try {\n return findAuthor(); // succeed or fail\n } catch(error) {\n return findOtherAuther();\n } finally {\n // always runs\n // doesn't affect the return value\n }\n ```\n \n Asynchronous example:\n \n ```js\n findAuthor().catch(function(reason){\n return findOtherAuther();\n }).finally(function(){\n // author was either found, or not\n });\n ```\n \n @method finally\n @param {Function} callback\n @return {Promise}\n */\n\n\n Promise.prototype.finally = function _finally(callback) {\n var promise = this;\n var constructor = promise.constructor;\n\n if (isFunction(callback)) {\n return promise.then(function (value) {\n return constructor.resolve(callback()).then(function () {\n return value;\n });\n }, function (reason) {\n return constructor.resolve(callback()).then(function () {\n throw reason;\n });\n });\n }\n\n return promise.then(callback, callback);\n };\n\n return Promise;\n}();\n\nPromise$1.prototype.then = then;\nPromise$1.all = all;\nPromise$1.race = race;\nPromise$1.resolve = resolve$1;\nPromise$1.reject = reject$1;\nPromise$1._setScheduler = setScheduler;\nPromise$1._setAsap = setAsap;\nPromise$1._asap = asap;\n\n/*global self*/\nfunction polyfill() {\n var local = void 0;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P) {\n var promiseToString = null;\n try {\n promiseToString = Object.prototype.toString.call(P.resolve());\n } catch (e) {\n // silently ignored\n }\n\n if (promiseToString === '[object Promise]' && !P.cast) {\n return;\n }\n }\n\n local.Promise = Promise$1;\n}\n\n// Strange compat..\nPromise$1.polyfill = polyfill;\nPromise$1.Promise = Promise$1;\n\nreturn Promise$1;\n\n})));\n\n\n\n//# sourceMappingURL=es6-promise.map\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n\nmodule.exports = function isBuffer (obj) {\n return obj != null && obj.constructor != null &&\n typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","/*!\n * jQuery JavaScript Library v3.4.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2019-05-01T21:04Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n // Support: Chrome <=57, Firefox <=52\n // In some browsers, typeof returns \"function\" for HTML elements\n // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n // We don't want to classify *any* DOM node as a function.\n return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.4.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code, options ) {\n\t\tDOMEval( code, { nonce: options && options.nonce } );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.4\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2019-04-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t(nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\") ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 && rdescend.test( selector ) ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = \"#\" + nid + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement(\"fieldset\");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem.namespaceURI,\n\t\tdocElem = (elem.ownerDocument || elem).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment(\"\") );\n\t\treturn !el.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"\" +\n\t\t\t\t\"\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"\" +\n\t\t\t\t\"\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(\":enabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(\":disabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + \"\").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\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}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: ) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement(\"fieldset\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = \"\";\n\treturn el.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = \"\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( typeof elem.contentDocument !== \"undefined\" ) {\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\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\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ 1, \"\", \"
\" ],\n\tcol: [ 2, \"\", \"
\" ],\n\ttr: [ 2, \"\", \"
\" ],\n\ttd: [ 3, \"\", \"
\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\treturn result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css('filter') (IE 9 only, #12537)\n\t// .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t// This happens for inline elements with no explicit setting (gh-3571)\n\t// Support: Android <=4.1 - 4.3 only\n\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t// Support: IE 9-11 only\n\t// Also use offsetWidth/offsetHeight for when box sizing is unreliable\n\t// We use getClientRects() to check for hidden/disconnected.\n\t// In those cases, the computed value can be trusted to be border-box\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\t\tval === \"auto\" ||\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = Date.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\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}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\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}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\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\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url, options ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\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};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\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}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"\n","import Vue from 'vue';\nimport store from '../store';\nimport API from '../../services/api';\nimport userRights from '../../services/user-rights';\n\nimport VueTables from 'vue-tables-2';\nimport PortalVue from 'portal-vue';\nimport VModal from 'vue-js-modal'\nimport Notifications from 'vue-notification';\n\n// Global components\nimport '../components/the-subheader';\nimport '../components/the-sidebar-layout';\nimport '../components/the-1-column-layout';\n\nVue.use(Notifications);\nVue.use(PortalVue);\n\nVue.use(VueTables.ClientTable, {\n sortIcon: {\n is: 'icon--chevron-up-down--black',\n base: 'icon',\n up: 'icon--chevron-up--black',\n down: 'icon--chevron-down--black'\n }\n}, false, () => { return {\n framework: '',\n table: 'table v-data-table',\n row: 'v-data-table__row',\n column: 'v-data-table__col',\n label: '',\n input: 'v-data-table__input',\n select: 'v-data-table__select',\n field: 'v-data-table__field',\n inline: 'is-inline',\n right: 'is-pull-right',\n left: 'is-pull-left',\n center: 'text-center',\n contentCenter: '',\n small: '',\n nomargin: '',\n groupTr: 'v-data-table__info',\n button: 'btn btn-secondary',\n dropdown: {\n container: 'dropdown',\n trigger: 'dropdown-toggle',\n menu: 'dropdown-menu',\n content: '',\n item: '',\n caret: 'caret'\n },\n pagination: {\n nav: '',\n count: '',\n wrapper: '',\n list: 'pagination',\n item: 'page-item',\n link: 'page-link',\n next: '',\n prev: '',\n active: 'active'\n }\n}});\nVue.use(VModal, {\n dialog: true\n});\n\nVue.prototype.$api = new API();\nVue.prototype.$userRights = new userRights();\n\n\n// Global localization function {{loc('user.firstName')}}\nVue.mixin({\n data: function() {\n return {\n loc(keys) {\n if(!store.state.localization) {\n return '';\n }\n\n const keysOriginal = keys;\n\n if(!Array.isArray(keys)) {\n keys = keys.split('.');\n }\n\n let value;\n\n keys.forEach((key) => {\n value = value ? value[key] : store.state.localization[key];\n });\n\n if(typeof value === 'undefined' || value === null) {\n return 'missing: \"' + keysOriginal + '\"';\n }\n\n return value;\n }\n }\n }\n});\n","import Vue from 'vue';\nimport App from '../app.vue';\nimport Router from './router';\nimport store from '../../store';\n\nimport '../common-settings';\n\nexport default {\n init(elementId) {\n const element = document.getElementById(elementId);\n\n if(element) {\n\n const router = new Router({\n base: element.getAttribute('data-base-url'),\n pages: JSON.parse(element.getAttribute('data-pages'))\n });\n\n new Vue({\n el: '#' + elementId,\n router,\n store,\n mounted () {\n // Stuff to do when mounted\n },\n render: createElement => {\n return createElement(App)\n },\n created: () => {\n\n }\n })\n }\n }\n}\n","import Vue from 'vue'\nimport VueRouter from 'vue-router'\n\n// Views\nimport Complaints from '../../../components/view-complaints.vue';\nimport Complaint from '../../../components/view-complaint.vue';\nimport CustomerMachine from '../../../components/view-customer-machine.vue';\n\nVue.use(VueRouter)\n\nconst Router = (options) => {\n const routes = [\n { path: '/', name: 'complaints', component: Complaints },\n { path: '/:id', name: 'complaint', component: Complaint },\n { path: '/customer-machines/:serialNumber', name: 'customer-machine', component: CustomerMachine, beforeEnter(to, from, next) {\n const externalPage = options.pages && options.pages[to.name];\n if(externalPage) {\n location.href = externalPage.url + to.params.serialNumber;\n return;\n }\n next();\n }}\n ];\n\n const router = new VueRouter({\n mode: 'history',\n base: options.base,\n linkActiveClass: 'v-router-link__active',\n linkExactActiveClass: 'v-router-link__current',\n routes: routes\n });\n\n return router;\n}\n\nexport default Router;\n","import Vue from 'vue'\nimport VueRouter from 'vue-router'\n\n// Views\nimport CustomerMachines from '../../../components/view-customer-machines.vue';\nimport CustomerMachine from '../../../components/view-customer-machine.vue';\nimport Complaint from '../../../components/view-complaint.vue';\n\nVue.use(VueRouter)\n\nconst Router = (options) => {\n return new VueRouter({\n mode: 'history',\n base: options.base,\n linkActiveClass: 'v-router-link__active',\n linkExactActiveClass: 'v-router-link__current',\n routes: [\n { path: '/', name: 'customer-machines', component: CustomerMachines },\n { path: '/:serialNumber', name: 'customer-machine', component: CustomerMachine },\n { path: '/complaints/:id', name: 'complaint', component: Complaint, beforeEnter(to, from, next) {\n const externalPage = options.pages && options.pages[to.name];\n if(externalPage) {\n location.href = externalPage.url + to.params.id;\n return;\n }\n next();\n }}\n ]\n })\n}\n\nexport default Router;\n","import Vue from 'vue';\nimport App from '../app.vue';\nimport Router from './router';\nimport store from '../../store';\n\nimport '../common-settings';\n\nexport default {\n init(elementId) {\n const element = document.getElementById(elementId);\n\n if(element) {\n\n const router = new Router({\n base: element.getAttribute('data-base-url')\n });\n\n new Vue({\n el: '#' + elementId,\n router,\n store,\n mounted () {\n // Stuff to do when mounted\n },\n render: createElement => {\n return createElement(App)\n },\n created: () => {\n\n }\n })\n }\n }\n}\n","import Vue from 'vue'\nimport VueRouter from 'vue-router'\n\n// Views\nimport Home from '../view-home.vue';\nimport Companies from '../../../components/view-companies.vue';\nimport Company from '../../../components/view-company.vue';\n\nVue.use(VueRouter)\n\nconst Router = (options) => {\n return new VueRouter({\n mode: 'history',\n base: options.base,\n linkActiveClass: 'v-router-link__active',\n linkExactActiveClass: 'v-router-link__current',\n routes: [\n { path: '/', name: 'home', component: Home },\n { path: '/companies/:parent', name: 'companies', component: Companies},\n { path: '/company/:id', name: 'company', component: Company}\n ]\n })\n}\n\nexport default Router;\n","\n\n\n","import Vue from 'vue';\nimport App from '../app.vue';\nimport Router from './router';\nimport store from '../../store';\n\nimport '../common-settings';\n\nexport default {\n init(elementId) {\n const element = document.getElementById(elementId);\n\n if(element) {\n\n const router = new Router({\n base: element.getAttribute('data-base-url')\n });\n\n new Vue({\n el: '#' + elementId,\n router,\n store,\n mounted () {\n //console.log(this);\n // Stuff to do when mounted\n },\n render: createElement => {\n return createElement(App)\n },\n created: () => {\n // We don't actually have subheader but we don't need it either\n store.commit('setSubheaderFound', true);\n store.commit('setNeedsLogginIn', false);\n }\n })\n }\n }\n}\n","import Vue from 'vue'\nimport VueRouter from 'vue-router'\n\n// Views\nimport ForgottenPassword from '../../../components/view-forgotten-password.vue';\n\nVue.use(VueRouter)\n\nconst Router = (options) => {\n return new VueRouter({\n mode: 'history',\n base: options.base,\n linkActiveClass: 'v-router-link__active',\n linkExactActiveClass: 'v-router-link__current',\n routes: [\n {\n path: '/', name: 'forgotten-password', component: ForgottenPassword\n }\n ]\n })\n}\n\nexport default Router;\n","import Vue from 'vue'\nimport VueRouter from 'vue-router'\n\n// Views\nimport Company from '../../../components/view-company.vue';\n\nVue.use(VueRouter)\n\nconst Router = (options) => {\n return new VueRouter({\n mode: 'history',\n base: options.base,\n linkActiveClass: 'v-router-link__active',\n linkExactActiveClass: 'v-router-link__current',\n routes: [\n { path: '/', name: 'company', component: Company },\n ]\n })\n}\n\nexport default Router;\n","import Vue from 'vue';\nimport App from '../app.vue';\nimport Router from './router';\nimport store from '../../store';\n\nimport '../common-settings';\n\nexport default {\n init(elementId) {\n const element = document.getElementById(elementId);\n\n if(element) {\n\n const router = new Router({\n base: element.getAttribute('data-base-url')\n });\n\n new Vue({\n el: '#' + elementId,\n router,\n store,\n mounted () {\n // Stuff to do when mounted\n },\n render: createElement => {\n return createElement(App)\n },\n created: () => {\n // We don't actually have subheader but we don't need it either\n store.commit('setSubheaderFound', true);\n store.commit('setNeedsLogginIn', false);\n }\n })\n }\n }\n}\n","import Vue from 'vue'\nimport VueRouter from 'vue-router'\n\n// Views\nimport UpdatePassword from '../../../components/view-update-password.vue';\n\nVue.use(VueRouter)\n\nconst Router = (options) => {\n return new VueRouter({\n mode: 'history',\n base: options.base,\n linkActiveClass: 'v-router-link__active',\n linkExactActiveClass: 'v-router-link__current',\n routes: [\n {\n path: '/', name: 'update-password', component: UpdatePassword\n }\n ]\n })\n}\n\nexport default Router;\n","import Vue from 'vue'\nimport VueRouter from 'vue-router'\n\n// Views\nimport UserSettings from '../../../components/view-user-settings.vue';\nimport ChangePassword from '../../../components/view-change-password.vue';\nimport EditAccount from '../../../components/view-edit-account.vue';\n\nVue.use(VueRouter)\n\nconst Router = (options) => {\n return new VueRouter({\n mode: 'history',\n base: options.base,\n linkActiveClass: 'v-router-link__active',\n linkExactActiveClass: 'v-router-link__current',\n routes: [\n {\n path: '/', name: 'user-settings', component: UserSettings,\n children: [\n {\n // UserProfile will be rendered inside User's \n // when /user/:id/profile is matched\n name: 'change-password',\n path: 'change-password',\n component: ChangePassword\n },\n {\n // UserPosts will be rendered inside User's \n // when /user/:id/posts is matched\n name: 'edit-account',\n path: 'edit-account',\n component: EditAccount\n }\n ]\n }\n ]\n })\n}\n\nexport default Router;\n","import Vue from 'vue'\nimport VueRouter from 'vue-router'\n\n// Views\nimport WarrantyRegistrations from '../../../components/view-warranty-registrations.vue';\nimport WarrantyRegistration from '../../../components/view-warranty-registration.vue';\n\nVue.use(VueRouter)\n\nconst Router = (options) => {\n const routes = [\n { path: '/', name: 'warranty-registrations', component: WarrantyRegistrations },\n { path: '/:id', name: 'warranty-registration', component: WarrantyRegistration }\n ];\n\n const router = new VueRouter({\n mode: 'history',\n base: options.base,\n linkActiveClass: 'v-router-link__active',\n linkExactActiveClass: 'v-router-link__current',\n routes: routes\n });\n\n return router;\n}\n\nexport default Router;\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","import Vue from 'vue';\n\n/**\n * This uses template that is included in script tag\n **/\n\nVue.component('the-1-column-layout', {\n template: '#js-layout-1-column-template'\n});\n","import Vue from 'vue';\n\n/**\n * This uses template that is included in script tag\n **/\n\nVue.component('the-sidebar-layout', {\n template: '#js-layout-sidebar-template',\n props: ['sidebar-title'],\n computed: {\n hasSidebarTitle() {\n return this.$slots['sidebar-title'];\n }\n }\n});\n","import Vue from 'vue';\n\n/**\n * Subheader uses Stage template that is included in script tag\n **/\n\nVue.component('the-subheader', {\n template: '#js-subheader-template',\n data: function () {\n return {\n searchText: '',\n }\n },\n computed: {\n searchEnabled () {\n return this.$store.state.subheader.searchEnabled;\n },\n title () {\n return this.$store.state.subheader.title;\n },\n description () {\n return this.$store.state.subheader.description;\n },\n subtitle () {\n return this.$store.state.subheader.subtitle;\n }\n },\n watch: {\n searchText: function (value) {\n this.$store.commit('setSubheaderSearchText', this.searchText);\n }\n },\n mounted: function () {\n // Remove the original header once we're done loading\n const subheader = document.getElementById('js-subheader');\n if(subheader) {\n subheader.remove();\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","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n\n\n","\n\n\n\n","\n\n","import Vuex from 'vuex'\nimport Vue from 'vue'\n\nimport API from '../../services/api';\nimport dataService from '../../services/data-service';\n\nconst api = new API();\n\nVue.use(Vuex)\n\n\nconst stateHelper = {\n updateArray(res, stateArray, key) {\n\n res = Array.isArray(res) ? res : [res]; // Turn into array, so we can handle it same way\n const resIds = {};\n const added = [];\n\n res.forEach(item => {\n resIds[item[key]] = item;\n });\n\n // If already added, update\n for(let i=stateArray.length-1; i>=0; i--) {\n if(resIds[stateArray[i][key]]) {\n stateArray.splice(i, 1, resIds[stateArray[i][key]]);\n added.push(stateArray[i][key]);\n }\n }\n\n // Add new ones\n if(added.length !== res.length) {\n res.forEach(item => {\n if(added.indexOf(item[key]) === -1) {\n stateArray.push(item);\n }\n });\n }\n },\n removeFromArray(id, stateArray, key) {\n for(let i=stateArray.length-1; i>=0; i--) {\n if(stateArray[i][key] === id) {\n stateArray.splice(i, 1);\n return;\n }\n }\n }\n}\n\nconst store = new Vuex.Store({\n strict: process.env.NODE_ENV !== 'production',\n state: {\n language: '',\n user: {\n info: null,\n company: null,\n role: null\n },\n subheader: {\n title: '',\n description: '',\n searchEnabled: false,\n searchText: ''\n },\n customerMachines: [],\n customerMachineDetails: [],\n companies: [],\n users: [], // company id as key for an array of user objects\n complaints: [],\n warrantyRegistrations: [],\n warrantedSerialNumbers: [],\n loggedIn: false,\n needsLoggingIn: true,\n localization: null,\n preloading: true,\n countries: [],\n subheaderFound: false,\n subheaderSubtitle: '',\n subheaderTitle: '',\n subheaderDescription: '',\n notificationsQueue: [],\n notificationsMax: 6\n },\n mutations: {\n setLanguage(state, res) {\n state.language = res;\n },\n setCurrentUser(state, res) {\n state.user.info = res;\n state.user.role = res.role;\n },\n setCurrentUserCompany(state, res) {\n state.user.company = res;\n },\n setCurrentMachineOwner(state, res) {\n state.machine.customerNumber = res.customerNumber;\n state.machine.companyName = res.companyName;\n },\n setLoginStatus(state, res) {\n state.loggedIn = res;\n },\n setNeedsLogginIn(state, res) {\n state.needsLoggingIn = res;\n },\n setLocalization(state, res) {\n state.localization = res;\n },\n setPreloadingStatus(state, res) {\n state.preloading = res;\n },\n setCompanies(state, res) {\n stateHelper.updateArray(res, state.companies, 'id');\n },\n setCompany(state, res) {\n stateHelper.updateArray(res, state.companies, 'id');\n },\n setCountries(state, res) {\n state.countries = res\n },\n setSubheaderFound(state, res) {\n state.subheaderFound = res;\n },\n setSubheader(state, res) {\n state.subheader.subtitle = res.subtitle;\n state.subheader.title = res.title;\n state.subheader.description = res.description;\n state.subheader.searchEnabled = res.searchEnabled;\n },\n setSubheaderSearchText(state, res) {\n state.subheader.searchText = res;\n },\n setCustomerMachines(state, res) {\n stateHelper.updateArray(res, state.customerMachines, 'serialNumber');\n },\n setCustomerMachineDetails(state, res) {\n stateHelper.updateArray(res, state.customerMachineDetails, 'serialNumber');\n },\n addCompany(state, res) {\n state.companies.push(res);\n },\n updateCompany(state, res) {\n stateHelper.updateArray(res, state.companies, 'id');\n },\n deleteCompany(state, res) {\n stateHelper.removeFromArray(res, state.companies, 'id');\n },\n setComplaints(state, res) {\n stateHelper.updateArray(res, state.complaints, 'uuid');\n },\n setWarrantedSerialNumbers(state, res) {\n state.warrantedSerialNumbers = res;\n },\n addComplaint(state, res) {\n stateHelper.updateArray(res, state.complaints, 'uuid');\n },\n setWarrantyRegistrations(state, res) {\n stateHelper.updateArray(res, state.warrantyRegistrations, 'uuid');\n },\n addWarrantyRegistration(state, res) {\n stateHelper.updateArray(res, state.warrantyRegistrations, 'uuid');\n },\n setUsers(state, res) {\n stateHelper.updateArray(res, state.users, 'id');\n },\n addUser(state, res) {\n stateHelper.updateArray(res, state.users, 'id');\n },\n updateUser(state, res) {\n stateHelper.updateArray(res, state.users, 'id');\n },\n deleteUser(state, res) {\n stateHelper.removeFromArray(res, state.users, 'id');\n },\n addNotification(state, messages) {\n state.notificationsQueue.push(messages.join(', '))\n\n if (state.notificationsQueue.length > state.notificationsMax) {\n state.notificationsQueue.shift()\n }\n },\n updateAdditionalInformation(state, message) {\n state.additionalInformation = message\n }\n },\n actions: {\n getCountries(context) {\n // Only fetch countries once\n if(context.state.countries.length) {\n return;\n }\n\n return api.getCountries()\n .then(res => {\n if(res.result.countries) {\n context.commit('setCountries', res.result.countries);\n }\n });\n },\n getCurrentUser({ commit }) {\n return api.getCurrentUser()\n .then((res) => {\n // If we can get proper answer, we're logged in\n if(res.code === 200) {\n commit('setLoginStatus', true);\n }\n\n commit('setCurrentUser', res.result.user);\n commit('setCurrentUserCompany', res.result.company);\n });\n },\n getLocalization({commit}) {\n return api.getLocalization()\n .then(res => {\n if(res.result.localization) {\n commit('setLocalization', res.result.localization);\n }\n });\n },\n getComplaints({commit}, options) {\n if(!options) {\n return api.getComplaints({\n includeChildCompanies: true\n })\n .then(res => {\n if(res.result.complaints) {\n commit('setComplaints', res.result.complaints);\n }\n if(res.result.warrantedSerialNumbers) {\n commit('setWarrantedSerialNumbers', res.result.warrantedSerialNumbers)\n }\n });\n }\n\n return api.getComplaints(options)\n .then(res => {\n if(res.result.complaints) {\n commit('setComplaints', res.result.complaints);\n }\n });\n },\n getComplaint({commit}, complaintId) {\n return api.getComplaint(complaintId)\n .then(res => {\n if(res.result.complaint) {\n commit('setComplaints', res.result.complaint);\n }\n });\n },\n getWarrantyRegistrations({commit}, options) {\n if(!options) {\n return api.getWarrantyRegistrations({includeChildCompanies: true})\n .then(res => {\n if(res.result.warrantyRegistrations) {\n commit('setWarrantyRegistrations', res.result.warrantyRegistrations);\n }\n });\n }\n\n return api.getWarrantyRegistrations(options)\n .then(res => {\n if(res.result.warrantyRegistrations) {\n commit('setWarrantyRegistrations', res.result.warrantyRegistrations);\n }\n });\n },\n getWarrantyRegistration({commit}, warrantyRegistrationId) {\n return api.getWarrantyRegistration(warrantyRegistrationId)\n .then(res => {\n if(res.result.warrantyRegistration) {\n commit('setWarrantyRegistrations', res.result.warrantyRegistration);\n }\n });\n },\n getCustomerMachines({commit}, companyId) {\n return api.getCustomerMachines({\n company: companyId,\n includeChildCompanies: true\n })\n .then(res => {\n if(res.result.customerMachines) {\n commit('setCustomerMachines', res.result.customerMachines);\n }\n });\n },\n getCustomerMachine({commit}, serialNumber) {\n return api.getCustomerMachine(serialNumber)\n .then(res => {\n if(res.result.customerMachine) {\n commit('setCustomerMachines', res.result.customerMachine);\n }\n });\n },\n getCustomerMachineDetails({commit}, serialNumber) {\n return api.getCustomerMachineDetails(serialNumber)\n .then(res => {\n if(res.result.customerMachineDetails) {\n commit('setCustomerMachineDetails', res.result.customerMachineDetails);\n }\n });\n },\n getChildCompanies(context) {\n return api.getCompanies({\n childrenOf: context.state.user.info.company,\n includeUsersOfRoles: ['retailer-admin']\n })\n .then(res => {\n if(res.result.companies) {\n res.result.companies.forEach(company => {\n company.users.forEach(user => {\n if(!company.contacts) {\n company.contacts = [];\n }\n });\n });\n context.commit('setCompanies', res.result.companies);\n }\n });\n },\n getCompany({commit}, companyId) {\n return api.getCompany(companyId)\n .then(res => {\n if(res.result.company) {\n commit('setCompany', res.result.company);\n }\n });\n },\n getCompanyUsers(context, companyId) {\n return api.getUsers({\n company: companyId\n })\n .then(res => {\n if(res.result.users) {\n context.commit('setUsers', res.result.users);\n }\n });\n },\n deleteCompany(context, companyId) {\n return api.deleteCompany(companyId)\n .then(res => {\n if(res.result.company) {\n context.commit('deleteCompany', res.result.company);\n }\n });\n },\n getUser({commit}, userId) {\n return api.getUser(userId)\n .then(res => {\n if(res.result.user) {\n commit('addUser', res.result.user);\n }\n });\n }\n },\n getters: {\n countrySelectOptions: state => {\n return state.countries.map(item => {\n return {\n value: item.countryCode,\n text: item.name\n };\n });\n },\n childCompanies: state => {\n\n var children = state.user.info.role === 'site-admin'\n ? state.companies.filter(Boolean) //clear null values\n : state.companies.filter(company => { return company.parent === state.user.company.id });\n\n return children;\n },\n childCompaniesOptions: state => {\n var filteredChildren = state.user.info.role === 'site-admin'\n ? state.companies.filter(Boolean) //clear null values\n : state.companies.filter(company => { return company.parent === state.user.company.id });\n\n return filteredChildren.map (item => {\n return {\n value: item.id,\n text: item.name\n };\n });\n\n }\n }\n});\n\ndataService.setVuexStore(store);\n\nexport default store\n"],"preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvYXJyYXktaW50ZXJzZWN0L2Rpc3QvYXJyYXktaW50ZXJzZWN0LmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy94aHIuanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsLmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvcy5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvY3JlYXRlRXJyb3IuanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2VuaGFuY2VFcnJvci5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9tZXJnZUNvbmZpZy5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMuanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9idWlsZFVSTC5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL25vcm1hbGl6ZUhlYWRlck5hbWUuanMiLCJub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzIiwibm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwcmVhZC5qcyIsIm5vZGVfbW9kdWxlcy9heGlvcy9saWIvdXRpbHMuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtaGVscGVyLXZ1ZS1qc3gtbWVyZ2UtcHJvcHMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL2pzb24vc3RyaW5naWZ5LmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3Qva2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvcHJvbWlzZS5qcyIsIm5vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvc3ltYm9sLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9zeW1ib2wvaXRlcmF0b3IuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiwibm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy90eXBlb2YuanMiLCJub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9yZWdlbmVyYXRvci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9qc29uL3N0cmluZ2lmeS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2tleXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3Byb21pc2UuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sL2l0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FuLWluc3RhbmNlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jbGFzc29mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvcmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2N0eC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVmaW5lZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RvbS1jcmVhdGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0tYnVnLWtleXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0ta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZXhwb3J0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mYWlscy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZm9yLW9mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19nbG9iYWwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hhcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGlkZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faHRtbC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ludm9rZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtYXJyYXkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1jYWxsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWNyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItZGV0ZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLXN0ZXAuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXJhdG9ycy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbGlicmFyeS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbWV0YS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fbWljcm90YXNrLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1kcHMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wbi1leHQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1nb3BuLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ29wcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWdwby5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtcGllLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qtc2FwLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19wZXJmb3JtLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19wcm9taXNlLXJlc29sdmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3JlZGVmaW5lLWFsbC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcmVkZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NldC1zcGVjaWVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zZXQtdG8tc3RyaW5nLXRhZy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2hhcmVkLWtleS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2hhcmVkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zdHJpbmctYXQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3Rhc2suanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pbnRlZ2VyLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1sZW5ndGguanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL191aWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3VzZXItYWdlbnQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy1leHQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3drcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYucHJvbWlzZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5zeW1ib2wuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnByb21pc2UuZmluYWxseS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcucHJvbWlzZS50cnkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcyIsIm5vZGVfbW9kdWxlcy9kZWJvdW5jZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kZWNvZGUtdXJpLWNvbXBvbmVudC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9lczYtb2JqZWN0LWFzc2lnbi9hdXRvLmpzIiwibm9kZV9tb2R1bGVzL2VzNi1vYmplY3QtYXNzaWduL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2VzNi1wcm9taXNlL2F1dG8uanMiLCJub2RlX21vZHVsZXMvZXM2LXByb21pc2UvZGlzdC9lczYtcHJvbWlzZS5qcyIsIm5vZGVfbW9kdWxlcy9pZWVlNzU0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2lzLWJ1ZmZlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2pxdWVyeS9kaXN0L2pxdWVyeS5qcyIsIm5vZGVfbW9kdWxlcy9qcy1jb29raWUvc3JjL2pzLmNvb2tpZS5qcyIsIm5vZGVfbW9kdWxlcy9tYWduaWZpYy1wb3B1cC9kaXN0L2pxdWVyeS5tYWduaWZpYy1wb3B1cC5qcyIsIm5vZGVfbW9kdWxlcy9tZXJnZS9tZXJnZS5qcyIsIm5vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIiwibm9kZV9tb2R1bGVzL211c3RhY2hlL211c3RhY2hlLmpzIiwibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvb2JqZWN0LWZpdC1pbWFnZXMvZGlzdC9vZmkuY29tbW9uLWpzLmpzIiwibm9kZV9tb2R1bGVzL3BvbHlmaWxsLWFycmF5LWluY2x1ZGVzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3BvcnRhbC12dWUvZGlzdC9wb3J0YWwtdnVlLmpzIiwibm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9xdWVyeS1zdHJpbmcvaW5kZXguanMiLCJub2RlX21vZHVsZXMvcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLW1vZHVsZS5qcyIsIm5vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUuanMiLCJub2RlX21vZHVsZXMvc3RyaWN0LXVyaS1lbmNvZGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvdGltZXJzLWJyb3dzZXJpZnkvbWFpbi5qcyIsIm5vZGVfbW9kdWxlcy92dWUtanMtbW9kYWwvZGlzdC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtbm90aWZpY2F0aW9uL2Rpc3QvaW5kZXguanMiLCJub2RlX21vZHVsZXMvdnVlLXBhZ2luYXRpb24tMi9jb21waWxlZC9QYWdpbmF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS1wYWdpbmF0aW9uLTIvY29tcGlsZWQvYnVzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS1wYWdpbmF0aW9uLTIvY29tcGlsZWQvY29uZmlnLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS1wYWdpbmF0aW9uLTIvY29tcGlsZWQvdGVtcGxhdGUuanMiLCJub2RlX21vZHVsZXMvdnVlLXBhZ2luYXRpb24tMi9jb21waWxlZC90aGVtZXMvYm9vdHN0cmFwMy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtcGFnaW5hdGlvbi0yL2NvbXBpbGVkL3RoZW1lcy9ib290c3RyYXA0LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS1wYWdpbmF0aW9uLTIvY29tcGlsZWQvdGhlbWVzL2J1bG1hLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS1wYWdpbmF0aW9uLTIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvdnVlLXJvdXRlci9kaXN0L3Z1ZS1yb3V0ZXIuY29tbW9uLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9idXMuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL2NvbXB1dGVkL2FsbC1jb2x1bW5zLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9jb21wdXRlZC9jb2xzcGFuLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9jb21wdXRlZC9jdXN0b20tcS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvY29tcHV0ZWQvZGF0ZXBpY2tlci1jb2x1bW5zLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9jb21wdXRlZC9maWx0ZXJhYmxlLWNvbHVtbnMuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL2NvbXB1dGVkL2ZpbHRlcmVkLWRhdGEuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL2NvbXB1dGVkL2ZpbHRlcmVkLXF1ZXJ5LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9jb21wdXRlZC9oYXMtY2hpbGQtcm93LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9jb21wdXRlZC9oYXMtZ2VuZXJpYy1maWx0ZXIuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL2NvbXB1dGVkL2xpc3QtY29sdW1ucy1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL2NvbXB1dGVkL29wdHMuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL2NvbXB1dGVkL3EuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL2NvbXB1dGVkL3N0b3JhZ2UuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL2NvbXB1dGVkL3RhYmxlLWRhdGEuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL2NvbXB1dGVkL3RlbXBsYXRlcy1rZXlzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9jb21wdXRlZC90b3RhbC1wYWdlcy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvY29uZmlnL2RlZmF1bHRzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9maWx0ZXJzL2N1c3RvbS1maWx0ZXJzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9maWx0ZXJzL2Zvcm1hdC1kYXRlLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9maWx0ZXJzL2hpZ2hsaWdodC1tYXRjaGVzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9maWx0ZXJzL29wdGlvbi10ZXh0LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9oZWxwZXJzL2lzLWVtcHR5LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9oZWxwZXJzL2lzLXZhbGlkLW1vbWVudC1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL2hlbHBlcnMvb2JqZWN0LWZpbGxlZC1rZXlzLWNvdW50LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9oZWxwZXJzL3Jlc2l6ZWFibGUtY29sdW1ucy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvaGVscGVycy91Y2ZpcnN0LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9hcHBseS1maWx0ZXJzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2NlbGwtY2xhc3Nlcy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9jaGlsZC1yb3ctdG9nZ2xlci1jbGFzcy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9jbGllbnQtc2VhcmNoLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2NvbHVtbi1jbGFzcy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9jdXJyZW50bHktc29ydGVkLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2RhdGUtZm9ybWF0LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2RlZmF1bHQtc29ydC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9kaXNwYXRjaC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9kaXNwbGF5LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2ZpbHRlcmFibGUuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvZ2V0LWNoaWxkLXJvdy10ZW1wbGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9nZXQtY29sdW1uLW5hbWUuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvZ2V0LWRhdGEuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvZ2V0LWdyb3VwLXNsb3QuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvZ2V0LWhlYWRpbmctdG9vbHRpcC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9nZXQtaGVhZGluZy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9nZXQtaW5pdGlhbC1kYXRlLXJhbmdlLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2dldC1uYW1lLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2dldC1vcGVuLWNoaWxkLXJvd3MuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvZ2V0LXJlc3BvbnNlLWRhdGEuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvZ2V0LXNvcnQtZm4uanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvZ2V0LXZhbHVlLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2hhcy1kYXRlLWZpbHRlcnMuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvaW5pdC1jdXN0b20tZmlsdGVycy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9pbml0LWRhdGUtZmlsdGVycy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9pbml0LW9wdGlvbnMuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvaW5pdC1vcmRlci1ieS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9pbml0LXBhZ2luYXRpb24uanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvaW5pdC1xdWVyeS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9pbml0LXN0YXRlLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2luaXRpYWwtb3JkZXItYXNjZW5kaW5nLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2lzLWRhdGUtZmlsdGVyLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2lzLWxpc3QtZmlsdGVyLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL2lzLXRleHQtZmlsdGVyLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL29uLXBhZ2luYXRpb24uanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvb25seS1jb2x1bW4uanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvb3JkZXItYnktY29sdW1uLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL3JlZnJlc2guanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvcmVnaXN0ZXItY2xpZW50LWZpbHRlcnMuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvcmVnaXN0ZXItc2VydmVyLWZpbHRlcnMuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvcmVuZGVyLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL3Jlc2V0LXF1ZXJ5LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL3Jvdy13YXMtY2xpY2tlZC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9zZW5kLXJlcXVlc3QuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvc2VydmVyLXNlYXJjaC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9zZXQtY29sdW1ucy1kcm9wZG93bi1jbG9zZS1saXN0ZW5lci5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9zZXQtZGF0YS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9zZXQtZGF0ZXBpY2tlci10ZXh0LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL3NldC1maWx0ZXIuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvc2V0LWZpbHRlcnMtZG9tLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL3NldC1saW1pdC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9zZXQtb3JkZXIuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvc2V0LXBhZ2UuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvc2V0LXVzZXItbXVsdGktc29ydC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9zaG91bGQtc2hvdy1jb2x1bW4tb24taW5pdC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy9zb3J0YWJsZS1jaGV2cm9uLWNsYXNzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL3NvcnRhYmxlLWNsYXNzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL3NvcnRhYmxlLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL3RvZ2dsZS1jaGlsZC1yb3cuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21ldGhvZHMvdG9nZ2xlLWNvbHVtbi5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy90b2dnbGUtY29sdW1ucy1kcm9wZG93bi5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWV0aG9kcy90b2dnbGUtZ3JvdXAtZGlyZWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL3RyYW5zZm9ybS1kYXRlLXN0cmluZ3MtdG8tbW9tZW50LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tZXRob2RzL3VwZGF0ZS1zdGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWl4aW5zL2JlZm9yZS1kZXN0cm95LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9taXhpbnMvY29tcHV0ZWQuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21peGlucy9jcmVhdGVkLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9taXhpbnMvZGF0YS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbWl4aW5zL21ldGhvZHMuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21vZHVsZXMvY29sdW1uLWZpbHRlcnMuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21vZHVsZXMvY29sdW1ucy1kcm9wZG93bi5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbW9kdWxlcy9kYXRlLWZpbHRlci5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbW9kdWxlcy9kcm9wZG93bi1pdGVtLXdyYXBwZXIuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21vZHVsZXMvZHJvcGRvd24tcGFnaW5hdGlvbi1jb3VudC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbW9kdWxlcy9kcm9wZG93bi1wYWdpbmF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tb2R1bGVzL2Ryb3Bkb3duLXdyYXBwZXIuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21vZHVsZXMvaGVhZGluZ3MuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21vZHVsZXMvbGlzdC1maWx0ZXIuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL21vZHVsZXMvbm9ybWFsLWZpbHRlci5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbW9kdWxlcy9wYWdpbmF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tb2R1bGVzL3Blci1wYWdlLXZhbHVlcy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbW9kdWxlcy9wZXItcGFnZS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbW9kdWxlcy9yb3dzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9tb2R1bGVzL3NvcnQtY29udHJvbC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvbW9kdWxlcy90ZXh0LWZpbHRlci5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvc2xvdHMuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL3N0YXRlL2RhdGEuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL3N0YXRlL211dGF0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvc3RhdGUvbm9ybWFsLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9zdGF0ZS9yZWdpc3Rlci1tb2R1bGUuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL3N0YXRlL3N0YXRlLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC9zdGF0ZS92dWV4LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC90YWJsZS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvdGVtcGxhdGUtY29tcGlsZXIuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL3RlbXBsYXRlcy9kZWZhdWx0LmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC90ZW1wbGF0ZXMvZm9vdGVyLXBhZ2luYXRpb24uanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL2NvbXBpbGVkL3RoZW1lcy9ib290c3RyYXAzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC90aGVtZXMvYm9vdHN0cmFwNC5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvdGhlbWVzL2J1bG1hLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS10YWJsZXMtMi9jb21waWxlZC92LWNsaWVudC10YWJsZS5qcyIsIm5vZGVfbW9kdWxlcy92dWUtdGFibGVzLTIvY29tcGlsZWQvdi1zZXJ2ZXItdGFibGUuanMiLCJub2RlX21vZHVsZXMvdnVlLXRhYmxlcy0yL25vZGVfbW9kdWxlcy9jbG9uZS9jbG9uZS5qcyIsIm5vZGVfbW9kdWxlcy92dWUvZGlzdC92dWUuY29tbW9uLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZS9kaXN0L3Z1ZS5jb21tb24ucHJvZC5qcyIsIm5vZGVfbW9kdWxlcy92dWUvZGlzdC92dWUucnVudGltZS5jb21tb24uanMiLCJub2RlX21vZHVsZXMvdnVlL2Rpc3QvdnVlLnJ1bnRpbWUuY29tbW9uLnByb2QuanMiLCJub2RlX21vZHVsZXMvdnVlaWZ5L2xpYi9pbnNlcnQtY3NzLmpzIiwibm9kZV9tb2R1bGVzL3Z1ZWpzLWRhdGVwaWNrZXIvZGlzdC9idWlsZC5qcyIsIm5vZGVfbW9kdWxlcy92dWV4L2Rpc3QvdnVleC5jb21tb24uanMiLCJzcmMvanMvbWFzdGVyLmpzIiwic3JjL2pzL21vZHVsZXMvYW5hbHl0aWNzLWFjdGlvbnMuanMiLCJzcmMvanMvbW9kdWxlcy9icmFuY2gtYmFyLmpzIiwic3JjL2pzL21vZHVsZXMvY29sbGVjdGlvbi1tYWtlci5qcyIsInNyYy9qcy9tb2R1bGVzL2N1c3RvbS1vcmRlcmVyLWluZm8uanMiLCJzcmMvanMvbW9kdWxlcy9jdXN0b20tc2VsZWN0LmpzIiwic3JjL2pzL21vZHVsZXMvZmlsdGVyLW1hY2hpbmUtYWNjZXNzb3JpZXMuanMiLCJzcmMvanMvbW9kdWxlcy9maWx0ZXItbmV3cy5qcyIsInNyYy9qcy9tb2R1bGVzL2ltYWdlLXBvcHVwLmpzIiwic3JjL2pzL21vZHVsZXMvbWFjaGluZS1zZWFyY2guanMiLCJzcmMvanMvbW9kdWxlcy9uYXZpZ2F0aW9uLmpzIiwic3JjL2pzL21vZHVsZXMvc2VsZWN0LW1hdGVyaWFsLWxhbmd1YWdlLmpzIiwic3JjL2pzL21vZHVsZXMvc2VydmljZXMvYXBpLmpzIiwic3JjL2pzL21vZHVsZXMvc2VydmljZXMvZGF0YS1zZXJ2aWNlLmpzIiwic3JjL2pzL21vZHVsZXMvc2VydmljZXMvdXNlci1yaWdodHMuanMiLCJzcmMvanMvbW9kdWxlcy9zaG93LW1vcmUtZmlsZS1pbnB1dHMuanMiLCJzcmMvanMvbW9kdWxlcy92aWRlby1wb3B1cC5qcyIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9hcHBzL2FwcC52dWUiLCJzcmMvanMvbW9kdWxlcy92dWUvYXBwcy9jb21tb24tc2V0dGluZ3MuanMiLCJzcmMvanMvbW9kdWxlcy92dWUvYXBwcy9jb21wbGFpbnRzLWFwcC9pbmRleC5qcyIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9hcHBzL2NvbXBsYWludHMtYXBwL3JvdXRlci9pbmRleC5qcyIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9hcHBzL2N1c3RvbWVyLW1hY2hpbmVzLWFwcC9yb3V0ZXIvaW5kZXguanMiLCJzcmMvanMvbW9kdWxlcy92dWUvYXBwcy9jdXN0b21lcnMtYXBwL2luZGV4LmpzIiwic3JjL2pzL21vZHVsZXMvdnVlL2FwcHMvY3VzdG9tZXJzLWFwcC9yb3V0ZXIvaW5kZXguanMiLCJzcmMvanMvbW9kdWxlcy92dWUvYXBwcy9jdXN0b21lcnMtYXBwL3ZpZXctaG9tZS52dWUiLCJzcmMvanMvbW9kdWxlcy92dWUvYXBwcy9mb3Jnb3R0ZW4tcGFzc3dvcmQtYXBwL2luZGV4LmpzIiwic3JjL2pzL21vZHVsZXMvdnVlL2FwcHMvZm9yZ290dGVuLXBhc3N3b3JkLWFwcC9yb3V0ZXIvaW5kZXguanMiLCJzcmMvanMvbW9kdWxlcy92dWUvYXBwcy9vd24tY29tcGFueS1hcHAvcm91dGVyL2luZGV4LmpzIiwic3JjL2pzL21vZHVsZXMvdnVlL2FwcHMvdXBkYXRlLXBhc3N3b3JkLWFwcC9pbmRleC5qcyIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9hcHBzL3VwZGF0ZS1wYXNzd29yZC1hcHAvcm91dGVyL2luZGV4LmpzIiwic3JjL2pzL21vZHVsZXMvdnVlL2FwcHMvdXNlci1zZXR0aW5ncy1hcHAvcm91dGVyL2luZGV4LmpzIiwic3JjL2pzL21vZHVsZXMvdnVlL2FwcHMvd2FycmFudHktcmVnaXN0cmF0aW9ucy1hcHAvcm91dGVyL2luZGV4LmpzIiwic3JjL2pzL21vZHVsZXMvdnVlL2NvbXBvbmVudHMvbW9kYWwtY29tcGFueS52dWUiLCJzcmMvanMvbW9kdWxlcy92dWUvY29tcG9uZW50cy9tb2RhbC1jb21wbGFpbnQudnVlIiwic3JjL2pzL21vZHVsZXMvdnVlL2NvbXBvbmVudHMvbW9kYWwtdXNlci52dWUiLCJzcmMvanMvbW9kdWxlcy92dWUvY29tcG9uZW50cy9tb2RhbC13YXJyYW50eS1yZWdpc3RyYXRpb24udnVlIiwic3JjL2pzL21vZHVsZXMvdnVlL2NvbXBvbmVudHMvdGhlLTEtY29sdW1uLWxheW91dC5qcyIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9jb21wb25lbnRzL3RoZS1zaWRlYmFyLWxheW91dC5qcyIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9jb21wb25lbnRzL3RoZS1zdWJoZWFkZXIuanMiLCJzcmMvanMvbW9kdWxlcy92dWUvY29tcG9uZW50cy92LWNvbXBsYWludC11c2VyLWluZm8udnVlIiwic3JjL2pzL21vZHVsZXMvdnVlL2NvbXBvbmVudHMvdi1jdXJyZW5jeS1pbnB1dC52dWUiLCJzcmMvanMvbW9kdWxlcy92dWUvY29tcG9uZW50cy92LWRhdGEtaXRlbXMudnVlIiwic3JjL2pzL21vZHVsZXMvdnVlL2NvbXBvbmVudHMvdi1maWxlLnZ1ZSIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9jb21wb25lbnRzL3YtZm9ybS1maWVsZC52dWUiLCJzcmMvanMvbW9kdWxlcy92dWUvY29tcG9uZW50cy92LWZvcm0udnVlIiwic3JjL2pzL21vZHVsZXMvdnVlL2NvbXBvbmVudHMvdi1tb2RhbC1jb250ZW50LnZ1ZSIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9jb21wb25lbnRzL3YtbnVtYmVyLWlucHV0LnZ1ZSIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9jb21wb25lbnRzL3YtcGFzcy1zdHJlbmd0aC52dWUiLCJzcmMvanMvbW9kdWxlcy92dWUvY29tcG9uZW50cy92aWV3LWNoYW5nZS1wYXNzd29yZC52dWUiLCJzcmMvanMvbW9kdWxlcy92dWUvY29tcG9uZW50cy92aWV3LWNvbXBhbmllcy52dWUiLCJzcmMvanMvbW9kdWxlcy92dWUvY29tcG9uZW50cy92aWV3LWNvbXBhbnkudnVlIiwic3JjL2pzL21vZHVsZXMvdnVlL2NvbXBvbmVudHMvdmlldy1jb21wbGFpbnQudnVlIiwic3JjL2pzL21vZHVsZXMvdnVlL2NvbXBvbmVudHMvdmlldy1jb21wbGFpbnRzLnZ1ZSIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9jb21wb25lbnRzL3ZpZXctY3VzdG9tZXItbWFjaGluZS52dWUiLCJzcmMvanMvbW9kdWxlcy92dWUvY29tcG9uZW50cy92aWV3LWN1c3RvbWVyLW1hY2hpbmVzLnZ1ZSIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9jb21wb25lbnRzL3ZpZXctZWRpdC1hY2NvdW50LnZ1ZSIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9jb21wb25lbnRzL3ZpZXctZm9yZ290dGVuLXBhc3N3b3JkLnZ1ZSIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9jb21wb25lbnRzL3ZpZXctdXBkYXRlLXBhc3N3b3JkLnZ1ZSIsInNyYy9qcy9tb2R1bGVzL3Z1ZS9jb21wb25lbnRzL3ZpZXctdXNlci1zZXR0aW5ncy52dWUiLCJzcmMvanMvbW9kdWxlcy92dWUvY29tcG9uZW50cy92aWV3LXdhcnJhbnR5LXJlZ2lzdHJhdGlvbi52dWUiLCJzcmMvanMvbW9kdWxlcy92dWUvY29tcG9uZW50cy92aWV3LXdhcnJhbnR5LXJlZ2lzdHJhdGlvbnMudnVlIiwic3JjL2pzL21vZHVsZXMvdnVlL3N0b3JlL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0NDQUMsU0FBVSxFQUFRLEdBQ0MsZ0JBQVosVUFBMEMsbUJBQVgsUUFBeUIsT0FBTyxRQUFVLElBQzlELGtCQUFYLFNBQXlCLE9BQU8sSUFBTSxPQUFPLEdBQ25ELEVBQU8sZUFBaUIsS0FDeEIsS0FBTSxXQUFlLFlBY3ZCLE9BWmdCLFVBQW1C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LEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLElBQUksT0FBTyxlQUFlLEVBQUUsR0FBRyxZQUFXLEVBQUcsSUFBSSxLQUFLLEVBQUUsRUFBRSxTQUFTLEdBQUcsbUJBQW9CLFNBQVEsT0FBTyxhQUFhLE9BQU8sZUFBZSxFQUFFLE9BQU8sYUFBYSxNQUFNLFdBQVcsT0FBTyxlQUFlLEVBQUUsY0FBYyxPQUFNLEtBQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFPLEVBQUUsSUFBRyxFQUFFLEdBQUcsZ0JBQWlCLElBQUcsR0FBRyxFQUFFLFdBQVcsTUFBTyxFQUFFLElBQUksR0FBRSxPQUFPLE9BQU8sS0FBTSxJQUFHLEVBQUUsRUFBRSxHQUFHLE9BQU8sZUFBZSxFQUFFLFdBQVcsWUFBVyxFQUFHLE1BQU0sSUFBSSxFQUFFLEdBQUcsZ0JBQWlCLEdBQUUsSUFBSSxHQUFJLEtBQUssR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsR0FBRyxNQUFPLEdBQUUsSUFBSSxLQUFLLEtBQUssR0FBSSxPQUFPLElBQUcsRUFBRSxFQUFFLFNBQVMsR0FBRyxHQUFJLEdBQUUsR0FBRyxFQUFFLFdBQVcsV0FBVyxNQUFPLEdBQUUsU0FBUyxXQUFXLE1BQU8sR0FBRyxPQUFPLEdBQUUsRUFBRSxFQUFFLElBQUksR0FBRyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFPLFFBQU8sVUFBVSxlQUFlLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLE1BQU0sU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFHLGlCQUFpQixLQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUSxFQUFHLEVBQUUsR0FBRyxTQUFTLFdBQVcsR0FBRSxPQUFRLFNBQVMsRUFBRSxF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QUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUksSUFBRyxFQUFFLENBQUMsRUFBRSxNQUFPLEtBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sT0FBTyxJQUFJLEVBQUUsTUFBTSxHQUFHLEVBQUUsTUFBTSxHQUFJLE1BQUssRUFBRSxFQUFFLE1BQU0sT0FBTyxJQUFJLEVBQUUsTUFBTSxLQUFLLEVBQUUsRUFBRSxNQUFNLElBQUssR0FBRSxNQUFNLE9BQU8sRUFBRSxNQUFNLFNBQVMsRUFBRSxNQUFNLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQyxHQUFJLEtBQUssS0FBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sT0FBTyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxJQUFLLEdBQUUsRUFBRSxLQUFLLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxNQUFNLEtBQUssUUFBUyxLQUFJLEdBQUksR0FBRSxTQUFTLGNBQWMsUUFBUyxPQUFPLEdBQUUsS0FBSyxXQUFXLEVBQUUsWUFBWSxHQUFHLEVBQUUsUUFBUyxHQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxTQUFTLGNBQWMsU0FBUyxFQUFFLE1BQU0sRUFBRSxHQUFHLEtBQU0sSUFBRyxFQUFFLENBQUMsR0FBRyxFQUFFLE1BQU8sRUFBRSxHQUFFLFdBQVcsWUFBWSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUksR0FBRSxHQUFJLEdBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssS0FBSyxFQUFFLEdBQUUsR0FBSSxFQUFFLEVBQUUsS0FBSyxLQUFLLEVBQUUsR0FBRSxPQUFTLEdBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFNBQTJPLElBQWpPLEdBQUcsRUFBRSxhQUFhLFFBQVEsR0FBRyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUs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LE9BQU8sWUFBWSxHQUFHLEtBQUssTUFBTSxNQUFNLEVBQUUsT0FBTyxHQUFHLEVBQUUsTUFBTSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sT0FBTyxFQUFFLEtBQUssS0FBSyxNQUFNLFVBQVUsUUFBUSxFQUFFLEtBQUssS0FBSyxVQUFXLEdBQUUsRUFBOHNCLElBQUksR0FBRSxFQUFFLEVBQUUsTUFBSyxFQUFHLEtBQUssS0FBSyxLQUFNLEdBQUUsUUFBUSxPQUFPLGlCQUFrQixJQUFJLEdBQUUsRUFBRSxRQUFpUCxFQUFFLHNCQUFzQixJQUFJLEtBQUssS0FBSyxPQUFPLEdBQUksUUFBTyxJQUFJLE9BQU8sRUFBRSxVQUFVLEtBQUssSUFBSSxPQUFPLEdBQUksUUFBTyxJQUFJLE9BQU8sRUFBRSxTQUFTLEtBQUssS0FBSyxPQUFPLEdBQUksUUFBTyxJQUFJLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxHQUFHLE9BQU8sRUFBRSxJQUFJLElBQUksU0FBUyxPQUFPLEtBQUssS0FBSyxNQUFNLEVBQUcsS0FBSSxTQUFTLE1BQU8sVUFBUyxHQUFHLEdBQUcsU0FBUyxFQUFFLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRyxLQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLElBQUcsRUFBRSxPQUFPLEtBQUssR0FBRyxPQUFPLEtBQUssRUFBRSxLQUFLLE1BQU0sV0FBVyxJQUFJLE9BQU8sS0FBSyxHQUFHLE1BQU0sSUFBSSxFQUFHLFNBQVEsT0FBTyxLQUFLLEdBQUcsTUFBTSxLQUFLLEVBQUUsU0FBUyxHQUFHLEdBQUcsZ0JBQWlCLEdBQUUsTUFBTyxJQUFHLENBQUUsSUFBSSxHQUFFLEVBQUUsRUFBRyxRQUFPLE1BQU0sRUFBRSxNQUFNLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFXLEdBQUcsS0FBSyxhQUFhLE9BQU8sTUFBTSxVQUFTLEVBQUcsS0FBSyxRQUFRLE9BQU8sS0FBSyxPQUFPLFFBQVEsR0FBRyxXQUFXLEtBQUssUUFBUSxTQUFRLEdBQUksVUFBVSxLQUFLLFFBQVEsU0FBUSxHQUFJLFdBQVcsTUFBTSxRQUFRLFFBQVEsU0FBUSxHQUFJLFlBQVksS0FBSyxRQUFRLFNBQVEsR0FBSSxPQUFPLEtBQUssUUFBUSxTQUFRLEdBQUksbUJBQW1CLEtBQUssT0FBTyxRQUFRLGdCQUFnQixZQUFZLEtBQUssUUFBUSxjQUFjLEtBQUssUUFBUSxTQUFRLEdBQUksU0FBUyxNQUFNLE9BQU8sT0FBTyxRQUFRLFlBQVksVUFBVSxLQUFLLE9BQU8sUUFBUSxFQUFFLFVBQVUsU0FBUyxHQUFHLE1BQU8sSUFBRyxJQUFJLFdBQVcsS0FBSyxPQUFPLFFBQVEsRUFBRSxVQUFVLFNBQVMsR0FBRyxNQUFPLElBQUcsSUFBSSxVQUFVLEtBQUssT0FBTyxRQUFRLEVBQUEsR0FBSyxXQUFXLEtBQUssT0FBTyxRQUFRLEVBQUEsR0FBSyxPQUFPLE1BQU0sT0FBTyxRQUFRLFFBQVEsSUFBSSxVQUFVLEdBQUcsUUFBUSxNQUFNLE9BQU8sUUFBUSxRQUFRLElBQUksVUFBVSxTQUFTLEdBQUcsTUFBTSxTQUFTLEdBQUcsRUFBRSxLQUFLLFFBQVEsS0FBSyxPQUFPLFFBQVEsR0FBRyxVQUFVLFNBQVMsR0FBRyxNQUFPLElBQUcsR0FBRyxHQUFHLElBQUksUUFBUSxLQUFLLE9BQU8sUUFBUSxHQUFHLFVBQVUsU0FBUyxHQUFHLE1BQU8sSUFBRyxHQUFHLEdBQUcsS0FBSyxZQUFZLFFBQVEsR0FBRyxLQUFLLFdBQVcsT0FBTyxTQUFRLEVBQUcsWUFBWSxPQUFNLEVBQUcsU0FBUSxHQUFJLE9BQU8sS0FBSyxFQUFFLElBQUksR0FBRyxPQUFPLE1BQU0sRUFBRSxVQUFVLEtBQUssT0FBTyxFQUFFLFdBQVcsS0FBSyxlQUFlLEdBQUcsUUFBUSxNQUFNLEVBQUUsT0FBTyxHQUFHLGlCQUFpQixPQUFPLFFBQVEsV0FBVyxLQUFLLGtCQUFrQixZQUFZLFdBQVcsR0FBSSxHQUFFLElBQUssSUFBRyxFQUFFLE1BQU0sSUFBSSxTQUFTLEtBQUssbUJBQW1CLE9BQU8saUJBQWlCLFNBQVMsS0FBSyxvQkFBb0IsS0FBSyxxQkFBcUIsS0FBSyxhQUFhLEtBQUssY0FBYyxRQUFRLEtBQUssVUFBVSxPQUFPLEtBQUssS0FBSyxzQ0FBc0MsNkJBQTZCLE9BQU8sS0FBSyxPQUFPLE1BQU0sS0FBSyxhQUFhLENBQUMsR0FBSSxHQUFFLFdBQVcsR0FBRyxtQkFBb0IsUUFBTyxJQUFJLEdBQUksSUFBRyxHQUFHLFNBQVMsTUFBTSxJQUFJLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxHQUFHLGtCQUFtQixJQUFHLElBQUssUUFBTyxNQUFPLFFBQU8sR0FBRyxPQUFNLElBQU0sS0FBSSxLQUFLLGlCQUFpQixHQUFJLEdBQUUsU0FBUyxHQUFHLEVBQUUsMEJBQTBCLEtBQUssY0FBYyxPQUFPLGlCQUFpQixRQUFRLEtBQUssb0JBQW9CLGNBQWMsV0FBVyxFQUFFLE1BQU0sS0FBSyxTQUFTLEtBQUssbUJBQW1CLE9BQU8sb0JBQW9CLFNBQVMsS0FBSyxvQkFBb0IsS0FBSyxjQUFjLE9BQU8sb0JBQW9CLFFBQVEsS0FBSyxtQkFBbUIsS0FBSyxZQUFZLFNBQVMsS0FBSyxVQUFVLE9BQU8sMEJBQTBCLFVBQVUsYUFBYSxXQUFXLE1BQU0sU0FBUyxLQUFLLE1BQU0sWUFBWSxTQUFTLFdBQVcsR0FBSSxHQUFFLEtBQUssT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssT0FBTyxFQUFFLEtBQUssT0FBTyxFQUFFLEtBQUssZUFBZSxFQUFFLEtBQUssZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFFLFFBQU8sS0FBSyxTQUFTLEVBQUUsRUFBRSxFQUFFLElBQUksSUFBSSxTQUFTLEVBQUUsRUFBRSxFQUFFLE1BQU0sZUFBZSxXQUFXLEdBQUksR0FBRSxLQUFLLE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBRSxLQUFLLFNBQVMsRUFBRSxLQUFLLFNBQVMsRUFBRSxLQUFLLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxJQUFJLEVBQUUsTUFBTSxFQUFHLE9BQU8sR0FBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsZ0JBQWdCLFdBQVcsR0FBSSxHQUFFLEtBQUssT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssYUFBYSxFQUFFLEtBQUssU0FBUyxFQUFFLEtBQUssVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU8sSUFBRyxFQUFFLE1BQU8sTUFBSyxNQUFNLGNBQWUsSUFBSSxHQUFFLEtBQUssSUFBSSxFQUFFLE9BQU8sRUFBRyxPQUFPLEdBQUUsRUFBRSxLQUFLLFVBQVUsRUFBRSxHQUFHLEdBQUcsYUFBYSxXQUFXLE9BQU8sb0JBQW1CLEVBQUcsV0FBVyxLQUFLLFlBQVksS0FBSyxlQUFlLFdBQVcsV0FBVyxPQUFPLGVBQWUsS0FBSyxVQUFVLFdBQVcsV0FBVyxPQUFPLElBQUksS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLEtBQUssU0FBUyxLQUFLLEtBQUssTUFBTSxLQUFLLGVBQWUsS0FBSyxPQUFPLEtBQUssYUFBYSxPQUFPLEtBQUssZ0JBQWdCLFFBQVEsT0FBTyxRQUFRLFNBQVMsR0FBRyxHQUFJLEdBQUUsSUFBSyxJQUFHLEtBQUssV0FBVyxTQUFRLEVBQUcsV0FBVyxXQUFXLEVBQUUsV0FBVyxPQUFNLEVBQUcsRUFBRSxVQUFVLFdBQVcsRUFBRSx3QkFBd0IsRUFBRSxnQkFBZSxNQUFPLEtBQUssU0FBUyxLQUFLLFdBQVcsT0FBTSxFQUFHLFdBQVcsV0FBVyxFQUFFLFdBQVcsU0FBUSxFQUFHLEVBQUUsVUFBVSxXQUFXLEVBQUUsMkJBQTJCLEVBQUUsZ0JBQWUsTUFBTyxLQUFLLFVBQVUsU0FBUyxrQkFBa0IsU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFHLEtBQUss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QUcsSUFBRyxrQkFBbUIsR0FBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEdBQUcsT0FBTyxJQUFJLEtBQUssT0FBTyxLQUFLLFdBQVcsUUFBUSxTQUFTLEdBQUcsR0FBRyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssUUFBUSxPQUFPLENBQUMsR0FBSSxHQUFFLElBQUksS0FBSyxRQUFRLE9BQU8sRUFBRSxLQUFLLFFBQVEsVUFBVSxTQUFTLEdBQUcsTUFBTyxHQUFFLFdBQVcsSUFBSSxHQUFHLEtBQUssTUFBTSxFQUFFLEVBQUUsZ0JBQWdCLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxNQUFLLEVBQUcsS0FBSyxLQUFLLE1BQU8sR0FBRSxRQUFRLE9BQU8sZ0JBQWlCLElBQUksR0FBRSxFQUFFLFFBQVEsRUFBRSxXQUFXLEdBQUksR0FBRSxLQUFLLEVBQUUsRUFBRSxlQUFlLEVBQUUsRUFBRSxNQUFNLElBQUksQ0FBRSxPQUFPLEdBQUUsT0FBTyxPQUFPLEdBQUcscUJBQXFCLEVBQUUsR0FBRyxFQUFFLE9BQU8sU0FBUyxHQUFHLE1BQU8sR0FBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxPQUFPLFNBQVMsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLFFBQVEsRUFBRSxZQUFXLEdBQUksRUFBRSxpQkFBaUIsRUFBRSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLFlBQVksSUFBSSxNQUFNLFNBQVMsR0FBRyxFQUFFLE9BQU8sS0FBSyxFQUFFLFdBQVcsU0FBUyxZQUFZLEVBQUUsZ0JBQWUsR0FBSSxFQUFFLGNBQWMsTUFBTyxHQUFFLGVBQWMsQ0FBRyxJQUFJLEdBQUUsR0FBRyxLQUFLLFdBQVcsT0FBTyxZQUFZLFFBQVEsV0FBVyxLQUFLLE1BQU0sa0JBQWtCLE1BQU0sU0FBUyxJQUFJLFNBQVMsR0FBRyxHQUFJLEdBQUUsS0FBSyxFQUFFLEVBQUUsVUFBVSxZQUFRLEtBQVMsVUFBVSxHQUFHLFVBQVUsTUFBTSxFQUFFLEVBQUUsVUFBVSxZQUFR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RUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksRUFBRSxFQUFFLEtBQUksQ0FBRyxPQUFPLEdBQUUsU0FBUyxHQUFHLE1BQU8sR0FBRSxFQUFFLGdCQUFnQixTQUFTLEdBQUcsTUFBTyxHQUFFLElBQW1FLFFBQVMsR0FBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFJLEdBQUUsRUFBRSxRQUFRLEVBQUcsSUFBRyxHQUFHLEVBQUUsTUFBTyxHQUFFLE9BQU8sRUFBRSxJQUEwQyxRQUFTLEdBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxLQUFLLEVBQUUsR0FBRyxRQUFTLEdBQUUsR0FBRyxHQUFJLEdBQUUsT0FBTyxPQUFPLEtBQU0sT0FBTyxVQUFTLEdBQUcsTUFBTyxHQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBa2IsUUFBUyxHQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBRSxLQUFJLEdBQUksR0FBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUksT0FBTSxHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFHLE9BQU8sR0FBRSxRQUFTLEdBQUUsRUFBRSxHQUFHLElBQUksR0FBSSxLQUFLLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRyxPQUFPLEdBQUUsUUFBUyxHQUFFLEdBQUcsSUFBSSxHQUFJLE1BQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUksT0FBTyxHQUFFLFFBQVMsR0FBRSxFQUFFLEVBQUUsSUFBNEQsUUFBUyxHQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksRUFBRSxPQUFNLENBQUcsSUFBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRyxLQUFJLElBQUksRUFBRSxPQUFPLElBQUksR0FBRyxPQUFPLEtBQUssT0FBTyxFQUFHLEtBQUksR0FBSSxHQUFFLE1BQU0sUUFBUSxHQUFHLEVBQUUsTUFBTSxRQUFRLEVBQUcsSUFBRyxHQUFHLEVBQUUsTUFBTyxHQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLEVBQUUsR0FBRyxNQUFPLEdBQUUsRUFBRSxFQUFFLEtBQU0sSUFBRyxZQUFhLE9BQU0sWUFBYSxNQUFLLE1BQU8sR0FBRSxZQUFZLEVBQUUsU0FBVSxJQUFHLEdBQUcsRUFBRSxPQUFNLENBQUcsSUFBSSxHQUFFLE9BQU8sS0FBSyxHQUFHLEVBQUUsT0FBTyxLQUFLLEVBQUcsT0FBTyxHQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLEdBQUcsTUFBTyxHQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxHQUFHLE9BQU0sR0FBSSxRQUFTLEdBQUUsRUFBRSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsTUFBTyxFQUFFLFFBQU8sRUFBRSxRQUFTLEdBQUUsR0FBRyxHQUFJLElBQUUsQ0FBRyxPQUFPLFlBQVcsSUFBSSxHQUFFLEVBQUcsRUFBRSxNQUFNLEtBQUssYUFBaXRCLFFBQVMsR0FBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sZUFBZSxFQUFFLEdBQUcsTUFBTSxFQUFFLGFBQWEsRUFBRSxVQUFTLEVBQUcsY0FBYSxJQUFpekIsUUFBUyxJQUFHLEdBQUcsTUFBTSxrQkFBbUIsSUFBRyxjQUFjLEtBQUssRUFBRSxZQUE0c0IsUUFBUyxJQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsR0FBRyxPQUFPLEVBQUUsUUFBUyxNQUFLLEdBQUcsTUFBTSxHQUFHLE9BQU8sR0FBRyxHQUFHLE9BQU8sR0FBeXBCLFFBQVMsSUFBRyxHQUFHLE1BQU8sSUFBSSxRQUFHLE9BQU8sT0FBTyxHQUFPLE9BQU8sSUFBSSxRQUFTLElBQUcsR0FBRyxHQUFJLEdBQUUsR0FBSSxJQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsU0FBUyxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsYUFBYyxPQUFPLEdBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVMsRUFBRyxFQUE0WixRQUFTLElBQUcsR0FBRyxHQUFHLEVBQXlQLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxFQUFFLElBQUcsRUFBRSxNQUFNLFlBQWEsS0FBSSxNQUFPLEdBQUUsRUFBRSxXQUFXLEVBQUUsaUJBQWtCLElBQUcsRUFBRSxFQUFFLE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxJQUFJLEVBQUUsS0FBSyxPQUFPLGFBQWEsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFJLElBQUcsSUFBSSxHQUFHLEdBQUcsRUFBRSxVQUFVLEVBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsR0FBSSxJQUFHLEVBQUUsT0FBTyx5QkFBeUIsRUFBRSxFQUFHLEtBQUksSUFBRyxJQUFLLEVBQUUsYUFBYSxDQUFDLEdBQUksR0FBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFJLEtBQUksR0FBRyxJQUFJLFVBQVUsU0FBUyxFQUFFLEVBQUUsR0FBSSxJQUFJLElBQUcsR0FBRyxHQUFHLEVBQUcsUUFBTyxlQUFlLEVBQUUsR0FBRyxZQUFXLEVBQUcsY0FBYSxFQUFHLElBQUksV0FBVyxHQUFJLEdBQUUsRUFBRSxFQUFFLEtBQUssR0FBRyxDQUFFLE9BQU8sSUFBRyxTQUFTLEVBQUUsU0FBUyxJQUFJLEVBQUUsSUFBSSxTQUFTLE1BQU0sUUFBUSxJQUFJLFFBQVMsR0FBRSxHQUFHLElBQUksR0FBSSxPQUFFLEdBQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sSUFBSSxTQUFTLE1BQU0sUUFBUSxJQUFJLEVBQUUsSUFBSSxLQUFLLEdBQUcsSUFBSSxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxLQUFLLEdBQUcsQ0FBRSxLQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsY0FBYyxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxNQUFNLFFBQVEsSUFBSSxFQUFFLEdBQUcsTUFBTyxHQUFFLE9BQU8sS0FBSyxJQUFJLEVBQUUsT0FBTyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxDQUFFLElBQUcsSUFBSyxNQUFLLElBQUssUUFBTyxXQUFXLE1BQU8sR0FBRSxHQUFHLEVBQUUsQ0FBRSxJQUFJLEdBQUUsRUFBRSxNQUFPLE9BQU8sR0FBRSxRQUFRLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLFNBQVMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBRyxNQUFNLFFBQVEsSUFBSSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUksR0FBRSxFQUFFLE1BQU8sR0FBRSxRQUFRLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxXQUFZLEdBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxXQUErTSxRQUFTLElBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxNQUFPLEVBQUUsS0FBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxRQUFRLFFBQVEsR0FBRyxPQUFPLEtBQUssR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUksT0FBTyxHQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxNQUFPLEdBQUUsV0FBVyxHQUFJLEdBQUUsa0JBQW1CLEdBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsa0JBQW1CLEdBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFFLE9BQU8sR0FBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxXQUFXLE1BQU8sSUFBRyxrQkFBbUIsR0FBRSxFQUFFLEtBQUssS0FBSyxNQUFNLEVBQUUsa0JBQW1CLEdBQUUsRUFBRSxLQUFLLEtBQUssTUFBTSxJQUFJLEVBQUUsRUFBRSxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEdBQUcsTUFBTSxRQUFRLEdBQUcsR0FBRyxHQUFHLENBQUUsT0FBTyxHQUFFLFNBQVMsR0FBRyxJQUFJLEdBQUksTUFBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sS0FBSyxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBSSxPQUFPLElBQUcsR0FBRyxFQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxPQUFPLE9BQU8sR0FBRyxLQUFNLE9BQU8sR0FBRSxFQUFFLEVBQUUsR0FBRyxFQUFza0IsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUEwdEIsUUFBUyxHQUFFLEdBQUcsR0FBSSxHQUFFLEdBQUcsSUFBSSxFQUFHLEdBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUF4d0IsR0FBRyxrQkFBbUIsS0FBSSxFQUFFLEVBQUUsU0FBUyxTQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxLQUFNLElBQUcsRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLElBQUssSUFBRyxNQUFNLFFBQVEsR0FBRyxJQUFJLEVBQUUsRUFBRSxPQUFPLEtBQUssaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLEtBQUssV0FBWSxJQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUksS0FBSyxHQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLEtBQUssRUFBRyxHQUFFLE1BQU0sSUFBSSxHQUFHLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLE1BQU8sSUFBRyxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsU0FBVSxJQUFHLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLEVBQUUsS0FBSyxLQUFLLEVBQUUsUUFBUyxJQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUksS0FBSyxHQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxHQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsS0FBSyxHQUFHLElBQUksS0FBSyxNQUFNLEdBQUcsU0FBUyxHQUFHLEdBQUksR0FBRSxFQUFFLFVBQVcsSUFBRyxFQUFFLElBQUksR0FBSSxLQUFLLEdBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLG1CQUFtQixLQUFJLEVBQUUsSUFBSSxLQUFLLEVBQUUsT0FBTyxNQUFNLElBQUksRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxFQUFFLFFBQVEsSUFBSSxFQUFFLFFBQVEsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUcsSUFBSSxHQUFFLElBQUssS0FBSSxJQUFLLEdBQUUsRUFBRSxFQUFHLEtBQUksSUFBSyxHQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBdUQsT0FBTyxHQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsZ0JBQWlCLEdBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLElBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTyxHQUFFLEVBQUcsSUFBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxFQUFHLElBQUksR0FBRSxFQUFFLEVBQUcsT0FBTyxHQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxRQUFRLEVBQUUsS0FBTSxJQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLFdBQVcsR0FBRSxNQUFRLElBQUcsS0FBSyxHQUFHLElBQUksRUFBRSxHQUFHLENBQUMsR0FBSSxHQUFFLEdBQUcsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxHQUFFLEdBQUksT0FBRyxLQUFTLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxFQUFFLEVBQUUsV0FBUixDQUEwQixHQUFJLEdBQUUsRUFBRSxPQUFRLE9BQUcsSUFBRyxFQUFFLFNBQVMsZUFBVyxLQUFTLEVBQUUsU0FBUyxVQUFVLFFBQUksS0FBUyxFQUFFLE9BQU8sR0FBVSxFQUFFLE9BQU8sR0FBUyxrQkFBbUIsSUFBRyxhQUFhLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxHQUFHLElBQUcsRUFBRSxFQUFFLEVBQUcsSUFBSSxHQUFFLEVBQUcsS0FBRyxHQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsTUFBTyxHQUFFLFFBQVMsSUFBRyxHQUFHLEdBQUksR0FBRSxHQUFHLEVBQUUsV0FBVyxNQUFNLHFCQUFzQixPQUFPLEdBQUUsRUFBRSxHQUFHLEdBQUcsUUFBUyxJQUFHLEVBQUUsR0FBRyxNQUFPLElBQUcsS0FBSyxHQUFHLEdBQUcsUUFBUyxJQUFHLEVBQUUsR0FBRyxJQUFJLE1BQU0sUUFBUSxHQUFHLE1BQU8sSUFBRyxFQUFFLEdBQUcsR0FBRyxDQUFFLEtBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLE1BQU8sRUFBRSxRQUFPLEVBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLElBQUssS0FBSSxHQUFHLEVBQUUsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLEdBQUksR0FBRSxFQUFFLFNBQVMsYUFBYyxJQUFHLEVBQUUsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLElBQUksSUFBRyxJQUFLLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxNQUFNLEdBQUcsR0FBRyxFQUFFLEVBQUUsdUJBQXVCLEdBQUcsRUFBRSxFQUFFLEdBQUcsUUFBUSxNQUFNLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxFQUFFLE1BQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLFNBQVMsR0FBRyxNQUFPLElBQUcsRUFBRSxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsVUFBUyxHQUFJLE1BQU0sR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLGFBQWEsSUFBSSxNQUFPLEdBQUUsYUFBYSxLQUFLLEtBQUssRUFBRSxFQUFFLEdBQUcsTUFBTSxHQUFHLElBQUksR0FBRyxHQUFHLEVBQUUsS0FBSyx1QkFBdUIsR0FBRyxFQUFFLEVBQUUsR0FBRyxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLEdBQUcsbUJBQW9CLFNBQVEsS0FBTSxFQUFFLFNBQVEsTUFBTSxHQUE0QixRQUFTLE1BQUssSUFBRyxDQUFHLElBQUksR0FBRSxHQUFHLE1BQU0sRUFBRyxJQUFHLE9BQU8sQ0FBRSxLQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksRUFBRSxLQUFpaUIsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEVBQUUsSUFBRyxHQUFHLEtBQUssV0FBVyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssR0FBRyxNQUFNLEdBQUcsR0FBRyxFQUFFLEVBQUUsZ0JBQWlCLElBQUcsRUFBRSxLQUFLLEtBQUssSUFBRyxFQUFHLE9BQU8sR0FBRyxtQkFBb0IsU0FBUSxNQUFPLElBQUksU0FBUSxTQUFTLEdBQUcsRUFBRSxJQUFrQixRQUFTLElBQUcsSUFBSSxRQUFTLEdBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFNLEVBQUUsTUFBTSxRQUFRLEVBQUcsT0FBSSxJQUFJLEVBQUUsSUFBSSxPQUFPLFNBQVMsSUFBSSxZQUFhLEtBQS9DLENBQXlELEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBSSxHQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUcsSUFBRyxFQUFFLElBQUksR0FBRyxNQUFPLEdBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEtBQUssRUFBRSxFQUFFLEdBQUcsT0FBUSxLQUFJLEVBQUUsT0FBTyxLQUFLLEdBQUcsRUFBRSxFQUFFLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEtBQUksRUFBRSxJQUFJLEdBQUcsUUFBMEwsUUFBUyxJQUFHLEVBQUUsR0FBRyxRQUFTLEtBQUksR0FBSSxHQUFFLFVBQVUsRUFBRSxFQUFFLEdBQUksS0FBSSxNQUFNLFFBQVEsR0FBRyxNQUFPLElBQUcsRUFBRSxLQUFLLFVBQVUsRUFBRSxlQUFnQixLQUFJLEdBQUksR0FBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsZ0JBQWdCLE1BQU8sR0FBRSxJQUFJLEVBQUUsRUFBRSxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxDQUFFLEtBQUksSUFBSyxHQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUksS0FBSSxJQUFLLEdBQUUsRUFBRSxFQUFFLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUF1RSxRQUFTLEtBQUksRUFBRSxNQUFNLEtBQUssV0FBVyxFQUFFLEVBQUUsSUFBSSxHQUFqSCxHQUFJLEVBQUUsYUFBYSxNQUFLLEVBQUUsRUFBRSxLQUFLLE9BQU8sRUFBRSxLQUFLLFNBQVUsSUFBSSxHQUFFLEVBQUUsRUFBbUQsR0FBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLEtBQUssR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBTyxFQUFHLEVBQUUsR0FBRyxFQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxHQUFHLEVBQUUsR0FBRyxTQUFVLEdBQUUsSUFBRyxDQUFHLElBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTyxHQUFFLEdBQUcsRUFBRSxHQUFHLFNBQVUsR0FBRSxJQUFHLEVBQUcsT0FBTSxFQUFHLFFBQVMsSUFBRyxHQUFHLE1BQU8sR0FBRSxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsR0FBRyxRQUFTLEdBQUUsRUFBRSxHQUFHLEdBQWEsR0FBRSxFQUFFLEVBQUUsRUFBZixJQUFpQixLQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssaUJBQWtCLEtBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFNLFFBQVEsR0FBRyxFQUFFLE9BQU8sSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksS0FBSyxHQUFHLEtBQUssRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssR0FBRyxLQUFLLEdBQUcsRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLElBQUssT0FBTyxJQUFHLE9BQUcsR0FBTyxRQUFTLElBQUcsR0FBRyxNQUFPLEdBQUUsSUFBSSxFQUFFLEVBQUUsUUFBTyxJQUFLLEVBQUUsVUFBVSxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksR0FBSSxHQUFFLE9BQU8sT0FBTyxNQUFNLEVBQUUsR0FBRyxRQUFRLFFBQVEsR0FBRyxPQUFPLEtBQUssR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsSUFBRyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEdBQUksR0FBRSxFQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsRUFBRSxVQUFVLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUcsT0FBTSxFQUFFLEVBQUUsUUFBUSxJQUFJLEdBQUcsV0FBWSxHQUFFLEdBQUcsQ0FBQyxHQUFJLEdBQUUsRUFBRSxHQUFHLE9BQVEsR0FBRSxHQUFHLGtCQUFtQixHQUFFLEVBQUUsS0FBSyxHQUFHLElBQUksTUFBTyxJQUFHLFFBQVMsSUFBRyxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsT0FBTyxRQUFTLEtBQUksR0FBSSxNQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUssSUFBRyxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBYSxHQUFFLE1BQU0sS0FBSyxFQUFFLFVBQVUsR0FBRyxFQUFFLFlBQVksSUFBSSxHQUFHLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGFBQWEsS0FBSyxPQUFPLENBQUMsR0FBSSxHQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU8sY0FBYSxFQUFFLElBQUksRUFBRSxLQUFLLE1BQU0sRUFBRSxFQUFFLGNBQWMsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFJLEtBQUssR0FBRSxFQUFFLEdBQUcsTUFBTSxXQUFZLEdBQUUsRUFBRyxPQUFPLEdBQUUsUUFBUyxJQUFHLEdBQUcsTUFBTyxHQUFFLFlBQVksRUFBRSxjQUFjLE1BQU0sRUFBRSxLQUFLLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxPQUFPLEtBQUssR0FBRyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUssSUFBRyxFQUFFLENBQUMsR0FBRyxFQUFFLFlBQVksTUFBTyxHQUFFLFdBQVksSUFBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksRUFBRSxPQUFPLElBQUksRUFBRSxXQUFXLE1BQU8sRUFBRSxLQUFJLEdBQUksS0FBSyxNQUFLLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLFNBQVUsS0FBSyxLQUFJLEdBQUksS0FBSyxHQUFFLElBQUssS0FBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUksT0FBTyxJQUFHLE9BQU8sYUFBYSxLQUFLLEVBQUUsWUFBWSxHQUFHLEVBQUUsRUFBRSxVQUFVLEdBQUcsRUFBRSxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsYUFBYSxHQUFHLEVBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxXQUFXLEdBQUksR0FBRSxVQUFVLE9BQU8sRUFBRSxNQUFNLEtBQUssV0FBVyxLQUFNLFFBQU8sRUFBRSxHQUFHLGdCQUFpQixLQUFJLE1BQU0sUUFBUSxJQUFJLEdBQUcsR0FBRyxNQUFNLElBQUksRUFBRSxRQUFRLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxlQUFXLEdBQU8sRUFBRyxPQUFPLEdBQUUsT0FBTyxPQUFPLGVBQWUsRUFBRSxHQUFHLElBQUksRUFBRSxZQUFXLEVBQUcsY0FBYSxJQUFLLEVBQUUsUUFBUyxJQUFHLEVBQUUsR0FBRyxNQUFPLFlBQVcsTUFBTyxHQUFFLElBQUksUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBRSxJQUFHLE1BQU0sUUFBUSxJQUFJLGdCQUFpQixHQUFFLElBQUksRUFBRSxHQUFJLE9BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsT0FBUSxJQUFHLGdCQUFpQixHQUFFLElBQUksRUFBRSxHQUFJLE9BQU0sR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLE9BQVEsSUFBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLEVBQUUsT0FBTyxVQUFVLENBQUMsSUFBSyxLQUFJLEdBQUksR0FBRSxFQUFFLE9BQU8sWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsV0FBWSxLQUFJLEVBQUUsT0FBTyxLQUFLLEdBQUcsRUFBRSxHQUFJLE9BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFHLE9BQU8sR0FBRSxLQUFLLE1BQU0sRUFBRSxVQUFTLEVBQUcsRUFBRSxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxLQUFLLGFBQWEsRUFBRyxJQUFHLEVBQUUsTUFBTSxJQUFJLEVBQUUsRUFBRSxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsS0FBSyxPQUFPLElBQUksQ0FBRSxJQUFJLEdBQUUsR0FBRyxFQUFFLElBQUssT0FBTyxHQUFFLEtBQUssZUFBZSxZQUFZLEtBQUssR0FBRyxHQUFHLEVBQUUsUUFBUyxJQUFHLEdBQUcsTUFBTyxJQUFHLEtBQUssU0FBUyxVQUFVLElBQUksRUFBRSxRQUFTLElBQUcsRUFBRSxHQUFHLE1BQU8sT0FBTSxRQUFRLElBQUksSUFBSSxFQUFFLFFBQVEsR0FBRyxJQUFJLEVBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxTQUFTLElBQUksQ0FBRSxPQUFPLElBQUcsSUFBSSxFQUFFLFNBQVMsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLE1BQUUsR0FBTyxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFJLEVBQUUsT0FBTSxRQUFRLEtBQUssRUFBRSxFQUFFLEdBQWdSLEtBQUksR0FBSSxLQUFLLElBQW5SLFNBQVMsR0FBRyxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUksR0FBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLElBQUssR0FBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFVBQVUsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRyxLQUFLLElBQUcsSUFBSyxLQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLFVBQVUsR0FBRyxTQUFTLEdBQUcsRUFBRSxHQUFHLE1BQXVCLEdBQVEsTUFBTyxHQUFFLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxHQUFFLEtBQUssZUFBZSxLQUFLLGlCQUFpQixFQUFFLEVBQUUsRUFBRyxPQUFPLEtBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsS0FBSyxTQUFTLGdCQUFnQixHQUFHLEtBQUssS0FBSyxhQUFhLEtBQUssTUFBTSxhQUFhLEdBQUUsR0FBSSxHQUFHLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxNQUFPLElBQUcsRUFBRSxXQUFXLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSSxHQUFJLEVBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsSUFBSSxnQkFBaUIsR0FBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQVEsSUFBRyxFQUFFLEVBQUUsR0FBRyxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxVQUFTLEVBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUssRUFBRSxHQUFHLENBQUMsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLE1BQU8sS0FBSSxHQUFJLEtBQUssR0FBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUcsR0FBRSxHQUFHLEtBQUssT0FBTyxFQUFFLEdBQUcsR0FBUSxNQUFPLEdBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLFNBQVMsRUFBRyxLQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLE9BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLE9BQU0sR0FBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksTUFBTyxLQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUUsUUFBUyxJQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEdBQUcsRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsaUJBQWlCLElBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxNQUFPLEdBQUUsUUFBUyxJQUFHLEVBQUUsR0FBRyxNQUFNLGdCQUFpQixHQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVMsSUFBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsT0FBUSxHQUFFLEVBQUUsU0FBUyxFQUFFLE9BQU8sT0FBTyxJQUFJLFVBQVUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVcsSUFBSSxHQUFFLEVBQUUsRUFBRSxXQUFXLEdBQUcsQ0FBRSxNQUFLLEtBQUssRUFBRSxLQUFLLE1BQU0sRUFBRSxLQUFLLFNBQVMsRUFBRSxLQUFLLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRSxJQUFJLEVBQUUsS0FBSyxXQUFXLEdBQUcsRUFBRSxPQUFPLEdBQUcsS0FBSyxNQUFNLFdBQVcsTUFBTyxHQUFFLFFBQVEsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLEdBQUcsRUFBRSxJQUFJLEVBQUUsUUFBUSxPQUFPLGVBQWUsS0FBSyxlQUFlLFlBQVcsRUFBRyxJQUFJLFdBQVcsTUFBTyxJQUFHLEVBQUUsWUFBWSxLQUFLLFlBQVksSUFBSSxLQUFLLFNBQVMsRUFBRSxLQUFLLE9BQU8sS0FBSyxRQUFRLEtBQUssYUFBYSxHQUFHLEVBQUUsWUFBWSxLQUFLLFNBQVMsRUFBRSxTQUFTLEtBQUssR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUcsT0FBTyxLQUFJLE1BQU0sUUFBUSxLQUFLLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxVQUFVLEdBQUcsR0FBRyxLQUFLLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU8sSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxHQUFHLEVBQUcsT0FBTyxHQUFFLFVBQVUsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsVUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVMsSUFBRyxFQUFFLEdBQUcsSUFBSSxHQUFJLEtBQUssR0FBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQXlrRCxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLENBQUMsR0FBSSxHQUFFLEVBQUUsU0FBUyxLQUFNLElBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxPQUFPLElBQUksa0JBQW1CLEdBQUUsQ0FBQyxHQUFJLEVBQUUsSUFBRyxFQUFFLEVBQUUsVUFBTSxNQUFVLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsV0FBVyxNQUFPLEdBQUUsU0FBVSxJQUFHLEVBQUUsRUFBRSxVQUFVLE1BQU8sR0FBRSxRQUFTLElBQUksR0FBRSxFQUE4RCxJQUEzRCxHQUFHLEVBQUUsRUFBRSxVQUFVLElBQUksRUFBRSxPQUFPLFFBQVEsSUFBSSxFQUFFLE9BQU8sS0FBSyxHQUFNLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxhQUFhLE1BQU8sR0FBRSxXQUFZLElBQUcsSUFBSSxFQUFFLEVBQUUsUUFBUSxDQUFDLEdBQUksR0FBRSxFQUFFLFFBQVEsR0FBRyxHQUFFLEVBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSyxHQUFFLElBQUksaUJBQWlCLFdBQVcsTUFBTyxHQUFFLEVBQUUsSUFBSyxJQUFJLEdBQUUsU0FBUyxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLGNBQWUsS0FBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLElBQUksYUFBYSxHQUFHLEVBQUUsTUFBTSxPQUFPLElBQUksYUFBYSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsU0FBUyxHQUFHLEVBQUUsU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUUsS0FBTSxFQUFFLEVBQUUsU0FBUyxHQUFHLEVBQUUsRUFBRSxhQUFhLEVBQUUsT0FBTSxFQUFHLEdBQUUsTUFBTyxFQUFFLEVBQUUsRUFBRSxFQUFHLE9BQU8sR0FBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxhQUFhLEVBQUUsVUFBVSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLFVBQVUsR0FBRyxFQUFFLE1BQU0sSUFBSSxFQUFFLEVBQUUsV0FBVyxFQUFFLFlBQVksR0FBRyxFQUFFLFFBQVEsR0FBRyxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVEsRUFBRyxFQUFFLFdBQVcsV0FBVyxFQUFFLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFRLEVBQUcsR0FBRSxLQUFNLEVBQUUsT0FBTyxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsV0FBVyxXQUFXLEVBQUUsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxZQUFZLEdBQUUsRUFBRyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEVBQUUsSUFBSSxNQUFPLFVBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxJQUFLLE9BQU8sR0FBRSxhQUFhLEVBQUUsRUFBRSxXQUFXLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRyxHQUFFLE1BQU0sR0FBRyxHQUFHLEVBQUUsRUFBRSxRQUFRLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxTQUFTLEVBQUUsUUFBUSxFQUFFLFdBQVcsR0FBRyxFQUFFLE1BQU0sS0FBTSxJQUFJLEdBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsTUFBTSxRQUFTLEdBQUUsSUFBSSxNQUFNLFFBQVEsSUFBSSxJQUFJLEVBQUUsUUFBUSxHQUFHLElBQUksS0FBSyxFQUFFLElBQUksR0FBRyxPQUFPLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxRQUFRLEVBQUcsSUFBSSxHQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsUUFBUSxLQUFNLEtBQUksRUFBRSxHQUFHLENBQUMsR0FBSSxNQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFNLElBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUksS0FBSyxHQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUUsSUFBSyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUUsR0FBSSxNQUFPLEtBQUksRUFBRSxFQUFHLElBQUcsRUFBRSxFQUFFLFFBQVEsWUFBWSxNQUFPLFVBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLFFBQVEsS0FBSyxFQUFFLEVBQUUsS0FBTSxJQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUksS0FBSyxHQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQVEsR0FBRSxFQUFFLFFBQVEsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsRUFBRSxNQUFPLElBQUksR0FBRSxHQUFJLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEtBQUssS0FBSyxFQUFFLEdBQUcsRUFBRyxJQUFHLFlBQWEsSUFBRyxNQUFPLElBQUcsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFHLElBQUcsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFJLEdBQUksR0FBRSxHQUFHLE9BQU8sRUFBRSxHQUFJLE9BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFHLE9BQU8sS0FBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUcsSUFBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLFFBQVEsVUFBVSxDQUFDLEdBQUksR0FBRSxFQUFFLElBQUssTUFBSyxJQUFJLEVBQUUsS0FBSyxJQUFJLFNBQVMsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUs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T0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsbUJBQW1CLEdBQUcsSUFBSSxNQUFPLElBQUcsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBRyxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFHLE9BQU8sU0FBUyxLQUFJLE9BQU8sRUFBRSxNQUFNLEtBQUssWUFBWSxFQUFFLEtBQUssRUFBRSxJQUFJLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxPQUFHLEdBQW1CLFFBQVMsSUFBRyxHQUFHLEdBQUksR0FBRSxFQUFHLE9BQU8sSUFBRyxFQUFFLFdBQVcsR0FBRyxHQUFHLFFBQVMsSUFBRyxHQUFHLEtBQUssSUFBSSxFQUFFLEVBQUUsVUFBVSxHQUFHLEVBQUUsVUFBVSxPQUFNLENBQUcsUUFBTSxFQUFHLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxpQkFBZ0IsRUFBRyxHQUFHLEdBQUcsV0FBWSxJQUFHLEVBQUUsZ0JBQWdCLE1BQU8sSUFBRyxFQUFFLFdBQVcsT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFLFdBQVUsQ0FBRyxLQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxVQUFVLE9BQU8sSUFBSSxHQUFHLEVBQUUsVUFBVSxHQUFJLElBQUcsRUFBRSxjQUFjLFFBQVMsSUFBRyxFQUFFLEdBQUcsSUFBSyxJQUFJLEdBQUUsRUFBRSxTQUFTLEdBQUcsRUFBRSxFQUFFLE9BQVEsSUFBRyxFQUFFLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRyxHQUFFLGVBQWUsRUFBRSxNQUFNLFFBQVEsR0FBRyxLQUFtTixRQUFTLE1BQUssR0FBSSxHQUFFLENBQUUsS0FBSSxHQUFHLEtBQUssSUFBRyxFQUFHLEdBQUcsS0FBSyxTQUFTLEVBQUUsR0FBRyxNQUFPLEdBQUUsR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxPQUFPLE1BQU0sRUFBRSxHQUFHLEtBQUssUUFBUSxFQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEtBQUssRUFBRSxLQUFNLElBQUksR0FBRSxHQUFHLFFBQVEsRUFBRSxHQUFHLE9BQVEsSUFBRyxHQUFHLE9BQU8sR0FBRyxPQUFPLEVBQUUsTUFBTSxHQUFHLElBQUcsRUFBRyxTQUFTLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsR0FBRyxXQUFVLEVBQUcsR0FBRyxFQUFFLElBQUcsSUFBSyxHQUFHLFNBQVMsR0FBa0IsSUFBZixHQUFJLEdBQUUsRUFBRSxPQUFZLEtBQUssQ0FBQyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFHLEdBQUUsV0FBVyxHQUFHLEVBQUUsYUFBYSxFQUFFLGNBQWMsR0FBRyxFQUFFLGFBQWEsR0FBRyxJQUFJLEVBQUUsVUFBVSxHQUFHLEtBQUssU0FBdXBFLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksV0FBVyxNQUFPLE1BQUssR0FBRyxJQUFJLEdBQUcsSUFBSSxTQUFTLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxPQUFPLGVBQWUsRUFBRSxFQUFFLElBQUksUUFBUyxJQUFHLEdBQUcsRUFBRSxZQUFhLElBQUksR0FBRSxFQUFFLFFBQVMsR0FBRSxPQUFPLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLFNBQVMsY0FBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsU0FBUyxZQUFhLEdBQUUsU0FBUyxJQUFHLEVBQXNGLEtBQUksR0FBSSxLQUFLLElBQXpGLFNBQVMsR0FBRyxFQUFFLEtBQUssRUFBRyxJQUFJLEdBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFHLElBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSyxJQUFHLEdBQUcsRUFBRSxTQUFTLElBQXFCLEVBQUcsS0FBRyxJQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsS0FBTSxLQUFJLEdBQUksS0FBSyxHQUFFLEVBQUUsR0FBRyxrQkFBbUIsR0FBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssU0FBUyxHQUFHLEdBQUksR0FBRSxFQUFFLFNBQVMsSUFBSyxHQUFFLEVBQUUsRUFBRSxNQUFNLGtCQUFtQixHQUFFLFNBQVMsRUFBRSxHQUFHLElBQUssS0FBSSxNQUFPLEdBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxHQUFHLE1BQU8sSUFBRyxFQUFFLEVBQUUsYUFBYSxRQUFRLE9BQU8sRUFBRSxHQUFHLFNBQVMsS0FBOEUsS0FBeEUsR0FBSSxHQUFFLE9BQU8sS0FBSyxHQUFHLEVBQUUsRUFBRSxTQUFTLE1BQU0sR0FBRyxFQUFFLFNBQVMsUUFBUSxFQUFFLFFBQWEsS0FBSyxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsSUFBRyxFQUFFLEVBQUUsS0FBSyxNQUFFLEdBQU8sTUFBTSxHQUFHLEVBQUUsSUFBSSxXQUFXLEtBQUssS0FBSyxHQUFHLEdBQUcsRUFBRSxRQUFRLElBQUksR0FBSSxFQUFFLElBQUcsR0FBRSxJQUFLLEdBQUcsR0FBRyxFQUFFLFVBQVMsR0FBSSxFQUFFLFVBQVUsU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsa0JBQWtCLE9BQU8sT0FBTyxNQUFNLEVBQUUsSUFBSyxLQUFJLEdBQUksS0FBSyxHQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLGtCQUFtQixHQUFFLEVBQUUsRUFBRSxHQUFJLEtBQUksRUFBRSxHQUFHLEdBQUksSUFBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssSUFBSyxJQUFHLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsUUFBUSxHQUFHLFNBQVMsRUFBRSxHQUFHLElBQUksR0FBSSxLQUFLLEdBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLElBQUcsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEdBQUcsRUFBRSxFQUFFLEVBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxPQUF3QixRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsR0FBSSxJQUFHLElBQUssbUJBQW1CLElBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxHQUFHLElBQUksRUFBRSxJQUFJLElBQUcsSUFBSyxFQUFFLE1BQU0sR0FBRyxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLEVBQUUsS0FBSyxHQUFHLE9BQU8sZUFBZSxFQUFFLEVBQUUsSUFBSSxRQUFTLElBQUcsR0FBRyxNQUFPLFlBQVcsR0FBSSxHQUFFLEtBQUssbUJBQW1CLEtBQUssa0JBQWtCLEVBQUcsSUFBRyxFQUFFLE1BQU8sR0FBRSxPQUFPLEVBQUUsV0FBVyxHQUFHLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxRQUFTLElBQUcsR0FBRyxNQUFPLFlBQVcsTUFBTyxHQUFFLEtBQUssS0FBSyxPQUFPLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxnQkFBaUIsS0FBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQVksUUFBUyxJQUFHLEdBQUcsR0FBSSxHQUFFLEVBQUUsT0FBUSxJQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUksR0FBRSxHQUFHLEVBQUUsTUFBTyxJQUFHLElBQUksRUFBRSxhQUFhLENBQUMsRUFBRSxhQUFhLENBQUUsSUFBSSxHQUFFLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLGFBQWMsS0FBSSxHQUFJLEtBQUssR0FBRSxFQUFFLEtBQUssRUFBRSxLQUFLLElBQUksTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFJLE9BQU8sSUFBRyxFQUFHLElBQUcsRUFBRSxFQUFFLGNBQWMsSUFBSSxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsRUFBRSxnQkFBZ0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLElBQUksTUFBTyxHQUFFLFFBQVMsSUFBRyxHQUFHLEtBQUssTUFBTSxHQUFHLFFBQVMsSUFBRyxHQUFHLEVBQUUsSUFBSSxDQUFFLElBQUksR0FBRSxDQUFFLEdBQUUsT0FBTyxTQUFTLEdBQUcsRUFBRSxLQUFNLElBQUksR0FBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsU0FBVSxJQUFHLEVBQUUsR0FBRyxNQUFPLEdBQUUsRUFBRyxJQUFJLEdBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxLQUFLLEVBQUUsU0FBUyxHQUFHLEtBQUssTUFBTSxHQUFJLFFBQU8sRUFBRSxVQUFVLE9BQU8sT0FBTyxFQUFFLFlBQVksWUFBWSxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsUUFBUSxHQUFHLEVBQUUsUUFBUSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsUUFBUSxPQUFPLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxRQUFRLEtBQU0sS0FBSSxHQUFJLEtBQUssR0FBRSxHQUFHLEVBQUUsVUFBVSxTQUFTLElBQUksR0FBRyxFQUFFLFFBQVEsVUFBVSxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUUsUUFBUSxRQUFTLEtBQUksR0FBSSxLQUFLLEdBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLFFBQVEsV0FBVyxHQUFHLEdBQUcsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxFQUFFLGNBQWMsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsR0FBRyxRQUFTLElBQUcsR0FBRyxNQUFPLEtBQUksRUFBRSxLQUFLLFFBQVEsTUFBTSxFQUFFLEtBQUssUUFBUyxJQUFHLEVBQUUsR0FBRyxNQUFPLE9BQU0sUUFBUSxHQUFHLEVBQUUsUUFBUSxJQUFJLEVBQUUsZ0JBQWlCLEdBQUUsRUFBRSxNQUFNLEtBQUssUUFBUSxJQUFJLEdBQUcsRUFBRSxFQUFFLG9CQUFvQixFQUFFLEtBQUssSUFBSSxFQUFFLEtBQUssR0FBSSxJQUFJLEdBQUUsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFPLEtBQUksR0FBSSxLQUFLLEdBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLElBQUcsRUFBRSxDQUFDLEdBQUksR0FBRSxHQUFHLEVBQUUsaUJBQWtCLEtBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsa0JBQWtCLFdBQVcsRUFBRSxHQUFHLEtBQUssRUFBRSxFQUFFLEdBQW9rTyxRQUFTLElBQUcsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUscUJBQXFCLEVBQUUsRUFBRSxrQkFBa0IsU0FBUyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxHQUFJLE1BQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLE1BQU8sT0FBTyxVQUFTLEVBQUUsR0FBRyxNQUFHLEdBQUUsSUFBSSxFQUFFLEdBQVUsR0FBRyxFQUFFLEdBQUcsSUFBVSxJQUFJLEVBQUUsWUFBWSxFQUFFLE9BQU8sUUFBUyxJQUFHLEVBQUUsR0FBRyxPQUFPLFlBQVksR0FBRyxFQUFFLFlBQVksRUFBRSxhQUFhLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sUUFBUyxJQUFHLEVBQUUsR0FBRyxNQUFPLEdBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxRQUFTLElBQUcsR0FBRyxNQUFPLE9BQU0sUUFBUSxHQUFHLFNBQVMsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssR0FBRyxFQUFHLE9BQU8sSUFBRyxHQUFHLEVBQUUsR0FBRyxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUcsS0FBSSxHQUFJLEtBQUssR0FBRSxFQUFFLEtBQUssSUFBSSxHQUFHLEtBQUssR0FBRyxFQUFHLE9BQU8sSUFBRyxHQUFHLGdCQUFpQixHQUFFLEVBQUUsR0FBZzlCLFFBQVMsSUFBRyxHQUFHLE1BQU8sSUFBRyxHQUFHLE1BQU0sU0FBUyxFQUFFLFdBQU8sR0FBd0YsUUFBUyxJQUFHLEdBQUcsR0FBRyxnQkFBaUIsR0FBRSxDQUFpQyxNQUExQixVQUFTLGNBQWMsSUFBYSxTQUFTLGNBQWMsT0FBTyxNQUFPLEdBQXUzQixRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEtBQUssR0FBSSxJQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUksR0FBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxFQUFFLEtBQU0sR0FBRSxNQUFNLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxPQUFHLElBQVEsRUFBRSxLQUFLLFNBQVMsTUFBTSxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsUUFBUSxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBZ0YsUUFBUyxJQUFHLEVBQUUsR0FBRyxNQUFPLEdBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxPQUFPLFNBQVMsRUFBRSxHQUFHLEdBQUcsVUFBVSxFQUFFLElBQUksT0FBTSxDQUFHLElBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFLLE9BQU8sS0FBSSxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLEVBQUUsYUFBYSxRQUFRLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxJQUFLLEtBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsRUFBRyxPQUFPLEdBQTZELFFBQVMsSUFBRyxFQUFFLElBQUksRUFBRSxLQUFLLFlBQVksRUFBRSxLQUFLLGFBQWEsU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssV0FBVyxFQUFFLFNBQVMsS0FBSyxJQUFLLEtBQUksSUFBSyxHQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLGtCQUFrQixFQUFFLEtBQUssS0FBSyxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxVQUFVLEVBQUUsS0FBSyxHQUFJLElBQUcsRUFBRSxPQUFPLENBQUMsR0FBSSxHQUFFLFdBQVcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEdBQUcsRUFBRSxHQUFHLFdBQVcsRUFBRSxHQUFJLEdBQUUsR0FBRyxFQUFFLFNBQVMsR0FBRyxJQUF1RyxHQUFuRyxFQUFFLFFBQVEsR0FBRyxFQUFFLFlBQVksV0FBVyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksR0FBRyxFQUFFLEdBQUcsbUJBQW1CLEVBQUUsTUFBUyxFQUFFLElBQUksSUFBSyxHQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBOEIsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFFLE9BQU8sT0FBTyxLQUFNLEtBQUksRUFBRSxNQUFPLEVBQUUsS0FBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sS0FBSyxFQUFFLEVBQUUsSUFBSSxZQUFZLEVBQUUsVUFBVSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxTQUFTLGFBQWEsRUFBRSxLQUFNLE9BQU8sR0FBRSxRQUFTLElBQUcsR0FBRyxNQUFPLEdBQUUsU0FBUyxFQUFFLEtBQUssSUFBSSxPQUFPLEtBQUssRUFBRSxlQUFlLEtBQUssS0FBSyxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUcsSUFBRyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFNLEdBQUcsR0FBRyxFQUFFLEVBQUUsUUFBUSxhQUFhLEVBQUUsS0FBSyxJQUFJLEVBQUUsVUFBeUIsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxnQkFBaUIsTUFBSyxFQUFF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QUFHLE1BQU0sS0FBSyxJQUFHLEdBQUksTUFBTSxLQUFLLElBQUcsR0FBSSxNQUFNLEtBQUssSUFBRyxHQUFJLE1BQU0sS0FBSyxJQUFHLEdBQUksTUFBTSxLQUFLLEtBQUksR0FBSSxNQUFNLEtBQUssS0FBSSxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUMsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLE1BQUUsR0FBTyxHQUFHLEdBQUcsT0FBTyxFQUFFLEVBQUUsT0FBTyxJQUFJLEtBQUssR0FBRyxHQUFHLEtBQUssS0FBSyxHQUFFLGFBQVUsS0FBUyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxRQUFRLEdBQTZELFFBQUcsS0FBUyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUksT0FBTyxHQUFFLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsUUFBUSxJQUFLLElBQUcsRUFBRSxFQUFFLE1BQU0sT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFJLElBQUksR0FBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRyxPQUFNLE9BQU8sRUFBRSxNQUFNLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLFFBQVMsSUFBRyxFQUFFLEdBQUcsUUFBUSxNQUFNLG1CQUFtQixHQUFHLFFBQVMsSUFBRyxFQUFFLEdBQUcsTUFBTyxHQUFFLEVBQUUsSUFBSSxTQUFTLEdBQUcsTUFBTyxHQUFFLEtBQUssT0FBTyxTQUFTLEdBQUcsTUFBTyxRQUFPLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxLQUFLLElBQUksS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEdBQUcsSUFBSSxFQUFFLE9BQU0sRUFBRyxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLFdBQVcsS0FBSyxJQUFJLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxHQUFHLElBQUksRUFBRSxPQUFNLEVBQUcsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxTQUFTLEdBQUcsRUFBRSxFQUFFLFVBQVUsS0FBSyxJQUFJLEtBQUssRUFBRSxNQUFNLEdBQUcsSUFBSSxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixLQUFLLElBQUksS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxVQUFVLEdBQUcsSUFBSSxFQUFFLE9BQU0sRUFBRyxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTyxHQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLElBQUcsRUFBRSxHQUFHLEdBQUcsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLDhCQUE4QixFQUFFLElBQUksVUFBVSxJQUFJLEVBQUUsb0JBQXFCLEdBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSwwQkFBMEIsRUFBRSxJQUFJLFVBQVUsSUFBSSxFQUFFLFlBQVksRUFBRSxnQkFBaUIsR0FBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLEVBQUUsSUFBSSxFQUFFLGFBQWMsR0FBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLEVBQUUsSUFBSSxFQUFFLGdCQUFpQixHQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsY0FBZSxHQUFFLE9BQU8sRUFBRSxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxFQUFFLFNBQVMsRUFBRSxVQUFXLElBQUksR0FBRSxJQUFJLE1BQU0sRUFBRSxPQUFPLFFBQVEsR0FBRyxFQUFHLEtBQUksSUFBSSxFQUFFLFVBQVUsRUFBRyxJQUFJLEdBQUUsRUFBRSxFQUFHLE9BQU0sUUFBUSxHQUFHLEVBQUUsRUFBRSxRQUFRLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFNLEVBQUcsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxVQUFVLEVBQUcsSUFBRyxNQUFNLEVBQUUsTUFBTyxJQUFHLEVBQUcsS0FBRyxJQUFLLEVBQUUsQ0FBQyxHQUFJLEdBQUUsR0FBRyxFQUFFLEVBQUcsSUFBRyxNQUFNLEVBQUUsTUFBTyxNQUFLLFVBQVUsSUFBSSxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsR0FBSSxFQUFFLElBQUcsT0FBTyxFQUFFLEVBQUUsU0FBUyxJQUFJLElBQUksR0FBSSxHQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRyxPQUFNLE1BQU8sVUFBVSxHQUFFLFNBQVMsR0FBRyxFQUFFLFFBQVMsSUFBRyxFQUFFLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsSUFBRyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU8sR0FBRSxPQUFPLEVBQUUsR0FBRyxHQUFHLFFBQVMsSUFBRyxFQUFFLEdBQUcsTUFBTyxLQUFJLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQU0sR0FBRSxPQUFPLEVBQUUsOENBQThDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSyxJQUFJLEdBQUUsR0FBRyxFQUFFLEVBQUcsR0FBRSxPQUFPLE1BQU0sSUFBSSxFQUFFLElBQUksV0FBVyxLQUFLLFVBQVUsR0FBRyxTQUFTLG1CQUFtQixFQUFFLEtBQUssUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsU0FBUyxHQUFHLEdBQUcsRUFBRSxFQUFFLE9BQU8sR0FBRyxFQUFFLE9BQU8sRUFBRSxRQUFRLEtBQUssR0FBRyxFQUFFLFlBQVksS0FBSyxHQUFHLEVBQUUsT0FBTyxHQUFHLEVBQUUsWUFBWSxPQUFPLEdBQUcsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxFQUFFLElBQUksS0FBc0IsS0FBaEIsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQVEsTUFBTSxHQUFHLEdBQUcsTUFBTSxHQUFHLElBQUksS0FBSyxJQUFJLEdBQUcsR0FBSSxRQUFPLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxJQUFJLEVBQUUsTUFBTSxHQUFHLEVBQUUsTUFBTSxFQUFHLE9BQU8sUUFBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksS0FBSyxFQUFFLElBQUksS0FBSyxFQUFFLElBQUksUUFBUyxNQUFLLE1BQU8sSUFBRyxhQUFhLElBQUksUUFBUyxNQUFLLE1BQU8sS0FBSSxHQUFHLFFBQVMsSUFBRyxHQUFHLE1BQU8sTUFBSyxHQUFHLEtBQUssRUFBRSxRQUFTLElBQUcsR0FBRyxHQUFJLEdBQUUsQ0FBRSxLQUFJLEdBQUcsSUFBSSxNQUFNLEdBQUcsR0FBRyxFQUFFLE1BQU0sR0FBRyxPQUFRLElBQUcsS0FBSyxHQUFHLElBQUksS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFHLFFBQU8sUUFBUyxJQUFHLEdBQUcsSUFBSSxHQUFJLEdBQUUsR0FBRyxPQUFPLEVBQUUsUUFBUSxLQUE4QixRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUcsT0FBTyxTQUFTLEtBQUksT0FBTyxFQUFFLE1BQU0sS0FBSyxZQUFZLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBc0MsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBSSxHQUFFLEdBQUcsRUFBRSxDQUFFLEdBQUUsRUFBRSxTQUFTLFNBQVMsR0FBRyxHQUFHLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxXQUFXLEdBQUcsRUFBRSxXQUFXLEdBQUcsRUFBRSxPQUFPLGdCQUFnQixTQUFTLE1BQU8sR0FBRSxNQUFNLEtBQUssWUFBWSxHQUFHLGlCQUFpQixFQUFFLEVBQUUsR0FBRyxRQUFRLEVBQUUsUUFBUSxHQUFHLEdBQUcsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLElBQUksR0FBRyxJQUFJLG9CQUFvQixFQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsUUFBUyxJQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxLQUFLLE1BQU0sRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEtBQUssT0FBTyxFQUFFLEVBQUUsS0FBSyxNQUFPLElBQUcsRUFBRSxJQUFJLFNBQVMsR0FBRyxHQUFHLEVBQUUsRUFBRSxLQUFLLENBQUMsR0FBSSxHQUFFLEVBQUUsU0FBUyxPQUFRLEdBQUUsTUFBTSxPQUFPLEVBQUUsSUFBSSxFQUFFLGNBQWUsR0FBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxPQUFPLEVBQUUsSUFBSSxFQUFFLGtCQUFtQixHQUFFLE1BQU0sR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLFNBQVMsT0FBRyxJQUF3QyxRQUFTLElBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEtBQUssWUFBWSxFQUFFLEVBQUUsS0FBSyxVQUFVLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssYUFBYSxFQUFFLEVBQUUsS0FBSyxZQUFhLEtBQUksSUFBSyxHQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxTQUFTLEtBQUssSUFBSSxFQUFFLElBQUssS0FBSSxFQUFFLEdBQUcsR0FBSSxLQUFJLElBQUssR0FBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsZ0JBQWdCLEdBQUcsY0FBYyxFQUFFLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLE9BQU8sR0FBRyxJQUFJLEVBQUUsR0FBRyxRQUFTLEtBQUksRUFBRSxXQUFXLFFBQVEsRUFBRSxZQUFZLEVBQUUsV0FBVyxJQUFJLEdBQUcsVUFBVSxHQUFHLGFBQWEsRUFBRSxRQUFRLENBQUMsRUFBRSxPQUFPLENBQUUsSUFBSSxHQUFFLEVBQUUsR0FBRyxHQUFHLE9BQU8sRUFBRyxJQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sT0FBUSxJQUFHLGNBQWMsR0FBRyxHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUUsV0FBVyxFQUFFLEdBQUcsSUFBSSxTQUFTLGNBQWMsUUFBUSxVQUFVLFFBQVEsRUFBRSxRQUFTLEtBQUksR0FBSSxHQUFFLEdBQUcsV0FBVyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsV0FBWSxNQUFLLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxnQkFBaUIsSUFBRyxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sT0FBTyxRQUFTLElBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxZQUFZLFdBQVcsRUFBRSxTQUFTLFNBQVMsRUFBRSxHQUFHLEdBQUksSUFBRSxDQUFHLEtBQUksRUFBRSxTQUFTLGdCQUFnQixFQUFFLE1BQU0sSUFBSSxNQUFPLElBQUcsRUFBRSxRQUFRLEdBQUcsRUFBRSxJQUFJLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFdBQVksSUFBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxNQUFPLEdBQUUsS0FBSyxFQUFFLEVBQUcsSUFBRyxFQUFFLEtBQUssTUFBTyxHQUFFLFNBQVMsRUFBRSxPQUFPLE1BQU8sS0FBSSxHQUFHLEVBQUUsSUFBZ00sUUFBUyxJQUFHLEdBQUcsR0FBSSxHQUFFLEdBQUcsRUFBRSxNQUFPLE9BQU8sR0FBRSxZQUFZLEVBQUUsRUFBRSxZQUFZLEdBQUcsRUFBRSxRQUFTLElBQUcsR0FBRyxNQUFPLE9BQU0sUUFBUSxHQUFHLEVBQUUsR0FBRyxnQkFBaUIsR0FBRSxHQUFHLEdBQUcsRUFBeWYsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFLLE1BQUssRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLFVBQVcsR0FBRSxLQUFLLGdCQUFnQixFQUFFLEVBQUUsUUFBUSxLQUFLLEdBQUcsQ0FBRSxJQUFJLEdBQUUsU0FBUyxFQUFFLEdBQW1CLElBQUksR0FBaEIsR0FBRSxLQUFrQixFQUFFLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLGtCQUFrQixTQUFTLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUcsS0FBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRyxPQUFPLElBQUcsRUFBTSxLQUFJLElBQUssR0FBRSxFQUFFLEVBQUUsS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFJLEtBQUksSUFBSyxJQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUEwQyxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsVUFBVSxFQUFFLFFBQVEsTUFBTSxFQUFFLEVBQUUsTUFBTSxJQUFJLFFBQVEsU0FBUyxHQUFHLE1BQU8sR0FBRSxVQUFVLElBQUksS0FBSyxFQUFFLFVBQVUsSUFBSSxPQUFPLENBQUMsR0FBSSxHQUFFLEtBQUssRUFBRSxhQUFhLFVBQVUsSUFBSSxHQUFJLEdBQUUsUUFBUSxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUUsYUFBYSxTQUFTLEVBQUUsR0FBRyxTQUFTLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLEVBQUUsRUFBRSxRQUFRLEdBQUcsRUFBRSxVQUFVLEVBQUUsUUFBUSxNQUFNLEVBQUUsRUFBRSxNQUFNLElBQUksUUFBUSxTQUFTLEdBQUcsTUFBTyxHQUFFLFVBQVUsT0FBTyxLQUFLLEVBQUUsVUFBVSxPQUFPLEdBQUcsRUFBRSxVQUFVLFFBQVEsRUFBRSxnQkFBZ0IsYUFBYSxDQUFDLElBQUksR0FBSSxHQUFFLEtBQUssRUFBRSxhQUFhLFVBQVUsSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLElBQUksR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxhQUFhLFFBQVEsR0FBRyxFQUFFLGdCQUFnQixVQUFVLFFBQVMsSUFBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsZ0JBQWlCLEdBQUUsQ0FBQyxHQUFJLEtBQUssUUFBTSxJQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWlCLEdBQUUsR0FBRyxPQUFHLElBQWtxQixRQUFTLElBQUcsR0FBRyxHQUFHLFdBQVcsR0FBRyxLQUFLLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUscUJBQXFCLEVBQUUsc0JBQXVCLEdBQUUsUUFBUSxHQUFHLElBQUksRUFBRSxLQUFL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QUFFLEdBQUcsa0JBQW1CLEdBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxHQUFHLEdBQUUsSUFBSyxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxXQUFXLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxTQUFTLE1BQU8sR0FBRSxLQUFLLE1BQU0sR0FBRyxFQUFFLFNBQVMsV0FBVyxHQUFJLEdBQUUsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsSUFBSyxJQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLFVBQVUsRUFBRSxJQUFJLFdBQVcsR0FBRyxFQUFFLEVBQUUsS0FBSyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsV0FBVyxHQUFHLEVBQUUsR0FBRyxFQUFFLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsV0FBVyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssT0FBTyxHQUFHLElBQUksR0FBRyxFQUFFLEVBQUUsSUFBSSxHQUFHLEdBQUcsTUFBTSxRQUFTLElBQUcsRUFBRSxHQUFzaUIsUUFBUyxLQUFJLEVBQUUsYUFBYSxFQUFFLEtBQUssTUFBTSxFQUFFLGNBQWMsRUFBRSxXQUFXLFdBQVcsRUFBRSxXQUFXLGNBQWMsRUFBRSxLQUFLLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLFdBQVcsR0FBRyxFQUFFLEdBQUcsRUFBRSxZQUFZLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLFdBQVcsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLFFBQVEsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsS0FBMXhCLEdBQUksR0FBRSxFQUFFLEdBQUksR0FBRSxFQUFFLFlBQVksRUFBRSxTQUFTLFdBQVUsRUFBRyxFQUFFLFdBQVksSUFBSSxHQUFFLEdBQUcsRUFBRSxLQUFLLFdBQVksSUFBRyxFQUFFLElBQUksSUFBSSxFQUFFLFNBQVMsTUFBTyxJQUFJLEtBQUksRUFBRSxFQUFFLFVBQVUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxhQUFhLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLGVBQWUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLFNBQVMsR0FBRSxJQUFLLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxXQUFXLFdBQVcsRUFBRSxXQUFXLFNBQVMsRUFBRSxLQUFLLE1BQU0sSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLFdBQVcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxNQUFPLEdBQUUsRUFBRSxHQUFHLEtBQWlRLFFBQVMsSUFBRyxHQUFHLE1BQU0sZ0JBQWlCLEtBQUksTUFBTSxHQUFHLFFBQVMsSUFBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLE9BQU0sQ0FBRyxJQUFJLEdBQUUsRUFBRSxHQUFJLE9BQU8sR0FBRSxHQUFHLEdBQUcsTUFBTSxRQUFRLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVMsSUFBRyxFQUFFLElBQUcsSUFBSyxFQUFFLEtBQUssTUFBTSxHQUFHLEdBQWt3TSxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsSUFBSSxHQUFHLElBQUksV0FBVyxXQUFXLEdBQUcsRUFBRSxFQUFFLElBQUksR0FBRyxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsUUFBUyxLQUFJLEdBQUcsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxPQUFPLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLFFBQVEsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsV0FBVyxJQUFJLEVBQUUsU0FBUyxPQUFRLElBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxZQUFZLEVBQUUsZ0JBQWdCLElBQUksRUFBRSxjQUFjLEdBQUksS0FBSSxFQUFFLGVBQWUsSUFBSSxRQUFTLElBQUcsRUFBRSxHQUFHLE1BQU8sR0FBRSxNQUFNLFNBQVMsR0FBRyxPQUFPLEVBQUUsRUFBRSxLQUFLLFFBQVMsSUFBRyxHQUFHLE1BQU0sVUFBVyxHQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUyxJQUFHLEdBQUcsRUFBRSxPQUFPLFdBQVUsRUFBRyxRQUFTLElBQUcsR0FBRyxFQUFFLE9BQU8sWUFBWSxFQUFFLE9BQU8sV0FBVSxFQUFHLEdBQUcsRUFBRSxPQUFPLFVBQVUsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsU0FBUyxZQUFZLGFBQWMsR0FBRSxVQUFVLEdBQUUsR0FBRyxHQUFJLEVBQUUsY0FBYyxHQUFHLFFBQVMsSUFBRyxHQUFHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLEVBQUUsS0FBSyxXQUFXLEVBQUUsR0FBRyxFQUFFLGtCQUFrQixRQUFvMkIsUUFBUyxJQUFHLEdBQUcsR0FBSSxHQUFFLEdBQUcsRUFBRSxnQkFBaUIsT0FBTyxJQUFHLEVBQUUsS0FBSyxRQUFRLFNBQVMsR0FBRyxHQUFHLEVBQUUsV0FBVyxFQUFFLFFBQVMsSUFBRyxHQUFHLEdBQUksTUFBSyxFQUFFLEVBQUUsUUFBUyxLQUFJLEdBQUksS0FBSyxHQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsRUFBRyxJQUFJLEdBQUUsRUFBRSxnQkFBaUIsS0FBSSxHQUFJLEtBQUssR0FBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUcsT0FBTyxHQUFFLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBRyxpQkFBaUIsS0FBSyxFQUFFLEtBQUssTUFBTyxHQUFFLGNBQWMsTUFBTSxFQUFFLGlCQUFpQixZQUFtbkMsUUFBUyxJQUFHLEdBQUcsRUFBRSxJQUFJLFNBQVMsRUFBRSxJQUFJLFVBQVUsRUFBRSxJQUFJLFVBQVUsRUFBRSxJQUFJLFdBQVcsUUFBUyxJQUFHLEdBQUcsRUFBRSxLQUFLLE9BQU8sRUFBRSxJQUFJLHdCQUF3QixRQUFTLElBQUcsR0FBRyxHQUFJLEdBQUUsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLEtBQUssT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxHQUFJLElBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLE9BQU0sQ0FBRyxJQUFJLEdBQUUsRUFBRSxJQUFJLEtBQU0sR0FBRSxVQUFVLEVBQUUsZ0JBQWdCLGFBQWEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixNQUEyNEksUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUcsT0FBTyxHQUFFLFFBQVEsRUFBRSxTQUFTLEdBQUcsTUFBTyxJQUFHLEtBQW9TLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxPQUFPLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFNBQVMsR0FBRyxHQUFHLGVBQWUsT0FBTyxFQUFFLGFBQWEsUUFBUyxJQUFHLEVBQUUsR0FBMFIsUUFBUyxHQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEdBQUcsR0FBRyxJQUFJLEVBQUUsT0FBTyxNQUFNLElBQUksSUFBSSxFQUFFLFVBQVUsR0FBRyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsR0FBa0IsSUFBZixHQUFJLEdBQUUsRUFBRSxPQUFZLEtBQUssQ0FBQyxHQUFHLElBQUksRUFBRSxHQUFHLEtBQUssTUFBTyxHQUFFLEVBQUcsR0FBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLElBQUksR0FBRyxHQUFHLElBQUksRUFBRSxPQUFPLE1BQU0sUUFBUSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsR0FBSSxHQUFFLEVBQUUsWUFBWSxhQUFhLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixHQUFHLEVBQUUsRUFBRSxTQUFTLEtBQUssR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFJLEdBQUUsQ0FBRSxHQUFFLFNBQVMsRUFBRSxTQUFTLE9BQU8sU0FBUyxHQUFHLE9BQU8sRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLE1BQU0sR0FBRSxHQUFJLEdBQUcsRUFBRSxPQUFPLEdBQUUsRUFBSSxLQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLElBQUksR0FBRyxHQUFHLEVBQUUsR0FBRyxRQUFTLEdBQUUsR0FBRyxJQUFJLEVBQUUsSUFBSSxHQUFJLElBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLE9BQU8sS0FBSyxJQUFJLEVBQUUsTUFBTSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsTUFBaDdCLEdBQUcsRUFBRSxNQUFNLEdBQUcsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLGNBQWMsR0FBRyxHQUFHLEVBQUUsUUFBUSxpQkFBaUIsR0FBRyxHQUFHLEVBQUUsUUFBUSxvQkFBb0IsR0FBRyxHQUFHLEVBQUUsUUFBUSxxQkFBcUIsR0FBRyxFQUFFLFVBQVcsSUFBSSxHQUFFLEVBQUUsS0FBSyxHQUFFLElBQUssRUFBRSxtQkFBbUIsRUFBRSxFQUFFLFdBQVcsR0FBRSxFQUFHLEdBQUUsQ0FBa3FCLE9BQU8sVUFBUyxFQUFFLEdBQW1rQyxRQUFTLEdBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLFVBQVUsR0FBMHFCLFFBQVMsR0FBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsQ0FBRSxJQUFHLE1BQU0sSUFBSSxFQUFFLEdBQUcsTUFBTSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLGdCQUFnQixFQUFFLFNBQVUsR0FBRSxDQUFFLElBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFJLEdBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUcsR0FBRSxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLFFBQVEsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBSyxFQUFHLEVBQUUsR0FBRyxNQUFNLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFLLEVBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLElBQXZsRSxJQUFJLEdBQUksR0FBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFJLFFBQU8sa0JBQWtCLEVBQUUsVUFBVSxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEVBQUUsR0FBRyxNQUFPLEdBQUUsRUFBRSxPQUFPLEdBQUcsSUFBSSxhQUFhLElBQUksRUFBRSxFQUFFLFFBQVEsc0JBQXNCLE1BQU0sUUFBUSw0QkFBNEIsT0FBTyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sR0FBRyxJQUFLLElBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBSSxHQUFFLEVBQUUsUUFBUSxJQUFLLElBQUcsSUFBSSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUksR0FBRSxFQUFFLFFBQVEsU0FBVSxJQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUcsV0FBVSxHQUFHLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBSSxHQUFFLEVBQUUsUUFBUSxLQUFNLElBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUcsV0FBVSxHQUFJLEdBQUUsRUFBRSxNQUFNLEdBQUksSUFBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsT0FBUSxVQUFTLEdBQUksR0FBRSxFQUFFLE1BQU0sR0FBSSxJQUFHLEVBQUUsQ0FBQyxHQUFJLEdBQUUsQ0FBRSxHQUFFLEVBQUUsR0FBRyxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRyxVQUFTLEdBQUksR0FBaVcsV0FBYSxHQUFJLEdBQUUsRUFBRSxNQUFNLEdBQUksSUFBRyxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsR0FBRyxRQUFRLEVBQUUsR0FBRyxTQUFTLE1BQU0sRUFBRyxLQUFJLEVBQUUsRUFBRSxHQUFHLFVBQVUsRUFBRSxFQUFFLE1BQU0sT0FBTyxFQUFFLEVBQUUsTUFBTSxLQUFLLEVBQUUsTUFBTSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEtBQUssRUFBRyxJQUFHLEVBQUUsTUFBTyxHQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBbmxCLElBQUcsRUFBRSxFQUFpbEIsU0FBVyxHQUFHLEdBQUksR0FBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLFVBQVcsS0FBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBSSxLQUFJLEdBQUksR0FBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxPQUFPLEVBQUUsR0FBSSxPQUFNLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFLE1BQU0sR0FBRyxTQUFTLEVBQUUsR0FBRyxFQUFFLDRCQUE0QixFQUFFLG9CQUFxQixHQUFFLElBQUksS0FBSyxFQUFFLEdBQUcsTUFBTSxHQUFHLEVBQUUsSUFBSSxJQUFJLEVBQUUsTUFBTSxJQUFJLEVBQUUsY0FBYyxFQUFFLGNBQWMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE9BQXIvQixHQUFHLEdBQUcsRUFBRSxRQUFRLElBQUksRUFBRSxFQUFHLFdBQVUsR0FBSSxPQUFFLEdBQU8sTUFBRSxHQUFPLE1BQUUsRUFBTyxJQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sS0FBSyxHQUFHLEtBQUssSUFBSSxHQUFHLEtBQUssSUFBSSxHQUFHLEtBQUssSUFBSSxHQUFHLEtBQUssS0FBSyxFQUFFLEVBQUUsUUFBUSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRyxHQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxPQUFPLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUcsUUFBa2lDLEtBQUssR0FBRyxLQUFLLEdBQUcsV0FBVyxFQUFFLFdBQVcsV0FBVyxFQUFFLFdBQVcsaUJBQWlCLEVBQUUsaUJBQWlCLHFCQUFxQixFQUFFLHFCQUFxQiw0QkFBNEIsRUFBRSw0QkFBNEIsa0JBQWtCLEVBQUUsU0FBUyxrQkFBa0IsRUFBRSxrQkFBa0IsTUFBTSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFHLElBQUcsUUFBUSxJQUFJLEVBQUUsU0FBUyxHQUFHLElBQUksR0FBSSxNQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssUUFBUSxHQUFHLElBQUksRUFBRSxLQUFLLElBQUksTUFBTyxJQUFHLEdBQUksSUFBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRyxLQUFJLEVBQUUsR0FBRyxHQUFHLFdBQVcsRUFBRSxHQUFHLE1BQU0sV0FBVyxFQUFFLEtBQUssRUFBRSxTQUFTLE1BQU0sb0JBQW9CLEVBQUUsU0FBUyxPQUFPLE9BQU8sRUFBRSxXQUFVLEVBQUksS0FBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFFLEtBQUssU0FBUyxHQUFHLE1BQU0sR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFJLElBQUssR0FBRyxFQUFFLE1BQU0sR0FBRSxJQUFLLEdBQUcsRUFBRSxPQUFPLEdBQUUsR0FBSSxFQUFFLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxNQUFPLElBQUcsRUFBRSxJQUFJLEdBQUksR0FBRSxFQUFFLE1BQU0sR0FBSSxPQUFNLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxLQUFLLEVBQUUsR0FBRyxLQUFLLE1BQU0sS0FBSyxVQUFVLEVBQUUsR0FBRyxRQUFRLE1BQU0sRUFBRSxHQUFHLFFBQVEsRUFBRSxHQUFHLE1BQU0sRUFBRSxHQUFHLE1BQU0sRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLFNBQVUsR0FBRSxNQUFNLEVBQUUsT0FBTSxJQUFLLEdBQUcsRUFBRSxZQUFZLEdBQUcsR0FBRyxTQUFTLEdBQUcsR0FBSSxHQUFFLEdBQUcsRUFBRSxPQUFRLElBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDLE1BQU0sR0FBRyxFQUFFLFlBQVksRUFBRSxNQUFLLEVBQUksSUFBSSxHQUFFLEdBQUcsRUFBRSxZQUFhLEtBQUksRUFBRSxPQUFPLEtBQUssR0FBRyxTQUFTLEdBQUcsTUFBTSxHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQUssSUFBSyxJQUFJLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssS0FBSyxJQUFJLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUcsR0FBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsSUFBSSxNQUFNLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBRyxLQUFLLEdBQUcsYUFBYSxFQUFFLEtBQUssRUFBRSxTQUFTLGNBQWMsR0FBRyxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVksRUFBRSxHQUFHLEVBQUUsT0FBTyxZQUFZLEVBQUUsR0FBRyxLQUFLLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsT0FBTyxFQUFFLGFBQWEsR0FBRyxHQUFHLEtBQUssR0FBRyxHQUFHLElBQUksRUFBRSxJQUFJLEdBQUcsTUFBRyxHQUFHLGFBQWEsSUFBSSxFQUFFLEVBQUUsUUFBUSxHQUFHLE9BQU8sR0FBRyxNQUFNLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRyxJQUFHLEVBQUUsS0FBSyxHQUFHLENBQUMsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEtBQUssS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEtBQUssVUFBVSxJQUFLLElBQUksR0FBRSxHQUFHLEVBQUUsR0FBRyxPQUFRLEdBQUUsS0FBSyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxNQUFPLEdBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxJQUFJLEVBQUUsS0FBSyxLQUFLLFVBQVUsTUFBTSxXQUFXLEVBQUUsS0FBSyxLQUFLLE9BQU8sS0FBSyxFQUFFLEtBQUssR0FBRyxLQUFLLEVBQUUsV0FBVyxFQUFFLFdBQVcsT0FBTyxFQUFFLE9BQU8sS0FBSyxHQUFHLE1BQU0sR0FBRyxFQUFFLFFBQVEsTUFBTSxFQUFFLEVBQUUsT0FBTyxHQUFHLE9BQU8sR0FBRyxLQUFLLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLE1BQUssUUFBUSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUksSUFBRyxLQUFLLEVBQUUsS0FBSyxFQUFFLFdBQVUsRUFBSSxHQUFFLFNBQVMsS0FBSyxPQUFPLEVBQUUsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxVQUFVLE9BQU8sU0FBUyxHQUFHLEdBQUksR0FBRSxHQUFHLEVBQUUsTUFBTyxLQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxTQUFTLEdBQVcsSUFBUixHQUFJLEdBQUUsRUFBTyxHQUFHLENBQUMsT0FBRyxLQUFTLEVBQUUsSUFBSSxPQUFNLENBQUcsR0FBRSxFQUFFLE9BQU8sT0FBTSxHQUFJLEtBQUssR0FBRyxTQUFTLEdBQUcsR0FBSSxFQUFFLGNBQWEsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxVQUFVLEdBQUcsR0FBRyxFQUFFLGdCQUFnQixFQUFFLEdBQUcsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUcsSUFBSSxHQUFFLEdBQUcsRUFBRSxPQUE0USxJQUFwUSxJQUFJLEVBQUUsV0FBVyxPQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUscUJBQXFCLEVBQUUsU0FBUyxXQUFXLEVBQUUsU0FBUyxnQkFBZ0IsYUFBYSxFQUFFLEtBQUssRUFBRSxXQUFXLEdBQUcsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTyxHQUFFLFlBQVksSUFBSSxJQUFJLEVBQUUsWUFBWSxVQUFVLElBQUksRUFBRSxZQUFZLElBQUksRUFBRSxVQUFhLGFBQWEsRUFBRSxJQUFJLENBQUMsR0FBSSxHQUFFLEdBQUcsRUFBRSxHQUFJLElBQUcsRUFBRSxDQUFDLEdBQUksR0FBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLE9BQVEsR0FBRSxXQUFXLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxFQUFFLFVBQVUsRUFBRSxPQUFPLFFBQVEsQ0FBQyxHQUFJLEdBQUUsR0FBRyxFQUFFLEdBQUksSUFBRyxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxHQUFHLGNBQWMsRUFBRyxHQUFFLFdBQVcsRUFBRSxFQUFFLGtCQUFrQixFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsT0FBTyxTQUFTLEdBQUcsSUFBSSxFQUFFLFVBQVUsTUFBTyxHQUFFLE9BQU8sR0FBRSxJQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFNLEtBQU0sR0FBRyxTQUFTLEdBQUcsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEdBQUcsRUFBRSxVQUFVLEdBQUcsU0FBUyxHQUFHLEdBQUksSUFBRyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsVUFBVSxHQUFHLE1BQU0sR0FBRyxFQUFFLHFCQUFxQixFQUFFLGdCQUFlLElBQUssRUFBRyxLQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUUsT0FBTyxVQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVUsS0FBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxFQUFFLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxHQUFHLEVBQUUsYUFBWSxHQUFJLEVBQUUsR0FBRyxFQUFFLFFBQVEsR0FBRyxRQUFRLEVBQUUsRUFBRSxRQUFRLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsUUFBUSxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLEtBQUssTUFBTSxFQUFFLEVBQUUsTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLE9BQU8sR0FBRyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFFBQVEsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLE1BQUssRUFBRyxFQUFFLEVBQUUsSUFBRyxJQUFLLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQUssRUFBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQUssRUFBRyxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsT0FBTyxFQUFFLFdBQVcsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEtBQUssR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQVEsSUFBRyxHQUFHLEtBQUssR0FBRyxFQUFFLEVBQUUsUUFBUSxHQUFHLEtBQUssRUFBRSxHQUFHLEtBQUssTUFBTSxFQUFFLEVBQUUsTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFFLEVBQUcsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLEdBQUksSUFBRyxFQUFFLEVBQUUsUUFBUSxHQUFHLEtBQUssTUFBTSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUcsSUFBRSxFQUFHLElBQUksRUFBRSxFQUFFLE1BQU0sSUFBSSxFQUFFLE9BQU8sSUFBSSxHQUFHLEtBQUssS0FBSyxFQUFFLEVBQUUsTUFBTSxHQUFHLEdBQUcsR0FBRSxJQUFLLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsS0FBSyxVQUFVLEdBQUcsRUFBRSxLQUFLLEVBQUUsV0FBVyxVQUFVLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEtBQUssSUFBSSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxHQUFHLEVBQUUsUUFBUyxJQUFHLEdBQUcsR0FBSSxFQUFFLElBQUcsRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLEdBQUksR0FBRSxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUUsTUFBTSxHQUFJLElBQUksRUFBSixDQUFhLEdBQUksS0FBSyxHQUFFLElBQUksRUFBRSxHQUFHLE1BQU8sSUFBSSxHQUFFLEVBQUUsR0FBRyxPQUFPLFFBQVEsR0FBRyxJQUFJLEVBQUUsRUFBRSxNQUFNLEdBQTBHLE9BQXRHLElBQUcsRUFBRSxNQUFNLEVBQUUsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEdBQUcsU0FBUyxFQUFFLE1BQU0sRUFBUyxJQUFHLEVBQUcsSUFBRyxFQUFFLEVBQUUsSUFBSSxRQUFTLElBQUcsRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLGFBQWEsS0FBSyxHQUFHLFFBQVMsSUFBRyxHQUFHLEdBQUksR0FBRSxFQUFFLEtBQUssUUFBUSxHQUFHLEdBQUksT0FBTyxJQUFHLE1BQU0sRUFBRSxLQUFLLEtBQUssRUFBRSxXQUFXLEdBQUcsS0FBSyxJQUFJLEtBQUssRUFBRSxNQUFNLEdBQUcsR0FBRyxTQUFRLElBQUssS0FBSyxJQUFJLEVBQUUsSUFBSSxTQUFRLEdBQUksUUFBUyxJQUFHLEdBQUcsR0FBSSxHQUFFLEVBQUUsTUFBTSxHQUFJLElBQUcsRUFBRSxDQUFDLEdBQUksS0FBSyxPQUFPLEdBQUUsUUFBUSxTQUFTLEdBQUcsRUFBRSxFQUFFLE1BQU0sS0FBSSxJQUFLLEdBQUcsUUFBUyxJQUFHLEdBQUcsSUFBSSxHQUFJLE1BQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLE1BQU0sRUFBRSxHQUFHLEtBQU0sT0FBTyxHQUFxQyxRQUFTLElBQUcsR0FBRyxNQUFPLElBQUcsRUFBRSxJQUFJLEVBQUUsVUFBVSxRQUFRLEVBQUUsUUFBOHlGLFFBQVMsSUFBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsRUFBRSxZQUFZLElBQUksR0FBRyxFQUFFLGVBQWUsRUFBRSxRQUFTLEdBQUUsR0FBK1EsR0FBNVEsRUFBRSxPQUFPLFNBQVMsR0FBRyxNQUFHLEtBQUksRUFBRSxPQUFpQixJQUFJLEVBQUUsU0FBdUIsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxPQUFPLEdBQUcsRUFBRSxNQUFNLFNBQVMsR0FBRyxLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsY0FBYyxFQUFFLEVBQUUsUUFBUSxJQUFJLE9BQU0sQ0FBRyxJQUFHLEVBQUUsSUFBSSxPQUFNLEVBQUcsT0FBTSxHQUFJLEtBQUssT0FBTyxLQUFLLEdBQUcsTUFBTSxRQUFPLEdBQU0sSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEdBQUcsRUFBRSxNQUFNLFNBQVMsRUFBRSxLQUFLLE1BQU0sRUFBRSxTQUFTLG1CQUFtQixNQUFPLEtBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLFNBQVMsRUFBRyxHQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsUUFBTyxHQUFJLEdBQUcsRUFBRSxhQUFhLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLGFBQWEsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLGFBQWEsR0FBRyxLQUFNLEdBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxRQUFPLE1BQU8sR0FBRyxRQUFTLEdBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxZQUFZLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxTQUFTLElBQUksRUFBRSxTQUFTLFFBQVEsSUFBSSxFQUFFLFNBQVMsR0FBRyxNQUFNLFlBQVksRUFBRSxZQUFXLEVBQUksSUFBRyxFQUFFLFlBQVcsRUFBRyxFQUFFLFNBQVMsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEdBQUcsS0FBSyxFQUFFLElBQUssSUFBRyxFQUFFLGFBQWEsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsYUFBYSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxhQUFhLEdBQUcsTUFBTSxLQUFLLEdBQUUsSUFBcTVCLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsWUFBWSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUcsS0FBSSxHQUFJLEtBQUssR0FBRSxDQUFDLEdBQUksR0FBRSxHQUFHLEVBQUUsR0FBSSxHQUFFLElBQUksRUFBRSxHQUFHLFFBQVEsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLE1BQU8sR0FBRSxJQUFJLEVBQUUsTUFBTSxHQUFHLEdBQUcsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsRUFBRSxRQUFTLElBQUcsR0FBRyxJQUFJLEVBQUUsTUFBTSxjQUFlLElBQUcsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLEVBQUUsSUFBSSxTQUFTLEdBQUcsTUFBTyxJQUFHLEtBQUssS0FBSyxLQUFLLEdBQUksSUFBSSxHQUFFLEdBQUcsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxPQUFPLEVBQUUsR0FBRyxLQUFLLEVBQUUsTUFBTSxRQUFRLEdBQUcsSUFBSyxJQUFHLEVBQUUsVUFBVSxDQUFDLEdBQUksR0FBRSxHQUFHLEVBQUUsR0FBRyxJQUFLLEtBQUksR0FBSSxLQUFLLEdBQUUsVUFBVSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksRUFBRSxLQUFLLE9BQVEsSUFBRyxVQUFVLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxTQUFVLElBQUcsSUFBSSxPQUFPLFFBQVEsTUFBTSxRQUFRLE9BQU8sU0FBUyxHQUFHLE9BQU8sRUFBRSxLQUFLLElBQUksU0FBUyxHQUFHLE1BQU0sVUFBVSxFQUFFLFFBQVEsS0FBSyxXQUFZLEdBQUUsS0FBSyxFQUFHLE9BQU8sR0FBRSxTQUFTLEdBQUcsU0FBUyxHQUFHLE1BQU0sbUNBQW1DLEVBQUUsSUFBSSxJQUFJLEtBQUssTUFBTSxpQkFBaUIsSUFBSSxJQUFJLEdBQUcsR0FBRyxvQkFBb0IsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxPQUFPLElBQUksTUFBTyxJQUFHLEVBQUUsRUFBRSxNQUFNLHFCQUFxQixFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxJQUFJLFFBQVMsSUFBRyxHQUFHLEdBQUksR0FBRSxTQUFTLEVBQUUsR0FBSSxJQUFHLEVBQUUsTUFBTSxvQkFBb0IsQ0FBRSxJQUFJLEdBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFHLE9BQU0scUJBQXFCLEtBQUssVUFBVSxHQUFHLElBQUksS0FBSyxVQUFVLEdBQUcsZUFBZSxLQUFLLFVBQVUsR0FBRyxJQUFvbEIsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsR0FBSSxJQUFHLEVBQUcsUUFBTyxPQUFPLHNCQUFzQixFQUFFLEdBQUcsRUFBRSxHQUFHLGFBQWEsSUFBSSxnQkFBZ0IsRUFBRSxpQkFBaUIsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixNQUFPLElBQUcsRUFBRSxFQUFHLElBQUcsRUFBRSxPQUFPLEVBQUUsY0FBYyxNQUFPLElBQUcsRUFBRSxFQUFHLElBQUcsRUFBRSxNQUFNLEVBQUUsYUFBYSxNQUFPLElBQUcsRUFBRSxFQUFHLElBQUcsRUFBRSxLQUFLLEVBQUUsWUFBWSxNQUFPLElBQUcsRUFBRSxFQUFHLElBQUcsYUFBYSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLEdBQUcsU0FBUyxFQUFFLElBQUksTUFBTyxVQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxVQUFVLFlBQVksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsYUFBYSxJQUFJLEVBQUUsV0FBVyxPQUFPLEVBQUUsa0JBQWtCLElBQUksU0FBUyxHQUFHLE9BQU8sS0FBSyxFQUFFLEVBQUUsTUFBTSxNQUFNLEVBQUUsTUFBTSxRQUFRLEVBQUUsWUFBWSxLQUFLLEVBQUUsRUFBRSxTQUFTLFNBQTZFLFFBQWxFLElBQUksR0FBRyxJQUFJLEdBQUcsU0FBUyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLEdBQUcsU0FBUyxJQUFJLEdBQVUsRUFBRSxLQUFLLEVBQUUsRUFBRyxJQUFJLEVBQUUsSUFBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLGVBQWUsS0FBSyxHQUFHLEVBQUUsR0FBRSxFQUFJLE9BQU0sTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxHQUFJLEtBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLGVBQWUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFJLElBQUksR0FBRSxFQUFFLGVBQWUsS0FBSyxHQUFHLEVBQUUsR0FBRSxFQUFJLEdBQUUsT0FBTyxFQUFFLElBQUksS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLE9BQU8sSUFBSSxFQUFFLEVBQUUsV0FBVyxHQUFHLEVBQUUsRUFBRyxPQUFPLEdBQUUsTUFBTyxJQUFHLEVBQUUsSUFBSSxTQUFTLFFBQVMsSUFBRyxFQUFFLEdBQUcsRUFBRSxpQkFBZ0IsQ0FBRyxJQUFJLEdBQUUsRUFBRSxHQUFJLE9BQU8sR0FBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsS0FBSyxxQkFBcUIsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLE9BQU8sSUFBSSxFQUFFLFlBQVksUUFBUSxJQUFJLElBQUksUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsZUFBYyxFQUFHLEVBQUUsS0FBSyxFQUFFLFlBQVksTUFBTyxJQUFHLEVBQUUsRUFBRyxJQUFHLEVBQUUsWUFBWSxDQUFDLElBQUksR0FBSSxHQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUksT0FBTSxFQUFFLEVBQUUsT0FBTyxNQUFPLEdBQUUsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsU0FBUyxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxNQUFPLElBQUcsRUFBRSxHQUFHLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxhQUFZLEVBQUcsUUFBUyxHQUFFLEVBQUUsRUFBRSxFQUFFLEdBQXFILFFBQVMsR0FBRSxHQUFHLE1BQU8sR0FBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQXBLLElBQUksRUFBRSxPQUFPLE1BQU8sSUFBRyxNQUFPLElBQUksR0FBRSxFQUFFLE9BQVEsT0FBTyxHQUFFLElBQUksSUFBSSxFQUFFLElBQUksS0FBSyxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxRQUE4RCxFQUFFLGFBQWEsUUFBUSxFQUFFLEVBQUUsR0FBRyxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxVQUFVLElBQUksRUFBRSxVQUFVLEdBQUcsRUFBRSxFQUFFLFVBQVUsSUFBSSxFQUFFLFVBQVUsRUFBRyxPQUFPLEdBQUUsY0FBYSxHQUFJLEdBQUcsTUFBTSxLQUFLLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxhQUFhLEdBQUcsSUFBSSxFQUFFLEdBQUcsS0FBSyxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsVUFBVyxJQUFJLEVBQUosQ0FBYSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxlQUFlLEdBQUUsQ0FBRyxLQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLEdBQUUsQ0FBRyxJQUFJLEdBQUUsRUFBRSxXQUFXLEVBQUUsS0FBTSxLQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksR0FBRSxFQUFHLEdBQUcsVUFBVSxFQUFFLEtBQUssY0FBYyxFQUFFLFFBQVEsS0FBSyxFQUFFLE1BQU0sV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLEtBQUssVUFBVSxFQUFFLE9BQU8sS0FBSyxFQUFFLElBQUksU0FBUyxFQUFFLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxJQUFJLEtBQUssS0FBSyxFQUFFLFVBQVUsY0FBYyxLQUFLLFVBQVUsRUFBRSxXQUFXLElBQUksTUFBTSxNQUFHLEdBQVMsRUFBRSxNQUFNLEdBQUcsR0FBRyxRQUExQixLQUErQixFQUFFLEVBQUcsS0FBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sR0FBRyxPQUFPLEVBQUUsSUFBSSxLQUFLLEVBQUUsTUFBTSxHQUFHLE9BQU8sRUFBRSxJQUFJLEtBQUssRUFBRSxXQUFXLEdBQUcsa0JBQWtCLEVBQUUsTUFBTSxHQUFHLGFBQWEsRUFBRSxZQUFZLEdBQUcsUUFBUSxFQUFFLElBQUksS0FBTSxLQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLE9BQU8sSUFBSSxHQUFHLEVBQUUsV0FBVyxHQUFHLEVBQUcsSUFBRyxFQUFFLFFBQVEsR0FBRyxTQUFTLEdBQUcsRUFBRSxPQUFPLEtBQUssRUFBRSxRQUFRLEdBQUcsWUFBWSxHQUFHLEVBQUUsT0FBTyxLQUFLLEVBQUUsU0FBUyxHQUFHLEdBQUcsRUFBRSxRQUFPLEdBQUksS0FBSyxFQUFFLGVBQWUsR0FBRyxHQUFHLEVBQUUsY0FBYSxHQUFJLEtBQUssRUFBRSxhQUFhLEVBQUUsWUFBWSxHQUFHLFFBQVEsRUFBRSxXQUFXLEtBQUssRUFBRSxjQUFjLEdBQUcsU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxLQUFLLE9BQU8sS0FBSyxHQUFHLEtBQUssU0FBUyxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUcsT0FBTyxHQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsRUFBRyxLQUFJLEVBQUUsSUFBSSxHQUFJLEdBQUUsRUFBRSxPQUFPLEdBQUcsQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLFlBQVksSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFFLENBQUcsT0FBTSxFQUFFLEtBQUssR0FBRSxHQUFJLEVBQUUsRUFBRSxPQUFPLEdBQUksR0FBRSxPQUFPLEtBQUssR0FBRyxJQUFJLFNBQVMsR0FBRyxNQUFPLElBQUcsRUFBRSxHQUFHLEtBQUssS0FBSyxJQUFLLE9BQU0sbUJBQW1CLEVBQUUsS0FBSyxFQUFFLGFBQWEsTUFBTSxHQUFHLEVBQUUsZUFBZSxTQUFTLEdBQXlCLElBQXRCLEdBQUksR0FBRSxLQUFLLEVBQUUsRUFBRSxPQUFZLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxhQUFhLEVBQUcsT0FBTyxLQUFJLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxFQUFFLFlBQVksR0FBRyxLQUFLLEVBQUUsUUFBUSxHQUFHLGdCQUFnQixFQUFFLE1BQU0sTUFBTSxhQUFhLEVBQUUsTUFBTSxTQUFTLGVBQWUsRUFBRSxNQUFNLFdBQVcsTUFBTSxFQUFFLGVBQWUsQ0FBQyxHQUFJLEdBQUUsU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsU0FBUyxFQUFHLElBQUcsR0FBRyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUksR0FBRSxHQUFHLEVBQUUsRUFBRSxRQUFTLE9BQU0scUNBQXFDLEVBQUUsT0FBTyxzQkFBc0IsRUFBRSxnQkFBZ0IsSUFBSSxTQUFTLEdBQUcsTUFBTSxjQUFjLEVBQUUsTUFBTSxLQUFLLEtBQUssT0FBTyxFQUFFLEVBQUcsS0FBSSxHQUFHLEVBQUUsS0FBSyxNQUFPLEdBQUUsRUFBRSxRQUFRLEtBQUssSUFBSSxJQUFJLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxLQUFLLEdBQUcsRUFBRSxjQUFjLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxTQUFTLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLGNBQWMsSUFBSSxFQUFFLFFBQVMsSUFBRyxHQUFHLE1BQU8sS0FBSSxFQUFFLE9BQU8sU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEtBQUssS0FBSyxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLFNBQVMsYUFBYyxJQUFHLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFPLElBQUcsRUFBRSxFQUFFLEdBQUcsT0FBUSxJQUFHLEVBQUUsTUFBTSxFQUFFLGFBQWEsTUFBTyxJQUFHLEVBQUUsRUFBRSxHQUFJLElBQUksR0FBRSxFQUFFLFlBQVksR0FBRyxHQUFHLE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGFBQWEsYUFBYSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxHQUFHLEVBQUUsSUFBSSxhQUFhLGFBQWEsR0FBRyxFQUFFLElBQUksWUFBWSxHQUFHLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLGFBQWMsT0FBTSxTQUFTLEVBQUUsWUFBWSxhQUFhLE9BQU8sRUFBRSxFQUFFLElBQUksUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxRQUFTLElBQUcsRUFBRSxPQUFPLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxhQUFhLEVBQUUsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsZUFBZSxHQUFHLEtBQUssS0FBSyxFQUFHLE9BQU0sSUFBSSxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBSSxHQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsSUFBRyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsY0FBYyxFQUFFLGFBQWEsS0FBSyxTQUFTLEdBQUcsTUFBTyxJQUFHLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBRSxRQUFPLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxhQUFhLEtBQUssU0FBUyxHQUFHLE1BQU8sR0FBRSxFQUFFLFlBQVksRUFBRSxJQUFJLE1BQU8sSUFBRyxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLEVBQUcsT0FBTSxJQUFJLEVBQUUsSUFBSSxTQUFTLEdBQUcsTUFBTyxHQUFFLEVBQUUsS0FBSyxLQUFLLEtBQUssS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLFFBQVMsSUFBRyxHQUFHLFdBQU8sS0FBUyxFQUFFLEtBQUssYUFBYSxFQUFFLEtBQUssU0FBUyxFQUFFLElBQUksUUFBUyxJQUFHLEVBQUUsR0FBRyxNQUFPLEtBQUksRUFBRSxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEVBQUUsTUFBTSxLQUFLLFVBQVUsRUFBRSxNQUFNLEtBQUssT0FBTyxLQUFLLEVBQUUsR0FBRyxLQUFLLEVBQUUsV0FBVyxHQUFHLEtBQUssVUFBVSxFQUFFLFFBQVEsR0FBSSxJQUFJLEdBQUUsRUFBRSxRQUFTLElBQUcsR0FBRyxJQUFJLEdBQUksR0FBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTyxHQUFFLFFBQVEsR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLElBQUksR0FBRyxJQUFJLEVBQUUsS0FBSyxLQUFLLEVB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RUFBRSxHQUFHLEdBQUcsRUFBRSxRQUFRLFdBQVcsR0FBRyx1QkFBdUIsS0FBSyxJQUFJLFFBQVEsR0FBRyxHQUFHLEdBQUcsY0FBYyxLQUFLLEdBQUcsR0FBRyxZQUFZLEtBQUssR0FBRyxHQUFHLEVBQUUsTUFBTSxtQkFBbUIsS0FBSyxNQUFNLEdBQUUsQ0FBRyxJQUFHLEVBQUUsSUFBSSxHQUFJLE1BQU0sUUFBTyxlQUFlLEdBQUcsV0FBVyxJQUFJLFdBQVcsR0FBRSxLQUFNLE9BQU8saUJBQWlCLGVBQWUsS0FBSyxJQUFJLE1BQU0sSUFBSSxHQUFJLElBQUcsV0FBVyxXQUFPLEtBQVMsSUFBSSxHQUFHLElBQUksR0FBRyxtQkFBb0IsU0FBUyxPQUFPLFNBQVMsV0FBVyxPQUFPLFFBQVEsSUFBSSxTQUFVLEdBQUcsR0FBRyxHQUFHLE9BQU8sNkJBQTZHLEdBQUcsR0FBRyxtQkFBb0IsU0FBUSxHQUFHLFNBQVMsbUJBQW9CLFVBQVMsR0FBRyxRQUFRLFFBQVMsSUFBRyxtQkFBb0IsTUFBSyxHQUFHLEtBQUssSUFBSSxXQUFXLFFBQVMsS0FBSSxLQUFLLElBQUksT0FBTyxPQUFPLE1BQU0sTUFBTyxHQUFFLFVBQVUsSUFBSSxTQUFTLEdBQUcsT0FBTSxJQUFLLEtBQUssSUFBSSxJQUFJLEVBQUUsVUFBVSxJQUFJLFNBQVMsR0FBRyxLQUFLLElBQUksSUFBRyxHQUFJLEVBQUUsVUFBVSxNQUFNLFdBQVcsS0FBSyxJQUFJLE9BQU8sT0FBTyxPQUFPLElBQUssSUFBSSxJQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsV0FBVyxLQUFLLEdBQUcsS0FBSyxLQUFLLFFBQVMsSUFBRyxVQUFVLE9BQU8sU0FBUyxHQUFHLEtBQUssS0FBSyxLQUFLLElBQUksR0FBRyxVQUFVLFVBQVUsU0FBUyxHQUFHLEVBQUUsS0FBSyxLQUFLLElBQUksR0FBRyxVQUFVLE9BQU8sV0FBVyxHQUFHLFFBQVEsR0FBRyxPQUFPLE9BQU8sT0FBTyxHQUFHLFVBQVUsT0FBTyxXQUFXLElBQUksR0FBSSxHQUFFLEtBQUssS0FBSyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsVUFBVSxHQUFHLE9BQU8sSUFBSyxJQUFJLE9BQWlHLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsS0FBSyxJQUFJLEVBQUUsS0FBSyxLQUFLLEVBQUUsS0FBSyxTQUFTLEVBQUUsS0FBSyxLQUFLLEVBQUUsS0FBSyxJQUFJLEVBQUUsS0FBSyxPQUFHLEdBQU8sS0FBSyxRQUFRLEVBQUUsS0FBSyxjQUFVLEdBQU8sS0FBSyxjQUFVLEdBQU8sS0FBSyxjQUFVLEdBQU8sS0FBSyxJQUFJLEdBQUcsRUFBRSxJQUFJLEtBQUssaUJBQWlCLEVBQUUsS0FBSyxzQkFBa0IsR0FBTyxLQUFLLFdBQU8sR0FBTyxLQUFLLEtBQUksRUFBRyxLQUFLLFVBQVMsRUFBRyxLQUFLLGNBQWEsRUFBRyxLQUFLLFdBQVUsRUFBRyxLQUFLLFVBQVMsRUFBRyxLQUFLLFFBQU8sRUFBRyxLQUFLLGFBQWEsRUFBRSxLQUFLLGNBQVUsR0FBTyxLQUFLLG9CQUFtQixHQUFJLElBQUksT0FBTyxjQUFhLEdBQUssSUFBRyxNQUFNLElBQUksV0FBVyxNQUFPLE1BQUssbUJBQW1CLE9BQU8saUJBQWlCLEdBQUcsVUFBVSxHQUFJLElBQUksSUFBRyxTQUFTLE9BQUcsS0FBUyxJQUFJLEVBQUUsR0FBSSxJQUFJLEdBQUUsR0FBSSxHQUFHLE9BQU8sR0FBRSxLQUFLLEVBQUUsRUFBRSxXQUFVLEVBQUcsR0FBaVksR0FBRyxNQUFNLFVBQVUsR0FBRyxPQUFPLE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxVQUFVLFNBQVMsT0FBTyxXQUFXLFFBQVEsU0FBUyxHQUFHLEdBQUksR0FBRSxHQUFHLEVBQUcsR0FBRSxHQUFHLEVBQUUsV0FBVyxJQUFJLEdBQUksTUFBSyxFQUFFLFVBQVUsT0FBTyxLQUFLLEVBQUUsR0FBRyxVQUFVLEVBQUcsSUFBSSxHQUFFLEVBQUUsRUFBRSxNQUFNLEtBQUssR0FBRyxFQUFFLEtBQUssTUFBTyxRQUFPLEdBQUcsSUFBSSxPQUFPLElBQUksVUFBVSxFQUFFLENBQUUsTUFBTSxLQUFJLFNBQVMsRUFBRSxFQUFFLE1BQU0sR0FBRyxNQUFPLElBQUcsRUFBRSxhQUFhLEdBQUcsRUFBRSxJQUFJLFNBQVMsS0FBTSxJQUFJLElBQUcsT0FBTyxvQkFBb0IsSUFBSSxJQUFHLEVBQTJCLEdBQUcsU0FBUyxHQUFHLEdBQUksRUFBRSxNQUFLLE1BQU0sRUFBRSxLQUFLLElBQUksR0FBSSxJQUFHLEtBQUssUUFBUSxFQUFFLEVBQUUsRUFBRSxTQUFTLE1BQU0sTUFBTSxRQUFRLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxVQUFVLEdBQUcsU0FBUyxFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxHQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksS0FBSyxhQUFhLElBQUksS0FBSyxLQUFLLEdBQWlxQyxJQUFHLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFJLEdBQUUsT0FBTyxLQUFLLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksR0FBRyxFQUFFLEVBQUUsS0FBSyxHQUFHLFVBQVUsYUFBYSxTQUFTLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsSUFBSyxJQUFJLElBQUcsRUFBRSxxQkFBNnJCLElBQUcsS0FBSyxTQUFTLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsa0JBQW1CLEdBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsU0FBUyxHQUFHLEdBQUcsR0FBRyxLQUFLLEVBQUUsUUFBUSxTQUFTLEdBQUcsR0FBRyxFQUFFLEtBQUssS0FBSyxHQUFHLE1BQU0sU0FBUyxFQUFFLEVBQUUsRUFBRSxHQUFHLEdB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RyxVQUFVLElBQUksV0FBVyxHQUFJLEVBQUUsSUFBRyxLQUFNLElBQUksR0FBRSxLQUFLLEVBQUcsS0FBSSxFQUFFLEtBQUssT0FBTyxLQUFLLEVBQUUsR0FBRyxNQUFNLEdBQUcsSUFBSSxLQUFLLEtBQUssS0FBTSxFQUFFLElBQUcsRUFBRSxFQUFFLHVCQUF1QixLQUFLLFdBQVcsS0FBSyxRQUFRLEtBQUssTUFBTSxHQUFHLEdBQUcsS0FBSyxLQUFLLGNBQWMsTUFBTyxJQUFHLEdBQUcsVUFBVSxPQUFPLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFHLE1BQUssVUFBVSxJQUFJLEtBQUssS0FBSyxVQUFVLElBQUksR0FBRyxLQUFLLFFBQVEsS0FBSyxHQUFHLEtBQUssT0FBTyxJQUFJLElBQUksRUFBRSxPQUFPLFFBQVEsR0FBRyxVQUFVLFlBQVksV0FBVyxJQUFJLEdBQUksR0FBRSxLQUFLLEtBQUssT0FBTyxLQUFLLENBQUMsR0FBSSxHQUFFLEtBQUssS0FBSyxFQUFHLE1BQUssVUFBVSxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsTUFBTSxHQUFJLEdBQUUsS0FBSyxNQUFPLE1BQUssT0FBTyxLQUFLLFVBQVUsS0FBSyxVQUFVLEVBQUUsS0FBSyxVQUFVLFFBQVEsRUFBRSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssUUFBUSxLQUFLLFFBQVEsRUFBRSxLQUFLLFFBQVEsT0FBTyxHQUFHLEdBQUcsVUFBVSxPQUFPLFdBQVcsS0FBSyxLQUFLLEtBQUssT0FBTSxFQUFHLEtBQUssS0FBSyxLQUFLLE1BQU0sU0FBUyxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUcsSUFBRyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFHLEVBQUcsR0FBRyxDQUFDLElBQUksR0FBSSxHQUFFLEdBQUcsT0FBTyxFQUFFLEVBQUUsSUFBSSxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksR0FBSSxJQUFHLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBUSxJQUFHLEtBQUssRUFBRyxNQUFLLElBQUcsRUFBRyxH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RSxHQUFFLEdBQUssSUFBSSxHQUFFLEdBQUcsRUFBRSxJQUFLLElBQUcsRUFBRSxTQUFTLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBSyxHQUFJLEdBQUcsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsTUFBSyxJQUFLLEdBQUcsR0FBRyxFQUFFLGdCQUFnQixTQUFTLEdBQUcsR0FBSSxHQUFFLEdBQUcsRUFBRSxTQUFTLE9BQU8sRUFBRyxLQUFJLElBQUcsR0FBSSxPQUFPLEtBQUssR0FBRyxRQUFRLFNBQVMsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sSUFBRyxLQUFNLEdBQUcsR0FBRyxHQUFHLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxTQUFTLE9BQVEsS0FBSSxFQUFFLFVBQVUsa0JBQW1CLEdBQUUsRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsTUFBTSxJQUFJLFNBQVMsR0FBRyxHQUFJLElBQUcsSUFBSSxXQUFXLE1BQU8sTUFBSyxRQUFRLEdBQUcsSUFBSSxXQUFXLE1BQU8sTUFBSyxRQUFTLFFBQU8sZUFBZSxFQUFFLFVBQVUsUUFBUSxHQUFHLE9BQU8sZUFBZSxFQUFFLFVBQVUsU0FBUyxHQUFHLEVBQUUsVUFBVSxLQUFLLEdBQUcsRUFBRSxVQUFVLFFBQVEsR0FBRyxFQUFFLFVBQVUsT0FBTyxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLE1BQU8sSUFBRyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxNQUFLLENBQUcsSUFBSSxHQUFFLEdBQUksSUFBRyxLQUFLLEVBQUUsRUFBRSxFQUFHLElBQUcsRUFBRSxVQUFVLElBQUksRUFBRSxLQUFLLEtBQUssRUFBRSxPQUFPLE1BQU0sR0FBRyxHQUFHLEVBQUUsS0FBSyxtQ0FBbUMsRUFBRSxXQUFXLEtBQUssTUFBTyxZQUFXLEVBQUUsY0FBYyxJQUFJLFNBQVMsR0FBRyxHQUFJLEdBQUUsUUFBUyxHQUFFLFVBQVUsSUFBSSxTQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsSUFBSyxJQUFHLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxRQUFRLEVBQUUsUUFBUSxLQUFLLEVBQUUsUUFBUSxRQUFRLEtBQUssR0FBRyxFQUFFLEtBQUssS0FBSyxFQUFFLGVBQWMsRUFBSSxPQUFPLElBQUcsRUFBRSxVQUFVLE1BQU0sU0FBUyxFQUFFLEdBQWMsUUFBUyxLQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsV0FBOUMsR0FBSSxHQUFFLElBQW1ELE9BQU8sR0FBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsVUFBVSxLQUFLLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxJQUFLLEtBQUksVUFBVSxPQUFPLE1BQU8sR0FBRSxRQUFRLE9BQU8sT0FBTyxNQUFNLENBQUUsSUFBRyxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFHLE9BQU8sR0FBRSxHQUFJLEdBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRyxLQUFJLEVBQUUsTUFBTyxFQUFFLEtBQUksRUFBRSxNQUFPLEdBQUUsUUFBUSxHQUFHLEtBQUssQ0FBRSxLQUFJLEdBQUksR0FBRSxFQUFFLE9BQU8sS0FBSyxJQUFJLEVBQUUsRUFBRSxNQUFNLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFHLE9BQU0sTUFBTyxJQUFHLEVBQUUsVUFBVSxNQUFNLFNBQVMsR0FBRyxHQUFJLEdBQUUsS0FBSyxRQUFRLEVBQUcsSUFBRyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUcsQ0FBRSxLQUFJLEdBQUksR0FBRSxFQUFFLFVBQVUsR0FBRyxFQUFFLHNCQUFzQixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxLQUFLLEdBQUcsTUFBTyxRQUFPLElBQUksU0FBUyxHQUFHLEVBQUUsVUFBVSxRQUFRLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFHLEdBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUUsR0FBSSxJQUFJLElBQUksRUFBRSxRQUFRLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxRQUFRLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLFNBQVMsRUFBRSxRQUFRLElBQUksRUFBRSxNQUFNLEVBQUUsVUFBVSxhQUFhLFdBQVcsS0FBSyxVQUFVLEtBQUssU0FBUyxVQUFVLEVBQUUsVUFBVSxTQUFTLFdBQVcsR0FBSSxHQUFFLElBQUssS0FBSSxFQUFFLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxpQkFBaUIsRUFBRSxtQkFBa0IsQ0FBRyxJQUFJLEdBQUUsRUFBRSxTQUFTLEdBQUcsRUFBRSxtQkFBbUIsRUFBRSxTQUFTLFVBQVUsRUFBRSxFQUFFLFVBQVUsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLFVBQVcsS0FBSSxHQUFJLEdBQUUsRUFBRSxVQUFVLE9BQU8sS0FBSyxFQUFFLFVBQVUsR0FBRyxVQUFXLEdBQUUsTUFBTSxRQUFRLEVBQUUsTUFBTSxPQUFPLFVBQVUsRUFBRSxjQUFhLEVBQUcsRUFBRSxVQUFVLEVBQUUsT0FBTyxNQUFNLEdBQUcsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLFFBQVEsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLE9BQU8sU0FBUyxJQUFJLFNBQVMsR0FBRyxHQUFHLEVBQUUsV0FBVyxFQUFFLFVBQVUsVUFBVSxTQUFTLEdBQUcsTUFBTyxJQUFHLEVBQUUsT0FBTyxFQUFFLFVBQVUsUUFBUSxXQUFXLEdBQUksR0FBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLFlBQWEsS0FBSSxFQUFFLGFBQWEsR0FBRyxFQUFFLEtBQUssWUFBWSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxDQUFFLEtBQUksR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixNQUFNLEdBQUcsR0FBRyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsT0FBTyxRQUFRLEdBQUcsS0FBSyxNQUFPLE9BQU0sUUFBUSxJQUFJLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRSxJQUFJLFlBQWEsTUFBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxHQUFJLElBQUksS0FBSSxPQUFPLE9BQU8sT0FBTyxJQUFJLFdBQVcsS0FBSyxhQUFhLFVBQVMsRUFBRyxPQUFPLFFBQVEsR0FBRyxRQUFRLEdBQUcsS0FBSyxPQUFPLFNBQVMsUUFBUSxXQUFXLEtBQUssTUFBTSxPQUFPLE9BQU8sTUFBTSxLQUFLLFNBQVMsVUFBVSxXQUFXLElBQUksR0FBSSxLQUFLLE1BQUssTUFBTSxHQUFHLEtBQUssTUFBTSxFQUFFLEtBQUssT0FBTyxRQUFRLFdBQVcsR0FBSSxHQUFFLElBQUssTUFBSyxPQUFPLFVBQVUsU0FBUyxHQUFHLEdBQUcsRUFBRSxTQUFTLEdBQUcsTUFBTyxJQUFHLEVBQUUsT0FBTyxLQUFLLE9BQU8sVUFBVSxTQUFTLEdBQUcsR0FBRyxFQUFFLFNBQVMsR0FBRyxPQUFPLEdBQUcsRUFBRSxRQUFRLE9BQU8sV0FBVyxHQUFJLEdBQUUsS0FBSyxPQUFPLFFBQVEsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsZ0JBQWlCLElBQUcsRUFBRSxDQUFDLEdBQUksR0FBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLFFBQVEsRUFBRSxLQUFLLE9BQVEsSUFBRyxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLE1BQU8sRUFBRSxJQUFJLEdBQUUsS0FBSyxNQUFNLEVBQUUsS0FBSyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEtBQUssRUFBRSxJQUFJLEtBQUssRUFBRSxJQUFJLElBQUksRUFBRSxHQUFJLEdBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLEdBQUcsa0JBQWtCLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxHQUFHLEtBQUssS0FBSyxFQUFFLE9BQU8sU0FBUyxLQUFLLE1BQU0sR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssU0FBUyxFQUFFLEtBQUssV0FBVSxFQUFHLE1BQU8sSUFBRyxHQUFHLEVBQUUsT0FBTyxTQUFTLEdBQUcsR0FBSSxJQUFHLElBQUksV0FBVyxNQUFPLElBQUksUUFBTyxlQUFlLEVBQUUsU0FBUyxHQUFHLEVBQUUsTUFBTSxLQUFLLEdBQUcsT0FBTyxFQUFFLGFBQWEsR0FBRyxlQUFlLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxPQUFPLEdBQUcsRUFBRSxTQUFTLEdBQUcsRUFBRSxXQUFXLFNBQVMsR0FBRyxNQUFPLElBQUcsR0FBRyxHQUFHLEVBQUUsUUFBUSxPQUFPLE9BQU8sTUFBTSxFQUFFLFFBQVEsU0FBUyxHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssT0FBTyxPQUFPLFFBQVEsRUFBRSxRQUFRLE1BQU0sRUFBRSxFQUFFLEVBQUUsUUFBUSxXQUFXLElBQUksU0FBUyxHQUFHLEVBQUUsSUFBSSxTQUFTLEdBQUcsR0FBSSxHQUFFLEtBQUssb0JBQW9CLEtBQUsscUJBQXNCLElBQUcsRUFBRSxRQUFRLElBQUksRUFBRSxNQUFPLEtBQUssSUFBSSxHQUFFLEVBQUUsVUFBVSxFQUFHLE9BQU8sR0FBRSxRQUFRLE1BQU0sa0JBQW1CLEdBQUUsUUFBUSxFQUFFLFFBQVEsTUFBTSxFQUFFLEdBQUcsa0JBQW1CLElB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RUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxJQUFLLElBQUcsRUFBRSxHQUFHLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxTQUFVLElBQUcsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRSxHQUFJLEVBQUUsRUFBRSxtQkFBbUIsTUFBTyxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxJQUFJLFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxtQkFBbUIsR0FBRyxFQUFFLEVBQUUsa0JBQWtCLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsU0FBUyxFQUFFLEVBQUUsU0FBUyxHQUFHLEdBQUcsRUFBRyxHQUFFLEtBQUssRUFBRyxPQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFHLElBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUksR0FBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUksR0FBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLEdBQUcsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksS0FBSyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEtBQUssUUFBUyxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxpQkFBaUIsRUFBRSxLQUFLLE1BQU0sRUFBRSxFQUFFLEtBQUssZUFBZSxFQUFFLEtBQUssY0FBYyxNQUFNLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLFFBQVMsR0FBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsV0FBVyxLQUFLLEdBQUcsRUFBRSxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLElBQUksUUFBUyxHQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLE1BQUssRUFBRyxFQUFFLE9BQVEsR0FBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLGVBQWUsT0FBTyxFQUFFLFFBQVEsUUFBUyxHQUFFLEdBQUcsS0FBSyxFQUFFLG1CQUFtQixFQUFFLEVBQUUsa0JBQWtCLE1BQU8sT0FBTyxHQUFFLEVBQUUsS0FBSyxRQUFTLEdBQUUsRUFBRSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sU0FBUyxFQUFFLEVBQUUsT0FBTyxHQUFHLEdBQUcsRUFBRyxHQUFFLEVBQUUsRUFBRSxLQUFLLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLEdBQUcsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssSUFBSSxRQUFTLEdBQUUsR0FBRyxHQUFJLEVBQUUsSUFBRyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLElBQUksT0FBUSxLQUFJLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxTQUFTLFdBQVcsRUFBRSxjQUFjLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxNQUFPLEdBQUUsRUFBRSxLQUFLLElBQUksRUFBRSxTQUFTLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLFNBQVMsV0FBVyxFQUFFLGNBQWMsRUFBRSxJQUFJLEdBQUcsUUFBUyxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssR0FBRyxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUUsRUFBRyxFQUFFLEdBQUcsUUFBUyxHQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLElBQUssSUFBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxTQUFTLEVBQUUsRUFBRSxRQUFRLEdBQUcsRUFBRyxJQUFHLEVBQUUsRUFBRSxFQUFFLFVBQVUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsU0FBUyxFQUFFLEVBQUUsRUFBRSxTQUFTLElBQUksUUFBUyxHQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsS0FBSyxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsR0FBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sUUFBUyxHQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsT0FBTyxPQUFPLENBQUUsS0FBSSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxRQUFTLEtBQUksS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU8sR0FBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sU0FBUyxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRyxHQUFFLEVBQUUsRUFBRSxLQUFLLE9BQU8sRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxRQUFTLEdBQUUsRUFBRSxLQUFLLFFBQVMsR0FBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLElBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLE1BQU8sSUFBRyxRQUFTLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFJLElBQUksR0FBRSxFQUFFLElBQUksRUFBRSxHQUFJLElBQUcsRUFBRSxFQUFFLG9CQUFvQixFQUFFLEVBQUUsYUFBYSxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLG9CQUFtQixNQUFRLElBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLHNCQUFzQixDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsSUFBSyxHQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFHLElBQUksR0FBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLFFBQVMsSUFBRyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sU0FBUyxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRyxHQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEdBQUcsRUFBRSxJQUFJLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFJLEVBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQUcsR0FBTyxHQUFHLEVBQUUsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUksRUFBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxRQUFTLEdBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEtBQUssY0FBYyxNQUFPLEtBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsS0FBSyxLQUFLLE9BQU8sRUFBRSxJQUF1RCxRQUFTLEdBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLGNBQWMsTUFBTyxHQUFFLG9CQUFtQixHQUFHLENBQUcsSUFBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRSxHQUFJLEVBQUUsRUFBRSxFQUFFLG9CQUFvQixNQUFPLEdBQUUsRUFBRSxJQUFHLENBQUcsSUFBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsZ0JBQWdCLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxZQUFZLEdBQUcsSUFBSSxFQUFFLFVBQVUsT0FBTSxNQUFPLENBQUMsSUFBSSxHQUFJLElBQUUsRUFBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUUsQ0FBRyxPQUFNLEVBQUUsRUFBRSxZQUFZLElBQUksR0FBRyxFQUFFLE9BQU0sTUFBUSxHQUFFLEVBQUUsRUFBRSxFQUFHLElBQUcsRUFBRSxHQUFHLENBQUMsR0FBSSxJQUFFLENBQUcsS0FBSSxHQUFJLEtBQUssR0FBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUUsRUFBRyxFQUFFLEVBQUUsRUFBRyxRQUFPLEdBQUcsRUFBRSxPQUFPLEdBQUcsRUFBRSxZQUFhLEdBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBTSxRQUFNLEVBQWhvSixHQUFJLEdBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxPQUFRLEtBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLE1BQU0sRUFBRSxHQUFHLElBQUksS0FBSyxFQUFFLEdBQUcsR0FBRyxJQUFpMkgsSUFBSSxHQUFFLEVBQUUsMENBQW9wQixPQUFPLFVBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUksR0FBRSxHQUFFLEVBQUcsSUFBSyxJQUFHLEVBQUUsR0FBRyxHQUFFLEVBQUcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFFLFNBQVUsS0FBSSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxLQUFLLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxVQUFVLEVBQUUsYUFBYSxLQUFLLEVBQUUsZ0JBQWdCLEdBQUcsR0FBRSxHQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxFQUFFLEdBQUUsR0FBSSxDQUFFLEdBQUUsRUFBRSxFQUFFLEdBQUksSUFBRyxFQUFFLFFBQVEsR0FBRyx3QkFBb0IsR0FBTyxHQUFHLEdBQUksR0FBRSxFQUFFLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRyxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxLQUFLLEVBQUUsRUFBRSxZQUFZLElBQUksRUFBRSxFQUFFLFFBQVEsSUFBSSxHQUFJLEdBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLFNBQVMsRUFBRSxFQUFFLFFBQVEsR0FBRyxFQUFHLElBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxTQUFTLEVBQUUsRUFBRSxPQUFPLEdBQUcsR0FBRyxFQUFHLElBQUksR0FBRSxFQUFFLEtBQUssS0FBSyxNQUFPLElBQUcsRUFBRSxPQUFPLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksT0FBTyxJQUFJLEVBQUUsSUFBSSxTQUFVLElBQUcsRUFBRyxHQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxNQUFPLEdBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxHQUFHLFNBQVMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsT0FBTyxHQUFHLFNBQVMsR0FBRyxPQUFPLFNBQVMsRUFBRSxJQUFHLElBQUssRUFBRSxLQUFLLEtBQUssR0FBRyxFQUFFLEdBQUcsVUFBVSxPQUFPLEtBQU0sSUFBRyxTQUFTLGlCQUFpQixrQkFBa0IsV0FBVyxHQUFJLEdBQUUsU0FBUyxhQUFjLElBQUcsRUFBRSxRQUFRLEdBQUcsRUFBRSxVQUFXLElBQUksS0FBSSxTQUFTLFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLFVBQVUsR0FBRyxFQUFFLFlBQVksV0FBVyxHQUFHLGlCQUFpQixFQUFFLEVBQUUsS0FBSyxHQUFHLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxhQUFhLElBQUksS0FBSyxFQUFFLFFBQVEsTUFBTSxhQUFhLEVBQUUsS0FBSyxHQUFHLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsVUFBVSxPQUFPLEVBQUUsaUJBQWlCLG1CQUFtQixJQUFJLEVBQUUsaUJBQWlCLGlCQUFpQixJQUFJLEVBQUUsaUJBQWlCLFNBQVMsSUFBSSxJQUFJLEVBQUUsUUFBTyxNQUFPLGlCQUFpQixTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUcsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLFFBQVMsSUFBSSxHQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsYUFBYSxJQUFJLEtBQUssRUFBRSxRQUFRLEdBQU8sR0FBRSxLQUFLLFNBQVMsRUFBRSxHQUFHLE9BQU8sRUFBRSxFQUFFLEVBQUUsUUFBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEtBQUssU0FBUyxHQUFHLE1BQU8sSUFBRyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsVUFBVSxHQUFHLEVBQUUsTUFBTSxLQUFLLEdBQUcsRUFBRSxhQUE2eEIsSUFBSSxNQUFNLEdBQUcsTUFBTSxLQUFLLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLE1BQU0sRUFBRSxLQUFLLFdBQVcsRUFBRSxFQUFFLG1CQUFtQixTQUFTLEVBQUUsTUFBTSxRQUFRLEdBQUcsRUFBRSxNQUFNLE9BQVEsSUFBRyxHQUFHLEVBQUUsS0FBSyxNQUFLLEVBQUcsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLFFBQVEsS0FBSyxFQUFFLE1BQU0sUUFBUSxFQUFFLEVBQUUsUUFBUSxPQUFPLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsWUFBWSxFQUFFLEdBQUcsSUFBSSxNQUFNLEVBQUUsS0FBSyxZQUFZLEVBQUUsS0FBSyxNQUFLLEVBQUcsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sUUFBUSxFQUFFLHFCQUFxQixHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sUUFBUSxVQUFVLEVBQUUsTUFBTSxRQUFRLEVBQUUsRUFBRSxtQkFBbUIsU0FBUyxPQUFPLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxNQUFNLFFBQVEsRUFBRSx1QkFBdUIsSUFBSSxLQUFLLE9BQU8sT0FBTyxRQUFRLElBQUksUUFBUSxLQUFLLE9BQU8sS0FBSyxPQUFPLFdBQVcsT0FBTyxXQUFXLE9BQU8sYUFBYSxPQUFPLGFBQWEsT0FBTyxpQkFBaUIsT0FBTyxpQkFBaUIsT0FBTyxZQUFZLE9BQU8sa0JBQWtCLE9BQU8sY0FBYyxPQUFPLFVBQVUsT0FBTyxPQUFPLFNBQWtXLEdBQUcsU0FBUyxHQUFHLE1BQU8sR0FBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLFNBQVMsR0FBRyxNQUFNLFNBQVMsRUFBRSxNQUFNLElBQUksS0FBSyxhQUFhLE1BQU0sR0FBRyxVQUFTLEVBQUcsT0FBTyxTQUFTLEdBQUcsR0FBSSxHQUFFLEtBQUssRUFBRSxLQUFLLE9BQU8sT0FBUSxJQUFHLElBQUksRUFBRSxFQUFFLE9BQU8sS0FBSyxPQUFPLENBQUMsR0FBSSxHQUFFLEtBQUssS0FBSyxFQUFFLEVBQUUsRUFBRyxJQUFHLFNBQVMsR0FBRyxLQUFLLEVBQUUsRUFBRSxRQUFRLEdBQUcsRUFBRSxLQUFLLFdBQVcsT0FBTSxHQUFJLEtBQUssUUFBUSxNQUFPLEVBQUUsSUFBSSxHQUFFLEdBQUcsRUFBRyxLQUFJLEVBQUUsTUFBTyxFQUFFLElBQUcsS0FBSyxTQUFTLE1BQU8sSUFBRyxFQUFFLEVBQUcsSUFBSSxHQUFFLGdCQUFnQixLQUFLLEtBQUssR0FBSSxHQUFFLElBQUksTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxJQUFJLE9BQU8sRUFBRSxLQUFLLFFBQVEsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFJLElBQUksSUFBRyxFQUFFLE9BQU8sRUFBRSxVQUFVLFdBQVcsR0FBRyxNQUFNLEVBQUUsS0FBSyxPQUFPLEVBQUUsR0FBRyxFQUFHLElBQUcsRUFBRSxLQUFLLFlBQVksRUFBRSxLQUFLLFdBQVcsS0FBSyxNQUFNLEVBQUUsS0FBSyxNQUFLLEdBQUksR0FBRyxFQUFFLE9BQU8sU0FBUyxFQUFFLEdBQUcsTUFBTyxHQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsTUFBTSxFQUFFLG9CQUFvQixFQUFFLGtCQUFrQixPQUFPLFdBQVcsQ0FBQyxHQUFJLEdBQUUsRUFBRSxLQUFLLFdBQVcsS0FBSyxFQUFHLElBQUcsV0FBVyxFQUFFLE1BQU8sTUFBSyxVQUFTLEVBQUcsR0FBRyxFQUFFLGFBQWEsV0FBVyxFQUFFLFVBQVMsRUFBRyxFQUFFLGlCQUFpQixHQUFHLEVBQUUsRUFBRyxJQUFHLFdBQVcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU8sRUFBRSxJQUFJLEdBQUUsRUFBRSxXQUFXLElBQUssSUFBRyxFQUFFLGFBQWEsR0FBRyxHQUFHLEVBQUUsaUJBQWlCLEdBQUcsR0FBRyxFQUFFLGFBQWEsU0FBUyxHQUFHLEVBQUUsS0FBSyxNQUFPLE1BQUssR0FBRyxHQUFHLElBQUksT0FBTyxVQUFVLFFBQVEsVUFBb1csSUFBRyxJQUFLLElBQUksS0FBSSxXQUFXLEdBQUcsaUJBQWlCLE1BQU0sR0FBRyxZQUFZLFdBQVcsR0FBSSxHQUFFLEtBQUssRUFBRSxLQUFLLE9BQVEsTUFBSyxRQUFRLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxHQUFHLEVBQUcsR0FBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQUssR0FBRyxHQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssT0FBTyxTQUFTLEdBQUcsSUFBSSxHQUFJLEdBQUUsS0FBSyxLQUFLLEtBQUssT0FBTyxLQUFLLEtBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxNQUFNLEVBQUUsS0FBSyxhQUFhLEtBQUssU0FBUyxFQUFFLEtBQUssT0FBTyxZQUFZLEVBQUUsS0FBSyxZQUFZLEVBQUUsR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxHQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssSUFBSSxPQUFPLEVBQUUsS0FBSyxRQUFRLGFBQWEsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEtBQUssR0FBRyxFQUFFLE9BQU8sRUFBRSxVQUFVLFdBQVcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEdBQUksTUFBSyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxHQUFFLEtBQUssV0FBVyxFQUFFLEVBQUUsS0FBSyxJQUFJLEVBQUUsSUFBSSx3QkFBd0IsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLEdBQUcsS0FBSyxLQUFLLEVBQUUsRUFBRSxLQUFLLEdBQUcsS0FBSyxRQUFRLEVBQUUsTUFBTyxHQUFFLEVBQUUsS0FBSyxJQUFJLFFBQVEsV0FBVyxHQUFJLEdBQUUsS0FBSyxhQUFhLEVBQUUsS0FBSyxZQUFZLEtBQUssTUFBTSxLQUFLLE9BQVEsR0FBRSxRQUFRLEtBQUssUUFBUSxFQUFFLEdBQUcsSUFBSSxLQUFLLEVBQUUsUUFBUSxJQUFJLEVBQUUsUUFBUSxJQUFJLEVBQUUsUUFBUSxJQUFJLEtBQUssUUFBUSxTQUFTLEtBQUssYUFBYSxFQUFFLFFBQVEsU0FBUyxHQUFHLEdBQUcsRUFBRSxLQUFLLE1BQU0sQ0FBQyxHQUFJLEdBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFNLElBQUcsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixHQUFHLEVBQUUsaUJBQWlCLEdBQUcsRUFBRSxRQUFRLFFBQVMsR0FBRSxHQUFHLEdBQUcsRUFBRSxTQUFTLEdBQUcsSUFBSSxhQUFhLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsR0FBRyxHQUFHLEVBQUUsUUFBUSxLQUFLLEdBQUcsRUFBRSxXQUFXLFNBQVMsUUFBUSxTQUFTLEVBQUUsR0FBRyxJQUFJLEdBQUcsT0FBTSxDQUFHLElBQUcsS0FBSyxTQUFTLE1BQU8sTUFBSyxRQUFTLElBQUksR0FBRSxFQUFFLFdBQVksR0FBRSxvQkFBb0IsRUFBRSxtQkFBbUIsUUFBUSxTQUFTLEdBQUcsR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLFFBQVEsT0FBTyxLQUFLLElBQUksWUFBWSxFQUFHLElBQUksR0FBRSxHQUFHLEVBQUcsT0FBTyxNQUFLLElBQUksWUFBWSxHQUFHLEtBQUssU0FBUyxFQUFFLGdCQUFpQixJQUFHLE9BQU8sWUFBWSxHQUFHLEdBQUcsT0FBTyxjQUFjLEdBQUcsR0FBRyxPQUFPLGVBQWUsR0FBRyxHQUFHLE9BQU8sZ0JBQWdCLEdBQUcsR0FBRyxPQUFPLGlCQUFpQixTQUFTLEdBQUcsSUFBSSxFQUFFLE9BQU0sQ0FBRyxJQUFHLEdBQUcsR0FBRyxPQUFNLENBQUcsSUFBRyxFQUFFLEVBQUUsY0FBYyxNQUFNLEdBQUcsR0FBRyxNQUFPLElBQUcsRUFBRyxJQUFJLEdBQUUsU0FBUyxjQUFjLEVBQUcsT0FBTyxHQUFFLFFBQVEsTUFBTSxFQUFFLEdBQUcsR0FBRyxFQUFFLGNBQWMsT0FBTyxvQkFBb0IsRUFBRSxjQUFjLE9BQU8sWUFBWSxHQUFHLEdBQUcscUJBQXFCLEtBQUssRUFBRSxhQUFhLEVBQUUsR0FBRyxRQUFRLFdBQVcsSUFBSSxFQUFFLEdBQUcsUUFBUSxXQUFXLElBQUksR0FBRyxVQUFVLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxVQUFVLE9BQU8sU0FBUyxFQUFFLEdBQUcsTUFBTyxVQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksRUFBRSxPQUFPLEdBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxTQUFTLEVBQUUsU0FBUyxPQUFPLElBQUksR0FBRyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFVBQVUsSUFBSSxHQUFJLElBQUcsRUFBRSxFQUFFLEdBQUcsT0FBTyxXQUFXLEVBQUUsYUFBYSxFQUFFLGNBQWMsR0FBRyxFQUFFLG1CQUFrQixHQUFJLEdBQUUsRUFBRyxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVcsRUFBRyxHQUFHLEVBQUUsWUFBWSxHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFHLEdBQU8sSUFBSSxHQUFHLFdBQVcsV0FBVyxFQUFFLFVBQVUsSUFBSSxHQUFHLEtBQUssT0FBTyxLQUFLLEVBQUcsSUFBSSxJQUFHLDJCQUEyQixHQUFHLHlCQUF5QixHQUFHLEVBQUUsU0FBUyxHQUFHLEdBQUksR0FBRSxFQUFFLEdBQUcsUUFBUSxHQUFHLFFBQVEsRUFBRSxFQUFFLEdBQUcsUUFBUSxHQUFHLE9BQVEsT0FBTyxJQUFJLFFBQU8sRUFBRSxnQkFBZ0IsRUFBRSxPQUFXLElBQUksWUFBWSxlQUFlLGNBQWMsU0FBUyxFQUFFLEdBQUcsRUFBRSxJQUFLLElBQUksR0FBRSxHQUFHLEVBQUUsUUFBUyxLQUFJLEVBQUUsWUFBWSxLQUFLLFVBQVUsR0FBSSxJQUFJLEdBQUUsR0FBRyxFQUFFLFNBQVEsRUFBSSxLQUFJLEVBQUUsYUFBYSxJQUFJLFFBQVEsU0FBUyxHQUFHLEdBQUksR0FBRSxFQUFHLE9BQU8sR0FBRSxjQUFjLEdBQUcsZUFBZSxFQUFFLFlBQVksS0FBSyxFQUFFLGVBQWUsR0FBRyxTQUFTLEVBQUUsYUFBYSxLQUFLLElBQVEsR0FBRyxJQUFJLFlBQVksZUFBZSxjQUFjLFNBQVMsRUFBRSxHQUFHLEVBQUUsSUFBSyxJQUFJLEdBQUUsR0FBRyxFQUFFLFFBQVMsS0FBSSxFQUFFLFlBQVksS0FBSyxVQUFVLEdBQUcsSUFBSyxJQUFJLEdBQUUsR0FBRyxFQUFFLFNBQVEsRUFBSSxLQUFJLEVBQUUsYUFBYSxJQUFJLFFBQVEsU0FBUyxHQUFHLEdBQUksR0FBRSxFQUFHLE9BQU8sR0FBRSxjQUFjLEdBQUcsZUFBZSxFQUFFLFlBQVksS0FBSyxFQUFFLGVBQWUsR0FBRyxVQUFVLEVBQUUsYUFBYSxNQUFNLElBQUksR0FBRyxTQUFTLEdBQUcsT0FBTyxHQUFHLElBQUksU0FBUyxjQUFjLFFBQVEsVUFBVSxFQUFFLEdBQUcsYUFBYSxHQUFHLEVBQUUsNkZBQTZGLEdBQUcsRUFBRSwyREFBMkQsR0FBRyxFQUFFLG1TQUFtUyxHQUFHLDRFQUE0RSxHQUFHLHdHQUF3RyxHQUFHLDZCQUE2QixFQUFFLE9BQU8sS0FBSyxHQUFHLE9BQU8sR0FBRyxRQUFRLEdBQUcsSUFBSSxHQUFHLEdBQUksUUFBTyxLQUFLLElBQUksR0FBRyxhQUFhLEdBQUcsR0FBSSxRQUFPLFFBQVEsR0FBRyxVQUFVLEdBQUcscUJBQXFCLEdBQUcsU0FBUyxHQUFHLFFBQVEsR0FBRyxFQUFFLHlCQUF3QixHQUFJLE1BQU0sSUFBSSxPQUFPLElBQUksT0FBTyxJQUFJLFNBQVMsSUFBSSxRQUFRLElBQUksUUFBUSxLQUFLLE9BQU8sS0FBSyxRQUFRLEtBQUssR0FBRyw0QkFBNEIsR0FBRyxtQ0FBbUMsR0FBRyxFQUFFLGdCQUFlLEdBQUksR0FBRyxTQUFTLEVBQUUsR0FBRyxNQUFPLElBQUcsR0FBRyxJQUFJLE9BQU8sRUFBRSxJQUFxRixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxZQUFZLEdBQUcsWUFBWSxHQUFHLHFDQUFxQyxHQUFHLGlDQUFpQyxHQUFHLFdBQVcsR0FBRyxXQUFXLEdBQUcsU0FBUyxHQUFHLGtCQUFrQixHQUFHLHdCQUF3QixHQUFHLGtCQUFrQixHQUFHLFNBQVMsR0FBRyxPQUFPLEdBQUcsRUFBRSxJQUFJLEdBQUcsVUFBMnFRLEdBQUcsZUFBZSxHQUFHLFVBQTJFLElBQUksR0FBRyxJQUFJLGlCQUFpQixTQUFTLEVBQUUsR0FBRyxHQUFHLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRSxRQUFTLEtBQUksRUFBRSxXQUFXLE1BQU8sS0FBSSxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsVUFBVSxVQUFVLEVBQUUsQ0FBQyxHQUFJLEdBQUUsR0FBRyxFQUFFLFFBQU8sR0FBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLFVBQVMsR0FBSSxFQUFFLEdBQUcsRUFBRSxhQUFZLEdBQUksRUFBRSxHQUFHLEVBQUcsSUFBRyxHQUFHLEdBQUcsRUFBRSxPQUFPLFlBQVksR0FBRyxFQUFFLEdBQUcsRUFBRSxXQUFVLEVBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxpQkFBaUIsRUFBRSxHQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsTUFBTSxHQUFJLElBQUksR0FBRSxHQUFHLEVBQUcsSUFBRyxFQUFFLFNBQVEsR0FBSSxHQUFHLEVBQUUsT0FBTyxTQUFTLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxjQUFjLEVBQUUsTUFBTSxHQUFJLElBQUksR0FBRSxHQUFHLEVBQUcsT0FBTyxJQUFHLEVBQUUsU0FBUSxHQUFJLEdBQUcsRUFBRSxRQUFRLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksRUFBRSxNQUFNLElBQUksRUFBRSxFQUFFLE1BQUssRUFBRyxJQUFJLEVBQUUsT0FBTyxHQUFHLE9BQVcsR0FBRyxHQUFHLElBQUksWUFBVyxFQUFHLFFBQVEsR0FBRyxZQUFZLE1BQU0sU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLElBQUssSUFBRyxFQUFFLFVBQVUsTUFBTyxJQUFHLEVBQUUsRUFBRSxJQUFHLENBQUcsSUFBRyxXQUFXLEdBQUcsU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsOEtBQThLLEdBQUcsRUFBRSxPQUFPLFVBQVUsT0FBTyxLQUFNLEdBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSw2REFBNkQsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFLLElBQUssRUFBRSxFQUFFLE9BQVEsSUFBRyxVQUFVLEdBQUcsYUFBYSxHQUFHLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsT0FBTyxFQUFFLEdBQUcsRUFBRSxlQUFlLE9BQU8sRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLE9BQVEsSUFBRyxFQUFFLFVBQVUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sR0FBRyxFQUFFLFNBQVMsV0FBVyxFQUFFLHlDQUF5QyxFQUFFLE1BQU0sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxHQUFHLDZDQUE2QyxHQUFHLEVBQUUscUJBQXFCLG1CQUFtQixHQUFHLEVBQUUsNkNBQTZDLFdBQVcsR0FBRyxFQUFFLE9BQU8sSUFBSSxNQUFLLElBQUssRUFBRSxFQUFFLE9BQVEsSUFBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsTUFBTyxJQUFHLEVBQUUsVUFBVSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRSxTQUFTLEdBQUcsRUFBRSxHQUFHLE1BQUssSUFBSyxFQUFFLEVBQUUsT0FBUSxJQUFHLFVBQVUsR0FBRyxhQUFhLEdBQUcsU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxTQUFTLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEdBQUcsR0FBRyxVQUFVLEVBQUUsRUFBRSxFQUFFLFNBQVMsVUFBVSxFQUFFLEdBQUcsUUFBUSxFQUFFLHFCQUFzQixLQUFJLEVBQUUsOEJBQThCLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSyxJQUFJLEdBQUUsR0FBRyxFQUFFLEVBQUcsS0FBSSxFQUFFLHFDQUFxQyxHQUFHLEdBQUcsRUFBRSxRQUFRLElBQUksRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBSyxJQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsT0FBTyxtQkFBbUIsRUFBRSxFQUFFLE9BQVEsS0FBSSxFQUFFLGNBQWMsR0FBRyxNQUFPLElBQUcsRUFBRSxFQUFFLElBQUcsQ0FBRyxRQUFNLEdBQUksS0FBSyxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU8sR0FBRyxFQUFFLGNBQWMsTUFBTSxFQUFFLE1BQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFLEdBQUcsRUFBRSxPQUFPLEdBQUcsRUFBRSxZQUFZLE1BQU0sRUFBRSxNQUFNLElBQUksS0FBSyxTQUFTLFNBQVMsR0FBRyxNQUFNLFFBQVEsR0FBRyxXQUFXLEdBQUcsWUFBWSxHQUFHLGlCQUFpQixHQUFHLGNBQWMsR0FBRyxnQkFBZ0IsR0FBRyxXQUFXLFNBQVMsR0FBRyxNQUFPLEdBQUUsT0FBTyxTQUFTLEVBQUUsR0FBRyxNQUFPLEdBQUUsT0FBTyxFQUFFLHFCQUFxQixLQUFLLE1BQU0sS0FBSyxHQUFHLEVBQUUsU0FBUyxHQUFHLE1BQU8sR0FBRSxpRkFBaUYsRUFBRSxJQUFJLEVBQUUsT0FBbWhDLEdBQUcsMERBQTBELEdBQUcsZ0JBQWdCLEdBQUcsK0ZBQStGLElBQUksSUFBSSxHQUFHLElBQUksRUFBRSxNQUFNLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxRQUFRLEVBQUUsS0FBSyxJQUFJLEtBQUssTUFBTSxVQUFVLElBQUksTUFBTSxNQUFNLFFBQVEsT0FBTyxJQUFJLFlBQVksSUFBSSxLQUFLLFdBQVcsTUFBTSxPQUFPLGFBQWEsT0FBTyxRQUFRLGNBQWMsTUFBTSxPQUFPLGFBQWEsUUFBUSxZQUFZLFNBQVMsUUFBUSxHQUFHLFNBQVMsR0FBRyxNQUFNLE1BQU0sRUFBRSxpQkFBaUIsSUFBSSxLQUFLLDRCQUE0QixRQUFRLDJCQUEyQixLQUFLLEdBQUcsMENBQTBDLEtBQUssR0FBRyxtQkFBbUIsTUFBTSxHQUFHLG9CQUFvQixJQUFJLEdBQUcsa0JBQWtCLEtBQUssR0FBRyxtQkFBbUIsS0FBSyxHQUFHLDZDQUE2QyxPQUFPLEdBQUcsNkNBQTZDLE1BQU0sR0FBRyw4Q0FBdXRDLElBQUksR0FBRyxTQUFTLEVBQUUsR0FBRyxFQUFFLGNBQWMsU0FBUyxHQUFHLE1BQU0sTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sS0FBSyxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsU0FBUyxHQUFHLE1BQU0sTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEtBQUssRUFBRSxNQUFNLEtBQUssRUFBRSxXQUFXLEVBQUUsVUFBVSxLQUFLLE9BQU8sVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLEtBQUssUUFBUSxJQUFJLE1BQU0sTUFBTSxHQUFHLEdBQUcsU0FBUyxHQUFHLEtBQUssUUFBUSxFQUFFLEtBQUssS0FBSyxFQUFFLE1BQU0sR0FBRyxLQUFLLFdBQVcsR0FBRyxFQUFFLFFBQVEsaUJBQWlCLEtBQUssV0FBVyxHQUFHLEVBQUUsUUFBUSxXQUFXLEtBQUssV0FBVyxFQUFFLEtBQUssSUFBSSxFQUFFLFdBQVksSUFBSSxHQUFFLEVBQUUsZUFBZSxDQUFFLE1BQUssZUFBZSxTQUFTLEdBQUcsUUFBUSxFQUFFLFlBQVksRUFBRSxFQUFFLE1BQU0sS0FBSyxPQUFPLEVBQUUsS0FBSyxtQkFBbUIsS0FBSyxLQUFJLEVBQTIvSyxJQUFJLFFBQU8sTUFBTSxpTUFBaU0sTUFBTSxLQUFLLEtBQUssV0FBVyxNQUErWCxJQUFJLElBQUcsR0FBRyxJQUFJLEdBQUcsU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLEdBQUcsRUFBRSxPQUFPLElBQUcsSUFBSyxFQUFFLFVBQVUsR0FBRyxFQUFFLEVBQUcsSUFBSSxHQUFFLEdBQUcsRUFBRSxFQUFHLFFBQU8sSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLGdCQUFnQixFQUFFLGtCQUFrQixTQUFTLEdBQUcsUUFBUyxHQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsT0FBTyxPQUFPLEdBQUcsS0FBSyxJQUFLLElBQUcsRUFBRSxJQUFJLEdBQUksS0FBSyxHQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsT0FBTyxPQUFPLEVBQUUsWUFBWSxNQUFNLEVBQUUsYUFBYSxFQUFFLFlBQVksR0FBRyxlQUFlLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBSSxHQUFFLEtBQUssU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxLQUFLLEdBQUksSUFBSSxHQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUcsT0FBTyxHQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLE9BQU8sUUFBUSxFQUFFLG1CQUFtQixHQUFHLE1BQU0sSUFBSSxJQUFJLEdBQUcsUUFBUSxHQUFHLG9CQUFpSyxLQUFLLEdBQUcsSUFBRyxHQUFJLEtBQUssR0FBRyxJQUFHLEdBQUksR0FBRyxFQUFFLFNBQVMsR0FBRyxHQUFJLEdBQUUsR0FBRyxFQUFHLE9BQU8sSUFBRyxFQUFFLFlBQVksR0FBRyxHQUFHLFVBQVUsTUFBTyxJQUFHLFVBQVUsT0FBTyxTQUFTLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxHQUFHLE1BQU0sU0FBUyxNQUFNLElBQUksU0FBUyxnQkFBZ0IsTUFBTyxLQUFLLElBQUksR0FBRSxLQUFLLFFBQVMsS0FBSSxFQUFFLE9BQU8sQ0FBQyxHQUFJLEdBQUUsRUFBRSxRQUFTLElBQUcsRUFBRSxHQUFHLGdCQUFpQixHQUFFLE1BQU0sRUFBRSxPQUFPLEtBQUssRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxNQUFPLEtBQUssR0FBRSxFQUFFLGNBQWUsS0FBSSxFQUFFLFNBQVMsR0FBRyxHQUFHLEVBQUUsVUFBVSxNQUFPLEdBQUUsU0FBVSxJQUFJLEdBQUUsU0FBUyxjQUFjLE1BQU8sT0FBTyxHQUFFLFlBQVksRUFBRSxXQUFVLElBQUssRUFBRSxXQUFXLEdBQUksSUFBRyxFQUFFLENBQUMsR0FBSSxHQUFFLEdBQUcsR0FBRyxtQkFBa0IsRUFBRyxxQkFBcUIsR0FBRyw0QkFBNEIsR0FBRyxXQUFXLEVBQUUsV0FBVyxTQUFTLEVBQUUsVUFBVSxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxlQUFnQixHQUFFLE9BQU8sRUFBRSxFQUFFLGdCQUFnQixHQUFHLE1BQU8sSUFBRyxLQUFLLEtBQUssRUFBRSxJQUFJLEdBQUcsUUFBUSxHQUFHLE9BQU8sUUFBUTs7Ozs7QUNKenUyRixPQUFPLFFBQVUsUUFBUTs7OztBQ0kzQixZQUFxQyxTQUFTLEdBQUUsR0FBRyxNQUFPLE9BQU0sRUFBRSxRQUFTLEdBQUUsR0FBRyxNQUFPLE9BQU0sRUFBRSxRQUFTLEdBQUUsR0FBRyxPQUFNLElBQUssRUFBRSxRQUFTLEdBQUUsR0FBRyxNQUFNLGdCQUFpQixJQUFHLGdCQUFpQixJQUFHLGdCQUFpQixJQUFHLGlCQUFrQixHQUFFLFFBQVMsR0FBRSxHQUFHLE1BQU8sUUFBTyxHQUFHLGdCQUFpQixHQUFrQyxRQUFTLEdBQUUsR0FBRyxNQUFNLG9CQUFvQixFQUFFLEtBQUssR0FBRyxRQUFTLEdBQUUsR0FBRyxHQUFJLEdBQUUsV0FBVyxPQUFPLEdBQUksT0FBTyxJQUFHLEdBQUcsS0FBSyxNQUFNLEtBQUssR0FBRyxTQUFTLEdBQUcsUUFBUyxHQUFFLEdBQUcsTUFBTyxHQUFFLElBQUksa0JBQW1CLEdBQUUsTUFBTSxrQkFBbUIsR0FBRSxNQUFNLFFBQVMsR0FBRSxHQUFHLE1BQU8sT0FBTSxFQUFFLEdBQUcsTUFBTSxRQUFRLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssVUFBVSxFQUFFLEtBQUssR0FBRyxPQUFPLEdBQUcsUUFBUyxHQUFFLEdBQUcsR0FBSSxHQUFFLFdBQVcsRUFBRyxPQUFPLE9BQU0sR0FBRyxFQUFFLEVBQUUsUUFBUyxHQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUksR0FBRSxPQUFPLE9BQU8sTUFBTSxFQUFFLEVBQUUsTUFBTSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsRUFBRSxLQUFJLENBQUcsT0FBTyxHQUFFLFNBQVMsR0FBRyxNQUFPLEdBQUUsRUFBRSxnQkFBZ0IsU0FBUyxHQUFHLE1BQU8sR0FBRSxJQUEwQyxRQUFTLEdBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBSSxHQUFFLEVBQUUsUUFBUSxFQUFHLElBQUcsR0FBRyxFQUFFLE1BQU8sR0FBRSxPQUFPLEVBQUUsSUFBMEMsUUFBUyxHQUFFLEVBQUUsR0FBRyxNQUFPLEdBQUUsS0FBSyxFQUFFLEdBQUcsUUFBUyxHQUFFLEdBQUcsR0FBSSxHQUFFLE9BQU8sT0FBTyxLQUFNLE9BQU8sVUFBUyxHQUFHLE1BQU8sR0FBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQWtiLFFBQVMsR0FBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUUsS0FBSSxHQUFJLEdBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFJLE9BQU0sR0FBRyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRyxPQUFPLEdBQUUsUUFBUyxHQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUksS0FBSyxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUcsT0FBTyxHQUFFLFFBQVMsR0FBRSxHQUFHLElBQUksR0FBSSxNQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFJLE9BQU8sR0FBRSxRQUFTLEdBQUUsRUFBRSxFQUFFLElBQTRELFFBQVMsR0FBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLEVBQUUsT0FBTSxDQUFHLElBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUcsS0FBSSxJQUFJLEVBQUUsT0FBTyxJQUFJLEdBQUcsT0FBTyxLQUFLLE9BQU8sRUFBRyxLQUFJLEdBQUksR0FBRSxNQUFNLFFBQVEsR0FBRyxFQUFFLE1BQU0sUUFBUSxFQUFHLElBQUcsR0FBRyxFQUFFLE1BQU8sR0FBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBUyxFQUFFLEdBQUcsTUFBTyxHQUFFLEVBQUUsRUFBRSxLQUFNLElBQUcsWUFBYSxPQUFNLFlBQWEsTUFBSyxNQUFPLEdBQUUsWUFBWSxFQUFFLFNBQVUsSUFBRyxHQUFHLEVBQUUsT0FBTSxDQUFHLElBQUksR0FBRSxPQUFPLEtBQUssR0FBRyxFQUFFLE9BQU8sS0FBSyxFQUFHLE9BQU8sR0FBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBUyxHQUFHLE1BQU8sR0FBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sR0FBRyxPQUFNLEdBQUksUUFBUyxHQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLE1BQU8sRUFBRSxRQUFPLEVBQUUsUUFBUyxHQUFFLEdBQUcsR0FBSSxJQUFFLENBQUcsT0FBTyxZQUFXLElBQUksR0FBRSxFQUFHLEVBQUUsTUFBTSxLQUFLLGFBQWlqQixRQUFTLEdBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLGVBQWUsRUFBRSxHQUFHLE1BQU0sRUFBRSxhQUFhLEVBQUUsVUFBUyxFQUFHLGNBQWEsSUFBeThCLFFBQVMsSUFBRyxHQUFHLE1BQU0sa0JBQW1CLElBQUcsY0FBYyxLQUFLLEVBQUUsWUFBNHNCLFFBQVMsSUFBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEdBQUcsT0FBTyxFQUFFLFFBQVMsTUFBSyxHQUFHLE1BQU0sR0FBRyxPQUFPLEdBQUcsR0FBRyxPQUFPLEdBQXlwQixRQUFTLElBQUcsR0FBRyxNQUFPLElBQUksUUFBRyxPQUFPLE9BQU8sR0FBTyxPQUFPLElBQUksUUFBUyxJQUFHLEdBQUcsR0FBSSxHQUFFLEdBQUksSUFBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFNBQVMsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLGFBQWMsT0FBTyxHQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFTLEVBQUcsRUFBNFosUUFBUyxJQUFHLEdBQUcsR0FBRyxFQUF5UCxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksRUFBRSxJQUFHLEVBQUUsTUFBTSxZQUFhLEtBQUksTUFBTyxHQUFFLEVBQUUsV0FBVyxFQUFFLGlCQUFrQixJQUFHLEVBQUUsRUFBRSxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsSUFBSSxFQUFFLEtBQUssT0FBTyxhQUFhLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBSSxJQUFHLElBQUksR0FBRyxHQUFHLEVBQUUsVUFBVSxFQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEdBQUksSUFBRyxFQUFFLE9BQU8seUJBQXlCLEVBQUUsRUFBRyxLQUFJLElBQUcsSUFBSyxFQUFFLGFBQWEsQ0FBQyxHQUFJLEdBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBSSxLQUFJLEdBQUcsSUFBSSxVQUFVLFNBQVMsRUFBRSxFQUFFLEdBQUksSUFBSSxJQUFHLEdBQUcsR0FBRyxFQUFHLFFBQU8sZUFBZSxFQUFFLEdBQUcsWUFBVyxFQUFHLGNBQWEsRUFBRyxJQUFJLFdBQVcsR0FBSSxHQUFFLEVBQUUsRUFBRSxLQUFLLEdBQUcsQ0FBRSxPQUFPLElBQUcsU0FBUyxFQUFFLFNBQVMsSUFBSSxFQUFFLElBQUksU0FBUyxNQUFNLFFBQVEsSUFBSSxRQUFTLEdBQUUsR0FBRyxJQUFJLEdBQUksT0FBRSxHQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLElBQUksU0FBUyxNQUFNLFFBQVEsSUFBSSxFQUFFLElBQUksS0FBSyxHQUFHLElBQUksU0FBUyxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUUsS0FBSyxHQUFHLENBQUUsS0FBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLGNBQWMsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsTUFBTSxRQUFRLElBQUksRUFBRSxHQUFHLE1BQU8sR0FBRSxPQUFPLEtBQUssSUFBSSxFQUFFLE9BQU8sR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUcsQ0FBRSxJQUFHLElBQUssTUFBSyxJQUFLLFFBQU8sV0FBVyxNQUFPLEdBQUUsR0FBRyxFQUFFLENBQUUsSUFBSSxHQUFFLEVBQUUsTUFBTyxPQUFPLEdBQUUsUUFBUSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxTQUFTLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUcsTUFBTSxRQUFRLElBQUksRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFJLEdBQUUsRUFBRSxNQUFPLEdBQUUsUUFBUSxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsV0FBWSxHQUFFLEdBQUcsR0FBRyxFQUFFLElBQUksV0FBK00sUUFBUyxJQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsTUFBTyxFQUFFLEtBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsUUFBUSxRQUFRLEdBQUcsT0FBTyxLQUFLLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFJLE9BQU8sR0FBRSxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTyxHQUFFLFdBQVcsR0FBSSxHQUFFLGtCQUFtQixHQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLGtCQUFtQixHQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBRSxPQUFPLEdBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsV0FBVyxNQUFPLElBQUcsa0JBQW1CLEdBQUUsRUFBRSxLQUFLLEtBQUssTUFBTSxFQUFFLGtCQUFtQixHQUFFLEVBQUUsS0FBSyxLQUFLLE1BQU0sSUFBSSxFQUFFLEVBQUUsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxHQUFHLE1BQU0sUUFBUSxHQUFHLEdBQUcsR0FBRyxDQUFFLE9BQU8sR0FBRSxTQUFTLEdBQUcsSUFBSSxHQUFJLE1BQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEtBQUssSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUksT0FBTyxJQUFHLEdBQUcsRUFBRSxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsT0FBTyxPQUFPLEdBQUcsS0FBTSxPQUFPLEdBQUUsRUFBRSxFQUFFLEdBQUcsRUFBc2tCLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBMHRCLFFBQVMsR0FBRSxHQUFHLEdBQUksR0FBRSxHQUFHLElBQUksRUFBRyxHQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBeHdCLEdBQUcsa0JBQW1CLEtBQUksRUFBRSxFQUFFLFNBQVMsU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsS0FBTSxJQUFHLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxJQUFLLElBQUcsTUFBTSxRQUFRLEdBQUcsSUFBSSxFQUFFLEVBQUUsT0FBTyxLQUFLLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxLQUFLLFdBQVksSUFBRyxFQUFFLEdBQUcsSUFBSSxHQUFJLEtBQUssR0FBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUcsR0FBRSxNQUFNLElBQUksR0FBRyxTQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxNQUFPLElBQUcsRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLFNBQVUsSUFBRyxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksRUFBRSxFQUFFLEtBQUssS0FBSyxFQUFFLFFBQVMsSUFBRyxFQUFFLEdBQUcsSUFBSSxHQUFJLEtBQUssR0FBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsR0FBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEtBQUssR0FBRyxJQUFJLEtBQUssTUFBTSxHQUFHLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxVQUFXLElBQUcsRUFBRSxJQUFJLEdBQUksS0FBSyxHQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxtQkFBbUIsS0FBSSxFQUFFLElBQUksS0FBSyxFQUFFLE9BQU8sTUFBTSxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsRUFBRSxRQUFRLElBQUksRUFBRSxRQUFRLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sR0FBRyxFQUFHLElBQUksR0FBRSxJQUFLLEtBQUksSUFBSyxHQUFFLEVBQUUsRUFBRyxLQUFJLElBQUssR0FBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQXVELE9BQU8sR0FBRSxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLGdCQUFpQixHQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxFQUFHLElBQUksR0FBRSxFQUFFLEVBQUcsSUFBRyxFQUFFLEVBQUUsR0FBRyxNQUFPLEdBQUUsRUFBRyxJQUFJLEdBQUUsRUFBRSxFQUFHLE9BQU8sR0FBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsUUFBUSxFQUFFLEtBQU0sSUFBRyxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxXQUFXLEdBQUUsTUFBUSxJQUFHLEtBQUssR0FBRyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUksR0FBRSxHQUFHLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssR0FBRSxHQUFJLE9BQUcsS0FBUyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksRUFBRSxFQUFFLFdBQVIsQ0FBMEIsR0FBSSxHQUFFLEVBQUUsT0FBUSxPQUFHLElBQUcsRUFBRSxTQUFTLGVBQVcsS0FBUyxFQUFFLFNBQVMsVUFBVSxRQUFJLEtBQVMsRUFBRSxPQUFPLEdBQVUsRUFBRSxPQUFPLEdBQVMsa0JBQW1CLElBQUcsYUFBYSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssR0FBRyxJQUFHLEVBQUUsRUFBRSxFQUFHLElBQUksR0FBRSxFQUFHLEtBQUcsR0FBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLE1BQU8sR0FBRSxRQUFTLElBQUcsR0FBRyxHQUFJLEdBQUUsR0FBRyxFQUFFLFdBQVcsTUFBTSxxQkFBc0IsT0FBTyxHQUFFLEVBQUUsR0FBRyxHQUFHLFFBQVMsSUFBRyxFQUFFLEdBQUcsTUFBTyxJQUFHLEtBQUssR0FBRyxHQUFHLFFBQVMsSUFBRyxFQUFFLEdBQUcsSUFBSSxNQUFNLFFBQVEsR0FBRyxNQUFPLElBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBRSxLQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxNQUFPLEVBQUUsUUFBTyxFQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxJQUFLLEtBQUksR0FBRyxFQUFFLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxHQUFJLEdBQUUsRUFBRSxTQUFTLGFBQWMsSUFBRyxFQUFFLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxJQUFJLElBQUcsSUFBSyxFQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sTUFBTSxHQUFHLEdBQUcsRUFBRSxFQUFFLHVCQUF1QixHQUFHLEVBQUUsRUFBRSxHQUFHLFFBQVEsTUFBTSxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksRUFBRSxNQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxTQUFTLEdBQUcsTUFBTyxJQUFHLEVBQUUsRUFBRSxFQUFFLHNCQUFzQixFQUFFLFVBQVMsR0FBSSxNQUFNLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxNQUFPLEdBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxhQUFhLElBQUksTUFBTyxHQUFFLGFBQWEsS0FBSyxLQUFLLEVBQUUsRUFBRSxHQUFHLE1BQU0sR0FBRyxJQUFJLEdBQUcsR0FBRyxFQUFFLEtBQUssdUJBQXVCLEdBQUcsRUFBRSxFQUFFLEdBQUcsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxHQUFHLG1CQUFvQixTQUFRLEtBQU0sRUFBRSxTQUFRLE1BQU0sR0FBNEIsUUFBUyxNQUFLLElBQUcsQ0FBRyxJQUFJLEdBQUUsR0FBRyxNQUFNLEVBQUcsSUFBRyxPQUFPLENBQUUsS0FBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsS0FBaWlCLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxFQUFFLElBQUcsR0FBRyxLQUFLLFdBQVcsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEdBQUcsTUFBTSxHQUFHLEdBQUcsRUFBRSxFQUFFLGdCQUFpQixJQUFHLEVBQUUsS0FBSyxLQUFLLElBQUcsRUFBRyxPQUFPLEdBQUcsbUJBQW9CLFNBQVEsTUFBTyxJQUFJLFNBQVEsU0FBUyxHQUFHLEVBQUUsSUFBa0IsUUFBUyxJQUFHLElBQUksUUFBUyxHQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBTSxFQUFFLE1BQU0sUUFBUSxFQUFHLE9BQUksSUFBSSxFQUFFLElBQUksT0FBTyxTQUFTLElBQUksWUFBYSxLQUEvQyxDQUF5RCxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUksR0FBRSxFQUFFLE9BQU8sSUFBSSxFQUFHLElBQUcsRUFBRSxJQUFJLEdBQUcsTUFBTyxHQUFFLElBQUksR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBTyxLQUFLLEVBQUUsRUFBRSxHQUFHLE9BQVEsS0FBSSxFQUFFLE9BQU8sS0FBSyxHQUFHLEVBQUUsRUFBRSxPQUFPLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxLQUFJLEVBQUUsSUFBSSxHQUFHLFFBQTBMLFFBQVMsSUFBRyxFQUFFLEdBQUcsUUFBUyxLQUFJLEdBQUksR0FBRSxVQUFVLEVBQUUsRUFBRSxHQUFJLEtBQUksTUFBTSxRQUFRLEdBQUcsTUFBTyxJQUFHLEVBQUUsS0FBSyxVQUFVLEVBQUUsZUFBZ0IsS0FBSSxHQUFJLEdBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxFQUFFLGdCQUFnQixNQUFPLEdBQUUsSUFBSSxFQUFFLEVBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUUsQ0FBRSxLQUFJLElBQUssR0FBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFJLEtBQUksSUFBSyxHQUFFLEVBQUUsRUFBRSxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksS0FBSyxFQUFFLEdBQUcsRUFBRSxTQUFTLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBdUUsUUFBUyxLQUFJLEVBQUUsTUFBTSxLQUFLLFdBQVcsRUFBRSxFQUFFLElBQUksR0FBakgsR0FBSSxFQUFFLGFBQWEsTUFBSyxFQUFFLEVBQUUsS0FBSyxPQUFPLEVBQUUsS0FBSyxTQUFVLElBQUksR0FBRSxFQUFFLEVBQW1ELEdBQUUsR0FBRyxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxLQUFLLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQU8sRUFBRyxFQUFFLEdBQUcsRUFBRSxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxNQUFPLEdBQUUsR0FBRyxFQUFFLEdBQUcsU0FBVSxHQUFFLElBQUcsQ0FBRyxJQUFHLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxHQUFHLEVBQUUsR0FBRyxTQUFVLEdBQUUsSUFBRyxFQUFHLE9BQU0sRUFBRyxRQUFTLElBQUcsR0FBRyxNQUFPLEdBQUUsSUFBSSxHQUFHLElBQUksTUFBTSxRQUFRLEdBQUcsUUFBUyxHQUFFLEVBQUUsR0FBRyxHQUFhLEdBQUUsRUFBRSxFQUFFLEVBQWYsSUFBaUIsS0FBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLGlCQUFrQixLQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTSxRQUFRLEdBQUcsRUFBRSxPQUFPLElBQUksSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLEtBQUssR0FBRyxLQUFLLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLEdBQUcsS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxJQUFLLE9BQU8sSUFBRyxPQUFHLEdBQU8sUUFBUyxJQUFHLEdBQUcsTUFBTyxHQUFFLElBQUksRUFBRSxFQUFFLFFBQU8sSUFBSyxFQUFFLFVBQVUsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEdBQUksR0FBRSxPQUFPLE9BQU8sTUFBTSxFQUFFLEdBQUcsUUFBUSxRQUFRLEdBQUcsT0FBTyxLQUFLLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLElBQUcsV0FBVyxFQUFFLENBQUMsSUFBSSxHQUFJLEdBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLEVBQUUsVUFBVSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFHLE9BQU0sRUFBRSxFQUFFLFFBQVEsSUFBSSxHQUFHLFdBQVksR0FBRSxHQUFHLENBQUMsR0FBSSxHQUFFLEVBQUUsR0FBRyxPQUFRLEdBQUUsR0FBRyxrQkFBbUIsR0FBRSxFQUFFLEtBQUssR0FBRyxJQUFJLE1BQU8sSUFBRyxRQUFTLElBQUcsRUFBRSxHQUFHLElBQUksSUFBSSxFQUFFLE9BQU8sUUFBUyxLQUFJLEdBQUksTUFBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFLLElBQUcsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLFlBQWEsR0FBRSxNQUFNLEtBQUssRUFBRSxVQUFVLEdBQUcsRUFBRSxZQUFZLElBQUksR0FBRyxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxhQUFhLEtBQUssT0FBTyxDQUFDLEdBQUksR0FBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFPLGNBQWEsRUFBRSxJQUFJLEVBQUUsS0FBSyxNQUFNLEVBQUUsRUFBRSxjQUFjLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBSSxLQUFLLEdBQUUsRUFBRSxHQUFHLE1BQU0sV0FBWSxHQUFFLEVBQUcsT0FBTyxHQUFFLFFBQVMsSUFBRyxHQUFHLE1BQU8sR0FBRSxZQUFZLEVBQUUsY0FBYyxNQUFNLEVBQUUsS0FBSyxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsT0FBTyxLQUFLLEdBQUcsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFLLElBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLE1BQU8sR0FBRSxXQUFZLElBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLEVBQUUsT0FBTyxJQUFJLEVBQUUsV0FBVyxNQUFPLEVBQUUsS0FBSSxHQUFJLEtBQUssTUFBSyxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFVLEtBQUssS0FBSSxHQUFJLEtBQUssR0FBRSxJQUFLLEtBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFJLE9BQU8sSUFBRyxPQUFPLGFBQWEsS0FBSyxFQUFFLFlBQVksR0FBRyxFQUFFLEVBQUUsVUFBVSxHQUFHLEVBQUUsRUFBRSxPQUFPLEdBQUcsRUFBRSxFQUFFLGFBQWEsR0FBRyxFQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsV0FBVyxHQUFJLEdBQUUsVUFBVSxPQUFPLEVBQUUsTUFBTSxLQUFLLFdBQVcsS0FBTSxRQUFPLEVBQUUsR0FBRyxnQkFBaUIsS0FBSSxNQUFNLFFBQVEsSUFBSSxHQUFHLEdBQUcsTUFBTSxJQUFJLEVBQUUsUUFBUSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsZUFBVyxHQUFPLEVBQUcsT0FBTyxHQUFFLE9BQU8sT0FBTyxlQUFlLEVBQUUsR0FBRyxJQUFJLEVBQUUsWUFBVyxFQUFHLGNBQWEsSUFBSyxFQUFFLFFBQVMsSUFBRyxFQUFFLEdBQUcsTUFBTyxZQUFXLE1BQU8sR0FBRSxJQUFJLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLENBQUUsSUFBRyxNQUFNLFFBQVEsSUFBSSxnQkFBaUIsR0FBRSxJQUFJLEVBQUUsR0FBSSxPQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQVEsSUFBRyxnQkFBaUIsR0FBRSxJQUFJLEVBQUUsR0FBSSxPQUFNLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxPQUFRLElBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxFQUFFLE9BQU8sVUFBVSxDQUFDLElBQUssS0FBSSxHQUFJLEdBQUUsRUFBRSxPQUFPLFlBQVksRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLFdBQVksS0FBSSxFQUFFLE9BQU8sS0FBSyxHQUFHLEVBQUUsR0FBSSxPQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRyxPQUFPLEdBQUUsS0FBSyxNQUFNLEVBQUUsVUFBUyxFQUFHLEVBQUUsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsS0FBSyxhQUFhLEVBQUcsSUFBRyxFQUFFLE1BQU0sSUFBSSxFQUFFLEVBQUUsS0FBSyxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLEtBQUssT0FBTyxJQUFJLENBQUUsSUFBSSxHQUFFLEdBQUcsRUFBRSxJQUFLLE9BQU8sR0FBRSxLQUFLLGVBQWUsWUFBWSxLQUFLLEdBQUcsR0FBRyxFQUFFLFFBQVMsSUFBRyxHQUFHLE1BQU8sSUFBRyxLQUFLLFNBQVMsVUFBVSxJQUFJLEVBQUUsUUFBUyxJQUFHLEVBQUUsR0FBRyxNQUFPLE9BQU0sUUFBUSxJQUFJLElBQUksRUFBRSxRQUFRLEdBQUcsSUFBSSxFQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsU0FBUyxJQUFJLENBQUUsT0FBTyxJQUFHLElBQUksRUFBRSxTQUFTLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxNQUFFLEdBQU8sUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUssRUFBRSxHQUFHLENBQUMsR0FBSSxFQUFFLE9BQU0sUUFBUSxLQUFLLEVBQUUsRUFBRSxHQUFnUixLQUFJLEdBQUksS0FBSyxJQUFuUixTQUFTLEdBQUcsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFJLEdBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxJQUFLLEdBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxVQUFVLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUcsS0FBSyxJQUFHLElBQUssS0FBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxVQUFVLEdBQUcsU0FBUyxHQUFHLEVBQUUsR0FBRyxNQUF1QixHQUFRLE1BQU8sR0FBRSxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxLQUFLLGVBQWUsS0FBSyxpQkFBaUIsRUFBRSxFQUFFLEVBQUcsT0FBTyxLQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEtBQUssU0FBUyxnQkFBZ0IsR0FBRyxLQUFLLEtBQUssYUFBYSxLQUFLLE1BQU0sYUFBYSxHQUFFLEdBQUksR0FBRyxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTyxJQUFHLEVBQUUsV0FBVyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUksR0FBSSxFQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLElBQUksZ0JBQWlCLEdBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxPQUFRLElBQUcsRUFBRSxFQUFFLEdBQUcsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsVUFBUyxFQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBRyxHQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxNQUFPLEtBQUksR0FBSSxLQUFLLEdBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFHLEdBQUUsR0FBRyxLQUFLLE9BQU8sRUFBRSxHQUFHLEdBQVEsTUFBTyxHQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxTQUFTLEVBQUcsS0FBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxPQUFNLFFBQVEsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxPQUFNLEdBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLE1BQU8sS0FBSSxFQUFFLEtBQUssR0FBRyxFQUFFLFFBQVMsSUFBRyxFQUFFLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLGlCQUFpQixJQUFHLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksTUFBTyxHQUFFLFFBQVMsSUFBRyxFQUFFLEdBQUcsTUFBTSxnQkFBaUIsR0FBRSxFQUFFLEVBQUUsRUFBRSxRQUFTLElBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEtBQUssRUFBRSxFQUFFLE9BQVEsR0FBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLE9BQU8sSUFBSSxVQUFVLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxVQUFXLElBQUksR0FBRSxFQUFFLEVBQUUsV0FBVyxHQUFHLENBQUUsTUFBSyxLQUFLLEVBQUUsS0FBSyxNQUFNLEVBQUUsS0FBSyxTQUFTLEVBQUUsS0FBSyxPQUFPLEVBQUUsS0FBSyxVQUFVLEVBQUUsSUFBSSxFQUFFLEtBQUssV0FBVyxHQUFHLEVBQUUsT0FBTyxHQUFHLEtBQUssTUFBTSxXQUFXLE1BQU8sR0FBRSxRQUFRLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsT0FBTyxlQUFlLEtBQUssZUFBZSxZQUFXLEVBQUcsSUFBSSxXQUFXLE1BQU8sSUFBRyxFQUFFLFlBQVksS0FBSyxZQUFZLElBQUksS0FBSyxTQUFTLEVBQUUsS0FBSyxPQUFPLEtBQUssUUFBUSxLQUFLLGFBQWEsR0FBRyxFQUFFLFlBQVksS0FBSyxTQUFTLEVBQUUsU0FBUyxLQUFLLEdBQUcsU0FBUyxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFHLE9BQU8sS0FBSSxNQUFNLFFBQVEsS0FBSyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxHQUFHLEdBQUcsS0FBSyxHQUFHLFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFPLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsR0FBRyxFQUFHLE9BQU8sR0FBRSxVQUFVLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFTLElBQUcsRUFBRSxHQUFHLElBQUksR0FBSSxLQUFLLEdBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxHQUF5a0QsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUksR0FBRSxFQUFFLFNBQVMsS0FBTSxJQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsT0FBTyxJQUFJLGtCQUFtQixHQUFFLENBQUMsR0FBSSxFQUFFLElBQUcsRUFBRSxFQUFFLFVBQU0sTUFBVSxFQUFFLFNBQVMsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLFdBQVcsTUFBTyxHQUFFLFNBQVUsSUFBRyxFQUFFLEVBQUUsVUFBVSxNQUFPLEdBQUUsUUFBUyxJQUFJLEdBQUUsRUFBOEQsSUFBM0QsR0FBRyxFQUFFLEVBQUUsVUFBVSxJQUFJLEVBQUUsT0FBTyxRQUFRLElBQUksRUFBRSxPQUFPLEtBQUssR0FBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsYUFBYSxNQUFPLEdBQUUsV0FBWSxJQUFHLElBQUksRUFBRSxFQUFFLFFBQVEsQ0FBQyxHQUFJLEdBQUUsRUFBRSxRQUFRLEdBQUcsR0FBRSxFQUFHLEVBQUUsS0FBSyxFQUFFLElBQUssR0FBRSxJQUFJLGlCQUFpQixXQUFXLE1BQU8sR0FBRSxFQUFFLElBQUssSUFBSSxHQUFFLFNBQVMsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxjQUFlLEtBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxJQUFJLGFBQWEsR0FBRyxFQUFFLE1BQU0sT0FBTyxJQUFJLGFBQWEsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLFNBQVMsR0FBRyxFQUFFLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFFLEtBQU0sRUFBRSxFQUFFLFNBQVMsR0FBRyxFQUFFLEVBQUUsYUFBYSxFQUFFLE9BQU0sRUFBRyxHQUFFLE1BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRyxPQUFPLEdBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsYUFBYSxFQUFFLFVBQVUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxVQUFVLEdBQUcsRUFBRSxNQUFNLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRSxZQUFZLEdBQUcsRUFBRSxRQUFRLEdBQUcsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFRLEVBQUcsRUFBRSxXQUFXLFdBQVcsRUFBRSxLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUSxFQUFHLEdBQUUsS0FBTSxFQUFFLE9BQU8sTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLFdBQVcsV0FBVyxFQUFFLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsWUFBWSxHQUFFLEVBQUcsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxFQUFFLElBQUksTUFBTyxVQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsSUFBSyxPQUFPLEdBQUUsYUFBYSxFQUFFLEVBQUUsV0FBVyxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUcsR0FBRSxNQUFNLEdBQUcsR0FBRyxFQUFFLEVBQUUsUUFBUSxTQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLFFBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sU0FBUyxFQUFFLFFBQVEsRUFBRSxXQUFXLEdBQUcsRUFBRSxNQUFNLEtBQU0sSUFBSSxHQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLE1BQU0sUUFBUyxHQUFFLElBQUksTUFBTSxRQUFRLElBQUksSUFBSSxFQUFFLFFBQVEsR0FBRyxJQUFJLEtBQUssRUFBRSxJQUFJLEdBQUcsT0FBTyxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsUUFBUSxFQUFHLElBQUksR0FBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLFFBQVEsS0FBTSxLQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUksTUFBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBTSxJQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFJLEtBQUssR0FBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsSUFBRyxFQUFFLEVBQUUsRUFBRSxHQUFFLElBQUssR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFFLEdBQUksTUFBTyxLQUFJLEVBQUUsRUFBRyxJQUFHLEVBQUUsRUFBRSxRQUFRLFlBQVksTUFBTyxVQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxRQUFRLEtBQUssRUFBRSxFQUFFLEtBQU0sSUFBRyxFQUFFLEdBQUcsSUFBSSxHQUFJLEtBQUssR0FBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxPQUFRLEdBQUUsRUFBRSxRQUFRLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLFFBQVEsR0FBRyxFQUFFLEVBQUUsTUFBTyxJQUFJLEdBQUUsR0FBSSxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxLQUFLLEtBQUssRUFBRSxHQUFHLEVBQUcsSUFBRyxZQUFhLElBQUcsTUFBTyxJQUFHLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRyxJQUFHLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxHQUFJLEdBQUUsR0FBRyxPQUFPLEVBQUUsR0FBSSxPQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRyxPQUFPLEtBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFHLElBQUksR0FBRSxFQUFFLEVBQUcsSUFBRyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxRQUFRLFVBQVUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxJQUFLLE1BQUssSUFBSSxFQUFFLEtBQUssSUFBSSxTQUFTLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sSUFBSSxDQUFDLEdBQUksR0FBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUcsS0FBSSxHQUFHLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRyxJQUFJLEdBQUUsRUFBRSxRQUFRLE1BQU0sQ0FBRSxPQUFPLElBQUksSUFBRyxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksTUFBRSxPQUFPLE9BQU8sR0FBTyxHQUFHLEtBQUssRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxTQUFTLEdBQUcsS0FBSyxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBSSxPQUFPLEdBQUUsU0FBUSxFQUFHLEVBQWdCLFFBQVMsSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLE1BQU0sUUFBUSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQUUsSUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxRQUFRLE1BQU8sS0FBNkIsSUFBeEIsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFRLEVBQUUsTUFBTyxLQUFLLE9BQU0sUUFBUSxJQUFJLGtCQUFtQixHQUFFLE1BQU0sRUFBRSxPQUFPLGFBQWEsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksS0FBSyxFQUFFLFNBQVMsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksR0FBRyxNQUFNLFFBQVEsRUFBRSxJQUFJLE1BQU8sT0FBTSxVQUFVLE9BQU8sU0FBUyxFQUFHLE9BQU8sSUFBRyxHQUFJLElBQUksR0FBRSxDQUFFLElBQUcsZ0JBQWlCLEdBQUUsQ0FBQyxHQUFJLEVBQUUsR0FBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLElBQUksRUFBRSxnQkFBZ0IsR0FBRyxFQUFFLEVBQUUsY0FBYyxHQUFHLEdBQUksSUFBRyxFQUFFLHFCQUFxQixHQUFHLEVBQUUsTUFBRSxPQUFPLEdBQU8sR0FBRyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsYUFBYSxJQUFJLEdBQUksSUFBRyxFQUFFLEVBQUUsTUFBRSxPQUFPLEdBQU8sR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBUSxHQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRyxPQUFPLE9BQU0sUUFBUSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxRQUFTLEdBQUUsRUFBRSxFQUFFLEdBQW1ELEdBQWhELEVBQUUsR0FBRyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sTUFBRSxHQUFPLEdBQUUsR0FBTyxFQUFFLEVBQUUsVUFBVSxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxTQUFTLEVBQUcsR0FBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxTQUFTLEdBQUcsRUFBRSxFQUFFLFFBQVEsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLFFBQVEsR0FBRyxFQUFFLFFBQVEsR0FBRyxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFrQixRQUFTLElBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxZQUFZLElBQUksV0FBVyxFQUFFLE9BQU8sZ0JBQWdCLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU8sR0FBRyxFQUFFLFFBQVMsSUFBRyxHQUFHLE1BQU8sR0FBRSxXQUFXLEVBQUUsYUFBYSxRQUFTLElBQUcsR0FBRyxHQUFHLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsSUFBRyxFQUFFLEtBQUssRUFBRSxFQUFFLG1CQUFtQixHQUFHLElBQUksTUFBTyxJQUFHLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQUcsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRyxPQUFPLFNBQVMsS0FBSSxPQUFPLEVBQUUsTUFBTSxLQUFLLFlBQVksRUFBRSxLQUFLLEVBQUUsSUFBSSxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsT0FBRyxHQUFtQixRQUFTLElBQUcsR0FBRyxHQUFJLEdBQUUsRUFBRyxPQUFPLElBQUcsRUFBRSxXQUFXLEdBQUcsR0FBRyxRQUFTLElBQUcsR0FBRyxLQUFLLElBQUksRUFBRSxFQUFFLFVBQVUsR0FBRyxFQUFFLFVBQVUsT0FBTSxDQUFHLFFBQU0sRUFBRyxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsaUJBQWdCLEVBQUcsR0FBRyxHQUFHLFdBQVksSUFBRyxFQUFFLGdCQUFnQixNQUFPLElBQUcsRUFBRSxXQUFXLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRSxXQUFVLENBQUcsS0FBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVSxPQUFPLElBQUksR0FBRyxFQUFFLFVBQVUsR0FBSSxJQUFHLEVBQUUsY0FBYyxRQUFTLElBQUcsRUFBRSxHQUFHLElBQUssSUFBSSxHQUFFLEVBQUUsU0FBUyxHQUFHLEVBQUUsRUFBRSxPQUFRLElBQUcsRUFBRSxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUcsR0FBRSxlQUFlLEVBQUUsTUFBTSxRQUFRLEdBQUcsS0FBbU4sUUFBUyxNQUFLLEdBQUksR0FBRSxDQUFFLEtBQUksR0FBRyxLQUFLLElBQUcsRUFBRyxHQUFHLEtBQUssU0FBUyxFQUFFLEdBQUcsTUFBTyxHQUFFLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsT0FBTyxNQUFNLEVBQUUsR0FBRyxLQUFLLFFBQVEsRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxLQUFLLEVBQUUsS0FBTSxJQUFJLEdBQUUsR0FBRyxRQUFRLEVBQUUsR0FBRyxPQUFRLElBQUcsR0FBRyxPQUFPLEdBQUcsT0FBTyxFQUFFLE1BQU0sR0FBRyxJQUFHLEVBQUcsU0FBUyxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLEdBQUcsV0FBVSxFQUFHLEdBQUcsRUFBRSxJQUFHLElBQUssR0FBRyxTQUFTLEdBQWtCLElBQWYsR0FBSSxHQUFFLEVBQUUsT0FBWSxLQUFLLENBQUMsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRyxHQUFFLFdBQVcsR0FBRyxFQUFFLGFBQWEsRUFBRSxjQUFjLEdBQUcsRUFBRSxhQUFhLEdBQUcsSUFBSSxFQUFFLFVBQVUsR0FBRyxLQUFLLFNBQXVwRSxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLFdBQVcsTUFBTyxNQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksU0FBUyxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsT0FBTyxlQUFlLEVBQUUsRUFBRSxJQUFJLFFBQVMsSUFBRyxHQUFHLEVBQUUsWUFBYSxJQUFJLEdBQUUsRUFBRSxRQUFTLEdBQUUsT0FBTyxTQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxTQUFTLGNBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLFNBQVMsWUFBYSxHQUFFLFNBQVMsSUFBRyxFQUFzRixLQUFJLEdBQUksS0FBSyxJQUF6RixTQUFTLEdBQUcsRUFBRSxLQUFLLEVBQUcsSUFBSSxHQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRyxJQUFHLEVBQUUsRUFBRSxHQUFHLElBQUssSUFBRyxHQUFHLEVBQUUsU0FBUyxJQUFxQixFQUFHLEtBQUcsSUFBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLFNBQVMsU0FBUyxFQUFFLEdBQUcsRUFBRSxTQUFTLEtBQU0sS0FBSSxHQUFJLEtBQUssR0FBRSxFQUFFLEdBQUcsa0JBQW1CLEdBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxTQUFTLElBQUssR0FBRSxFQUFFLEVBQUUsTUFBTSxrQkFBbUIsR0FBRSxTQUFTLEVBQUUsR0FBRyxJQUFLLEtBQUksTUFBTyxHQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sR0FBRyxNQUFPLElBQUcsRUFBRSxFQUFFLGFBQWEsUUFBUSxPQUFPLEVBQUUsR0FBRyxTQUFTLEtBQThFLEtBQXhFLEdBQUksR0FBRSxPQUFPLEtBQUssR0FBRyxFQUFFLEVBQUUsU0FBUyxNQUFNLEdBQUcsRUFBRSxTQUFTLFFBQVEsRUFBRSxRQUFhLEtBQUssQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLElBQUcsRUFBRSxFQUFFLEtBQUssTUFBRSxHQUFPLE1BQU0sR0FBRyxFQUFFLElBQUksV0FBVyxLQUFLLEtBQUssR0FBRyxHQUFHLEVBQUUsUUFBUSxJQUFJLEdBQUksRUFBRSxJQUFHLEdBQUUsSUFBSyxHQUFHLEdBQUcsRUFBRSxVQUFTLEdBQUksRUFBRSxVQUFVLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLGtCQUFrQixPQUFPLE9BQU8sTUFBTSxFQUFFLEdBQUksS0FBSSxHQUFJLEtBQUssR0FBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxrQkFBbUIsR0FBRSxFQUFFLEVBQUUsR0FBSSxLQUFJLEVBQUUsR0FBRyxHQUFJLElBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLElBQUssSUFBRyxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFFBQVEsR0FBRyxTQUFTLEVBQUUsR0FBRyxJQUFJLEdBQUksS0FBSyxHQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxHQUFHLEVBQUUsRUFBRSxFQUFFLFFBQVMsSUFBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsT0FBd0IsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUksSUFBRyxHQUFJLG1CQUFtQixJQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxJQUFHLElBQUssRUFBRSxNQUFNLEdBQUcsR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxFQUFFLEtBQUssR0FBRyxPQUFPLGVBQWUsRUFBRSxFQUFFLElBQUksUUFBUyxJQUFHLEdBQUcsTUFBTyxZQUFXLEdBQUksR0FBRSxLQUFLLG1CQUFtQixLQUFLLGtCQUFrQixFQUFHLElBQUcsRUFBRSxNQUFPLEdBQUUsT0FBTyxFQUFFLFdBQVcsR0FBRyxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sUUFBUyxJQUFHLEdBQUcsTUFBTyxZQUFXLE1BQU8sR0FBRSxLQUFLLEtBQUssT0FBTyxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFPLEdBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsZ0JBQWlCLEtBQUksRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFZLFFBQVMsSUFBRyxHQUFHLEdBQUksR0FBRSxFQUFFLE9BQVEsSUFBRyxFQUFFLE1BQU0sQ0FBQyxHQUFJLEdBQUUsR0FBRyxFQUFFLE1BQU8sSUFBRyxJQUFJLEVBQUUsYUFBYSxDQUFDLEVBQUUsYUFBYSxDQUFFLElBQUksR0FBRSxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxhQUFjLEtBQUksR0FBSSxLQUFLLEdBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxJQUFJLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBSSxPQUFPLElBQUcsRUFBRyxJQUFHLEVBQUUsRUFBRSxjQUFjLElBQUksRUFBRSxFQUFFLFFBQVEsR0FBRyxFQUFFLEVBQUUsZ0JBQWdCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxJQUFJLE1BQU8sR0FBRSxRQUFTLElBQUcsR0FBRyxLQUFLLE1BQU0sR0FBRyxRQUFTLElBQUcsR0FBRyxFQUFFLElBQUksQ0FBRSxJQUFJLEdBQUUsQ0FBRSxHQUFFLE9BQU8sU0FBUyxHQUFHLEVBQUUsS0FBTSxJQUFJLEdBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLFNBQVUsSUFBRyxFQUFFLEdBQUcsTUFBTyxHQUFFLEVBQUcsSUFBSSxHQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsS0FBSyxFQUFFLFNBQVMsR0FBRyxLQUFLLE1BQU0sR0FBSSxRQUFPLEVBQUUsVUFBVSxPQUFPLE9BQU8sRUFBRSxZQUFZLFlBQVksRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLFFBQVEsR0FBRyxFQUFFLFFBQVEsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLFFBQVEsT0FBTyxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUUsUUFBUSxLQUFNLEtBQUksR0FBSSxLQUFLLEdBQUUsR0FBRyxFQUFFLFVBQVUsU0FBUyxJQUFJLEdBQUcsRUFBRSxRQUFRLFVBQVUsU0FBUyxHQUFHLEdBQUksR0FBRSxFQUFFLFFBQVEsUUFBUyxLQUFJLEdBQUksS0FBSyxHQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxRQUFRLFdBQVcsR0FBRyxHQUFHLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsRUFBRSxjQUFjLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEdBQUcsUUFBUyxJQUFHLEdBQUcsTUFBTyxLQUFJLEVBQUUsS0FBSyxRQUFRLE1BQU0sRUFBRSxLQUFLLFFBQVMsSUFBRyxFQUFFLEdBQUcsTUFBTyxPQUFNLFFBQVEsR0FBRyxFQUFFLFFBQVEsSUFBSSxFQUFFLGdCQUFpQixHQUFFLEVBQUUsTUFBTSxLQUFLLFFBQVEsSUFBSSxHQUFHLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxLQUFLLElBQUksRUFBRSxLQUFLLEdBQUksSUFBSSxHQUFFLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTyxLQUFJLEdBQUksS0FBSyxHQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLEVBQUUsQ0FBQyxHQUFJLEdBQUUsR0FBRyxFQUFFLGlCQUFrQixLQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixXQUFXLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxHQUFvN04sUUFBUyxJQUFHLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLHFCQUFxQixFQUFFLEVBQUUsa0JBQWtCLFNBQVMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssR0FBSSxNQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxNQUFPLE9BQU8sVUFBUyxFQUFFLEdBQUcsTUFBRyxHQUFFLElBQUksRUFBRSxHQUFVLEdBQUcsRUFBRSxHQUFHLElBQVUsSUFBSSxFQUFFLFlBQVksRUFBRSxPQUFPLFFBQVMsSUFBRyxFQUFFLEdBQUcsT0FBTyxZQUFZLEdBQUcsRUFBRSxZQUFZLEVBQUUsYUFBYSxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLFFBQVMsSUFBRyxFQUFFLEdBQUcsTUFBTyxHQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsUUFBUyxJQUFHLEdBQUcsTUFBTyxPQUFNLFFBQVEsR0FBRyxTQUFTLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRyxPQUFPLElBQUcsR0FBRyxFQUFFLEdBQUcsU0FBUyxHQUFHLEdBQUksR0FBRSxFQUFHLEtBQUksR0FBSSxLQUFLLEdBQUUsRUFBRSxLQUFLLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRyxPQUFPLElBQUcsR0FBRyxnQkFBaUIsR0FBRSxFQUFFLEdBQXM1RCxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEtBQUssR0FBSSxJQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUksR0FBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxFQUFFLEtBQU0sR0FBRSxNQUFNLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxPQUFHLElBQVEsRUFBRSxLQUFLLFNBQVMsTUFBTSxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsUUFBUSxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBZ0YsUUFBUyxJQUFHLEVBQUUsR0FBRyxNQUFPLEdBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxPQUFPLFNBQVMsRUFBRSxHQUFHLEdBQUcsVUFBVSxFQUFFLElBQUksT0FBTSxDQUFHLElBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFLLE9BQU8sS0FBSSxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLEVBQUUsYUFBYSxRQUFRLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxJQUFLLEtBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsRUFBRyxPQUFPLEdBQTZELFFBQVMsSUFBRyxFQUFFLElBQUksRUFBRSxLQUFLLFlBQVksRUFBRSxLQUFLLGFBQWEsU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssV0FBVyxFQUFFLFNBQVMsS0FBSyxJQUFLLEtBQUksSUFBSyxHQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLGtCQUFrQixFQUFFLEtBQUssS0FBSyxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxVQUFVLEVBQUUsS0FBSyxHQUFJLElBQUcsRUFBRSxPQUFPLENBQUMsR0FBSSxHQUFFLFdBQVcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEdBQUcsRUFBRSxHQUFHLFdBQVcsRUFBRSxHQUFJLEdBQUUsR0FBRyxFQUFFLFNBQVMsR0FBRyxJQUF1RyxHQUFuRyxFQUFFLFFBQVEsR0FBRyxFQUFFLFlBQVksV0FBVyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksR0FBRyxFQUFFLEdBQUcsbUJBQW1CLEVBQUUsTUFBUyxFQUFFLElBQUksSUFBSyxHQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBOEIsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFFLE9BQU8sT0FBTyxLQUFNLEtBQUksRUFBRSxNQUFPLEVBQUUsS0FBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sS0FBSyxFQUFFLEVBQUUsSUFBSSxZQUFZLEVBQUUsVUFBVSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxTQUFTLGFBQWEsRUFBRSxLQUFNLE9BQU8sR0FBRSxRQUFTLElBQUcsR0FBRyxNQUFPLEdBQUUsU0FBUyxFQUFFLEtBQUssSUFBSSxPQUFPLEtBQUssRUFBRSxlQUFlLEtBQUssS0FBSyxRQUFTLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUcsSUFBRyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFNLEdBQUcsR0FBRyxFQUFFLEVBQUUsUUFBUSxhQUFhLEVBQUUsS0FBSyxJQUFJLEVBQUUsVUFBeUIsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxnQkFBaUIsTUFBSyxFQUFFLEtBQUksSUFBSyxFQUFFLEtBQUssUUFBUSxjQUFjLEVBQUUsRUFBRSxLQUFLLFFBQVEsRUFBRSxFQUFFLEtBQUssUUFBUSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLFVBQVUsRUFBRSxFQUFFLEtBQUssU0FBVSxLQUFJLElBQUssR0FBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssTUFBTSxLQUFLLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFHLEtBQUksS0FBSyxHQUFHLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxHQUFHLEdBQUcsRUFBRSxrQkFBa0IsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLEVBQUUsZ0JBQWdCLEtBQUssUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsUUFBUSxRQUFRLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxnQkFBZ0IsSUFBSSxFQUFFLG9CQUFvQixHQUFHLFVBQVUsRUFBRSxRQUFRLE9BQU8sRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsa0JBQWtCLEdBQUcsR0FBRyxJQUFJLEVBQUUsZUFBZSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLGdCQUFnQixPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsYUFBYSxFQUFFLFNBQVMsZ0JBQWdCLEdBQUcsS0FBSyxJQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUksR0FBRSxTQUFTLEdBQUcsRUFBRSwyQkFBMkIsRUFBRSxvQkFBb0IsUUFBUSxHQUFJLEdBQUUsaUJBQWlCLFFBQVEsR0FBRyxFQUFFLFFBQU8sRUFBRyxFQUFFLGFBQWEsRUFBRSxJQUFpQyxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUssTUFBSyxFQUFFLEVBQUUsY0FBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxHQUFJLEdBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxrQkFBbUIsR0FBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxJQUFJLEVBQUUsYUFBYSxFQUFFLGFBQWEsUUFBUSxHQUFHLEVBQUUsV0FBVyxJQUFzRCxRQUFTLElBQUcsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUcsT0FBTyxTQUFTLEtBQUksT0FBTyxFQUFFLE1BQU0sS0FBSyxZQUFZLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBc0MsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBSSxHQUFFLEdBQUcsRUFBRSxDQUFFLEdBQUUsRUFBRSxTQUFTLFNBQVMsR0FBRyxHQUFHLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxXQUFXLEdBQUcsRUFBRSxXQUFXLEdBQUcsRUFBRSxPQUFPLGdCQUFnQixTQUFTLE1BQU8sR0FBRSxNQUFNLEtBQUssWUFBWSxHQUFHLGlCQUFpQixFQUFFLEVBQUUsR0FBRyxRQUFRLEVBQUUsUUFBUSxHQUFHLEdBQUcsUUFBUyxJQUFHLEVBQUUsRUFBRSxFQUFFLElBQUksR0FBRyxJQUFJLG9CQUFvQixFQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsUUFBUyxJQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxLQUFLLE1BQU0sRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEtBQUssT0FBTyxFQUFFLEVBQUUsS0FBSyxNQUFPLElBQUcsRUFBRSxJQUFJLFNBQVMsR0FBRyxHQUFHLEVBQUUsRUFBRSxLQUFLLENBQUMsR0FBSSxHQUFFLEVBQUUsU0FBUyxPQUFRLEdBQUUsTUFBTSxPQUFPLEVBQUUsSUFBSSxFQUFFLGNBQWUsR0FBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxPQUFPLEVBQUUsSUFBSSxFQUFFLGtCQUFtQixHQUFFLE1BQU0sR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLFNBQVMsT0FBRyxJQUF3QyxRQUFTLElBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEtBQUssWUFBWSxFQUFFLEVBQUUsS0FBSyxVQUFVLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssYUFBYSxFQUFFLEVBQUUsS0FBSyxZQUFhLEtBQUksSUFBSyxHQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxTQUFTLEtBQUssSUFBSSxFQUFFLElBQUssS0FBSSxFQUFFLEdBQUcsR0FBSSxLQUFJLElBQUssR0FBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsZ0JBQWdCLEdBQUcsY0FBYyxFQUFFLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLE9BQU8sR0FBRyxJQUFJLEVBQUUsR0FBRyxRQUFTLEtBQUksRUFBRSxXQUFXLFFBQVEsRUFBRSxZQUFZLEVBQUUsV0FBVyxJQUFJLEdBQUcsVUFBVSxHQUFHLGFBQWEsRUFBRSxRQUFRLENBQUMsRUFBRSxPQUFPLENBQUUsSUFBSSxHQUFFLEVBQUUsR0FBRyxHQUFHLE9BQU8sRUFBRyxJQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sT0FBUSxJQUFHLGNBQWMsR0FBRyxHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUUsV0FBVyxFQUFFLEdBQUcsSUFBSSxTQUFTLGNBQWMsUUFBUSxVQUFVLFFBQVEsRUFBRSxRQUFTLEtBQUksR0FBSSxHQUFFLEdBQUcsV0FBVyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsV0FBWSxNQUFLLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxnQkFBaUIsSUFBRyxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sT0FBTyxRQUFTLElBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxZQUFZLFdBQVcsRUFBRSxTQUFTLFNBQVMsRUFBRSxHQUFHLEdBQUksSUFBRSxDQUFHLEtBQUksRUFBRSxTQUFTLGdCQUFnQixFQUFFLE1BQU0sSUFBSSxNQUFPLElBQUcsRUFBRSxRQUFRLEdBQUcsRUFBRSxJQUFJLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFdBQVksSUFBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxNQUFPLEdBQUUsS0FBSyxFQUFFLEVBQUcsSUFBRyxFQUFFLEtBQUssTUFBTyxHQUFFLFNBQVMsRUFBRSxPQUFPLE1BQU8sS0FBSSxHQUFHLEVBQUUsSUFBZ00sUUFBUyxJQUFHLEdBQUcsR0FBSSxHQUFFLEdBQUcsRUFBRSxNQUFPLE9BQU8sR0FBRSxZQUFZLEVBQUUsRUFBRSxZQUFZLEdBQUcsRUFBRSxRQUFTLElBQUcsR0FBRyxNQUFPLE9BQU0sUUFBUSxHQUFHLEVBQUUsR0FBRyxnQkFBaUIsR0FBRSxHQUFHLEdBQUcsRUFBeWYsUUFBUyxJQUFHLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFLLE1BQUssRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLFVBQVcsR0FBRSxLQUFLLGdCQUFnQixFQUFFLEVBQUUsUUFBUSxLQUFLLEdBQUcsQ0FBRSxJQUFJLEdBQUUsU0FBUyxFQUFFLEdBQW1CLElBQUksR0FBaEIsR0FBRSxLQUFrQixFQUFFLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLGtCQUFrQixTQUFTLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUcsS0FBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRyxPQUFPLElBQUcsRUFBTSxLQUFJLElBQUssR0FBRSxFQUFFLEVBQUUsS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFJLEtBQUksSUFBSyxJQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUEwQyxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsVUFBVSxFQUFFLFFBQVEsTUFBTSxFQUFFLEVBQUUsTUFBTSxJQUFJLFFBQVEsU0FBUyxHQUFHLE1BQU8sR0FBRSxVQUFVLElBQUksS0FBSyxFQUFFLFVBQVUsSUFBSSxPQUFPLENBQUMsR0FBSSxHQUFFLEtBQUssRUFBRSxhQUFhLFVBQVUsSUFBSSxHQUFJLEdBQUUsUUFBUSxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUUsYUFBYSxTQUFTLEVBQUUsR0FBRyxTQUFTLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLEVBQUUsRUFBRSxRQUFRLEdBQUcsRUFBRSxVQUFVLEVBQUUsUUFBUSxNQUFNLEVBQUUsRUFBRSxNQUFNLElBQUksUUFBUSxTQUFTLEdBQUcsTUFBTyxHQUFFLFVBQVUsT0FBTyxLQUFLLEVBQUUsVUFBVSxPQUFPLEdBQUcsRUFBRSxVQUFVLFFBQVEsRUFBRSxnQkFBZ0IsYUFBYSxDQUFDLElBQUksR0FBSSxHQUFFLEtBQUssRUFBRSxhQUFhLFVBQVUsSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLElBQUksR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxhQUFhLFFBQVEsR0FBRyxFQUFFLGdCQUFnQixVQUFVLFFBQVMsSUFBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsZ0JBQWlCLEdBQUUsQ0FBQyxHQUFJLEtBQUssUUFBTSxJQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWlCLEdBQUUsR0FBRyxPQUFHLElBQWtxQixRQUFTLElBQUcsR0FBRyxHQUFHLFdBQVcsR0FBRyxLQUFLLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUscUJBQXFCLEVBQUUsc0JBQXVCLEdBQUUsUUFBUSxHQUFHLElBQUksRUFBRSxLQUFLLEdBQUcsR0FBRyxFQUFFLElBQUksUUFBUyxJQUFHLEVBQUUsR0FBRyxFQUFFLG9CQUFvQixFQUFFLEVBQUUsbUJBQW1CLEdBQUcsR0FBRyxFQUFFLEdBQUcsUUFBUyxJQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsU0FBVSxLQUFJLEVBQUUsTUFBTyxJQUFJLElBQUksR0FBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEtBQUssRUFBRSxTQUFTLEdBQUcsRUFBRSxTQUFTLEtBQUssR0FBRyxHQUFHLElBQUssWUFBVyxXQUFXLEVBQUUsR0FBRyxLQUFLLEVBQUUsR0FBRyxFQUFFLGlCQUFpQixFQUFFLEdBQW1DLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsT0FBTyxpQkFBaUIsR0FBRyxHQUFHLEVBQUUsR0FBRyxVQUFVLElBQUksTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLGFBQWEsSUFBSSxNQUFNLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxVQUFVLElBQUksTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLGFBQWEsSUFBSSxNQUFNLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFFLE9BQU8sS0FBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxHQUFHLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxNQUFNLElBQUksR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEdBQUcsS0FBSyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsYUFBYSxJQUFJLElBQUksR0FBRyxLQUFLLEVBQUUsR0FBRyxjQUFjLFFBQVMsSUFBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUcsT0FBTyxNQUFLLElBQUksTUFBTSxLQUFLLEVBQUUsSUFBSSxTQUFTLEVBQUUsR0FBRyxNQUFPLElBQUcsR0FBRyxHQUFHLEVBQUUsT0FBTyxRQUFTLElBQUcsR0FBRyxNQUFPLEtBQUksT0FBTyxFQUFFLE1BQU0sR0FBRyxHQUFHLFFBQVEsSUFBSSxNQUFNLFFBQVMsSUFBRyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsR0FBSSxHQUFFLEVBQUUsWUFBWSxFQUFFLFNBQVMsV0FBVSxFQUFHLEVBQUUsV0FBWSxJQUFJLEdBQUUsR0FBRyxFQUFFLEtBQUssV0FBWSxLQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsV0FBVyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksR0FBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsYUFBYSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxjQUFjLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLGVBQWUsRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLE1BQU8sSUFBSSxJQUFHLEVBQUUsYUFBYSxFQUFFLFlBQWEsS0FBSSxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBSSxHQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxrQkFBbUIsR0FBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEdBQUcsR0FBRSxJQUFLLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLFdBQVcsSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLFdBQVcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsTUFBTyxHQUFFLEtBQUssTUFBTSxHQUFHLEVBQUUsU0FBUyxXQUFXLEdBQUksR0FBRSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxJQUFLLElBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksVUFBVSxFQUFFLElBQUksV0FBVyxHQUFHLEVBQUUsRUFBRSxLQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxXQUFXLEdBQUcsRUFBRSxHQUFHLEVBQUUsWUFBWSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxXQUFXLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsR0FBRyxNQUFNLFFBQVMsSUFBRyxFQUFFLEdBQXNpQixRQUFTLEtBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxNQUFNLEVBQUUsY0FBYyxFQUFFLFdBQVcsV0FBVyxFQUFFLFdBQVcsY0FBYyxFQUFFLEtBQUssR0FBRyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsV0FBVyxHQUFHLEVBQUUsR0FBRyxFQUFFLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsV0FBVyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxLQUExeEIsR0FBSSxHQUFFLEVBQUUsR0FBSSxHQUFFLEVBQUUsWUFBWSxFQUFFLFNBQVMsV0FBVSxFQUFHLEVBQUUsV0FBWSxJQUFJLEdBQUUsR0FBRyxFQUFFLEtBQUssV0FBWSxJQUFHLEVBQUUsSUFBSSxJQUFJLEVBQUUsU0FBUyxNQUFPLElBQUksS0FBSSxFQUFFLEVBQUUsVUFBVSxDQUFDLEdBQUksR0FBRSxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLGlCQUFpQixFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsZUFBZSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsU0FBUyxHQUFFLElBQUssSUFBSSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFdBQVcsV0FBVyxFQUFFLFdBQVcsU0FBUyxFQUFFLEtBQUssTUFBTSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsV0FBVyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLE1BQU8sR0FBRSxFQUFFLEdBQUcsS0FBaVEsUUFBUyxJQUFHLEdBQUcsTUFBTSxnQkFBaUIsS0FBSSxNQUFNLEdBQUcsUUFBUyxJQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsT0FBTSxDQUFHLElBQUksR0FBRSxFQUFFLEdBQUksT0FBTyxHQUFFLEdBQUcsR0FBRyxNQUFNLFFBQVEsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUyxJQUFHLEVBQUUsSUFBRyxJQUFLLEVBQUUsS0FBSyxNQUFNLEdBQUcsR0FBa3dNLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsSUFBSSxXQUFXLFdBQVcsR0FBRyxFQUFFLEVBQUUsSUFBSSxHQUFHLFFBQVMsSUFBRyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxRQUFTLEtBQUksR0FBRyxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLE9BQU8sRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxXQUFXLElBQUksRUFBRSxTQUFTLE9BQVEsSUFBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLFlBQVksRUFBRSxnQkFBZ0IsSUFBSSxFQUFF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V0FBVyxRQUFTLEtBQUksS0FBSyxJQUFJLE9BQU8sT0FBTyxNQUFNLE1BQU8sR0FBRSxVQUFVLElBQUksU0FBUyxHQUFHLE9BQU0sSUFBSyxLQUFLLElBQUksSUFBSSxFQUFFLFVBQVUsSUFBSSxTQUFTLEdBQUcsS0FBSyxJQUFJLElBQUcsR0FBSSxFQUFFLFVBQVUsTUFBTSxXQUFXLEtBQUssSUFBSSxPQUFPLE9BQU8sT0FBTyxJQUFLLElBQUksSUFBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLFdBQVcsS0FBSyxHQUFHLEtBQUssS0FBSyxRQUFTLElBQUcsVUFBVSxPQUFPLFNBQVMsR0FBRyxLQUFLLEtBQUssS0FBSyxJQUFJLEdBQUcsVUFBVSxVQUFVLFNBQVMsR0FBRyxFQUFFLEtBQUssS0FBSyxJQUFJLEdBQUcsVUFBVSxPQUFPLFdBQVcsR0FBRyxRQUFRLEdBQUcsT0FBTyxPQUFPLE9BQU8sR0FBRyxVQUFVLE9BQU8sV0FBVyxJQUFJLEdBQUksR0FBRSxLQUFLLEtBQUssUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLFVBQVUsR0FBRyxPQUFPLElBQUssSUFBSSxPQUFpRyxHQUFHLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssSUFBSSxFQUFFLEtBQUssS0FBSyxFQUFFLEtBQUssU0FBUyxFQUFFLEtBQUssS0FBSyxFQUFFLEtBQUssSUFBSSxFQUFFLEtBQUssT0FBRyxHQUFPLEtBQUssUUFBUSxFQUFFLEtBQUssY0FBVSxHQUFPLEtBQUssY0FBVSxHQUFPLEtBQUssY0FBVSxHQUFPLEtBQUssSUFBSSxHQUFHLEVBQUUsSUFBSSxLQUFLLGlCQUFpQixFQUFFLEtBQUssc0JBQWtCLEdBQU8sS0FBSyxXQUFPLEdBQU8sS0FBSyxLQUFJLEVBQUcsS0FBSyxVQUFTLEVBQUcsS0FBSyxjQUFhLEVBQUcsS0FBSyxXQUFVLEVBQUcsS0FBSyxVQUFTLEVBQUcsS0FBSyxRQUFPLEVBQUcsS0FBSyxhQUFhLEVBQUUsS0FBSyxjQUFVLEdBQU8sS0FBSyxvQkFBbUIsR0FBSSxJQUFJLE9BQU8sY0FBYSxHQUFLLElBQUcsTUFBTSxJQUFJLFdBQVcsTUFBTyxNQUFLLG1CQUFtQixPQUFPLGlCQUFpQixHQUFHLFVBQVUsR0FBSSxJQUFJLElBQUcsU0FBUyxPQUFHLEtBQVMsSUFBSSxFQUFFLEdBQUksSUFBSSxHQUFFLEdBQUksR0FBRyxPQUFPLEdBQUUsS0FBSyxFQUFFLEVBQUUsV0FBVSxFQUFHLEdBQWlZLEdBQUcsTUFBTSxVQUFVLEdBQUcsT0FBTyxPQUFPLEtBQUssT0FBTyxNQUFNLFFBQVEsVUFBVSxTQUFTLE9BQU8sV0FBVyxRQUFRLFNBQVMsR0FBRyxHQUFJLEdBQUUsR0FBRyxFQUFHLEdBQUUsR0FBRyxFQUFFLFdBQVcsSUFBSSxHQUFJLE1BQUssRUFBRSxVQUFVLE9BQU8sS0FBSyxFQUFFLEdBQUcsVUFBVSxFQUFHLElBQUksR0FBRSxFQUFFLEVBQUUsTUFBTSxLQUFLLEdBQUcsRUFBRSxLQUFLLE1BQU8sUUFBTyxHQUFHLElBQUksT0FBTyxJQUFJLFVBQVUsRUFBRSxDQUFFLE1BQU0sS0FBSSxTQUFTLEVBQUUsRUFBRSxNQUFNLEdBQUcsTUFBTyxJQUFHLEVBQUUsYUFBYSxHQUFHLEVBQUUsSUFBSSxTQUFTLEtBQU0sSUFBSSxJQUFHLE9BQU8sb0JBQW9CLElBQUksSUFBRyxFQUEyQixHQUFHLFNBQVMsR0FBRyxHQUFJLEVBQUUsTUFBSyxNQUFNLEVBQUUsS0FBSyxJQUFJLEdBQUksSUFBRyxLQUFLLFFBQVEsRUFBRSxFQUFFLEVBQUUsU0FBUyxNQUFNLE1BQU0sUUFBUSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsVUFBVSxHQUFHLFNBQVMsRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsR0FBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLEtBQUssYUFBYSxJQUFJLEtBQUssS0FBSyxHQUFncUMsSUFBRyxVQUFVLEtBQUssU0FBUyxHQUFHLElBQUksR0FBSSxHQUFFLE9BQU8sS0FBSyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEdBQUcsRUFBRSxFQUFFLEtBQUssR0FBRyxVQUFVLGFBQWEsU0FBUyxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLElBQUssSUFBSSxJQUFHLEVBQUUscUJBQTZyQixJQUFHLEtBQUssU0FBUyxFQUFFLEVBQUUsR0FBRyxNQUFPLEdBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLGtCQUFtQixHQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLFNBQVMsR0FBRyxHQUFHLEdBQUcsS0FBSyxFQUFFLFFBQVEsU0FBUyxHQUFHLEdBQUcsRUFBRSxLQUFLLEtBQUssR0FBRyxNQUFNLFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksSUFBSSxNQUFFLElBQVEsSUFBSSxJQUFJLE1BQUUsS0FBUyxFQUFFLE1BQU8sUUFBTyxPQUFPLEdBQUcsS0FBTSxLQUFJLEVBQUUsTUFBTyxFQUFFLElBQUksS0FBSyxLQUFJLEdBQUksS0FBSyxHQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRyxLQUFJLE1BQU0sUUFBUSxLQUFLLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sR0FBRyxNQUFNLFFBQVEsR0FBRyxHQUFHLEdBQUcsTUFBTyxJQUFHLEdBQUcsTUFBTSxHQUFHLFFBQVEsR0FBRyxPQUFPLEdBQUcsU0FBUyxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLE1BQU8sRUFBRSxJQUFJLEdBQUUsT0FBTyxPQUFPLEtBQU0sT0FBTyxHQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxRQUFRLEVBQUcsSUFBSSxJQUFHLFNBQVMsRUFB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QUFLLEtBQUssS0FBSyxLQUFLLE1BQUssRUFBRyxLQUFLLEdBQUcsRUFBRSxLQUFLLEtBQUssR0FBRyxLQUFLLFFBQU8sRUFBRyxLQUFLLE1BQU0sS0FBSyxLQUFLLEtBQUssUUFBUSxLQUFLLFdBQVcsS0FBSyxPQUFPLEdBQUksSUFBRyxLQUFLLFVBQVUsR0FBSSxJQUFHLEtBQUssV0FBVyxHQUFHLGtCQUFtQixHQUFFLEtBQUssT0FBTyxHQUFHLEtBQUssT0FBTyxTQUFTLEdBQUcsSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLEdBQUksR0FBRSxFQUFFLE1BQU0sSUFBSyxPQUFPLFVBQVMsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTyxHQUFFLEVBQUUsRUFBRSxJQUFJLE1BQU8sTUFBSyxHQUFHLEtBQUssU0FBUyxLQUFLLE9BQU8sSUFBSSxLQUFLLE1BQU0sS0FBSyxTQUFLLEdBQU8sS0FBSyxNQUFPLElBQUcsVUFBVSxJQUFJLFdBQVcsR0FBSSxFQUFFLElBQUcsS0FBTSxJQUFJLEdBQUUsS0FBSyxFQUFHLEtBQUksRUFBRSxLQUFLLE9BQU8sS0FBSyxFQUFFLEdBQUcsTUFBTSxHQUFHLElBQUksS0FBSyxLQUFLLEtBQU0sRUFBRSxJQUFHLEVBQUUsRUFBRSx1QkFBdUIsS0FBSyxXQUFXLEtBQUssUUFBUSxLQUFLLE1BQU0sR0FBRyxHQUFHLEtBQUssS0FBSyxjQUFjLE1BQU8sSUFBRyxHQUFHLFVBQVUsT0FBTyxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRyxNQUFLLFVBQVUsSUFBSSxLQUFLLEtBQUssVUFBVSxJQUFJLEdBQUcsS0FBSyxRQUFRLEtBQUssR0FBRyxLQUFLLE9BQU8sSUFBSSxJQUFJLEVBQUUsT0FBTyxRQUFRLEdBQUcsVUFBVSxZQUFZLFdBQVcsSUFBSSxHQUFJLEdBQUUsS0FBSyxLQUFLLE9BQU8sS0FBSyxDQUFDLEdBQUksR0FBRSxLQUFLLEtBQUssRUFBRyxNQUFLLFVBQVUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLE1BQU0sR0FBSSxHQUFFLEtBQUssTUFBTyxNQUFLLE9BQU8sS0FBSyxVQUFVLEtBQUssVUFBVSxFQUFFLEtBQUssVUFBVSxRQUFRLEVBQUUsS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLFFBQVEsS0FBSyxRQUFRLEVBQUUsS0FBSyxRQUFRLE9BQU8sR0FBRyxHQUFHLFVBQVUsT0FBTyxXQUFXLEtBQUssS0FBSyxLQUFLLE9BQU0sRUFBRyxLQUFLLEtBQUssS0FBSyxNQUFNLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFHLElBQUcsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBRyxFQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUksR0FBRSxHQUFHLE9BQU8sRUFBRSxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLEdBQUksSUFBRyxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQVEsSUFBRyxLQUFLLEVBQUcsTUFBSyxJQUFHLEVBQUcsR0FBRyxPQUFPLE9BQU8sR0FBRyxVQUFVLElBQUksV0FBVyxHQUFHLEtBQUssT0FBTyxDQUFDLEdBQUksR0FBRSxLQUFLLEtBQU0sSUFBRyxJQUFJLEtBQUssT0FBTyxFQUFFLElBQUksS0FBSyxLQUFLLENBQUMsR0FBSSxHQUFFLEtBQUssS0FBTSxJQUFHLEtBQUssTUFBTSxFQUFFLEtBQUssS0FBSyxJQUFJLEtBQUssR0FBRyxLQUFLLEtBQUssR0FBRyxFQUFFLEdBQUcsTUFBTSxHQUFHLEdBQUcsRUFBRSxLQUFLLEdBQUcseUJBQXlCLEtBQUssV0FBVyxTQUFVLE1BQUssR0FBRyxLQUFLLEtBQUssR0FBRyxFQUFFLE1BQU0sR0FBRyxVQUFVLFNBQVMsV0FBVyxLQUFLLE1BQU0sS0FBSyxNQUFNLEtBQUssT0FBTSxHQUFJLEdBQUcsVUFBVSxPQUFPLFdBQVcsSUFBSSxHQUFJLEdBQUUsS0FBSyxLQUFLLE9BQU8sS0FBSyxLQUFLLEtBQUssR0FBRyxVQUFVLEdBQUcsVUFBVSxTQUFTLFdBQVcsR0FBRyxLQUFLLE9BQU8sQ0FBQyxLQUFLLEdBQUcsbUJBQW1CLEVBQUUsS0FBSyxHQUFHLFVBQVUsS0FBTSxLQUFJLEdBQUksR0FBRSxLQUFLLEtBQUssT0FBTyxLQUFLLEtBQUssS0FBSyxHQUFHLFVBQVUsS0FBTSxNQUFLLFFBQU8sR0FBSyxJQUFJLEtBQUksWUFBVyxFQUFHLGNBQWEsRUFBRyxJQUFJLEVBQUUsSUFBSSxHQUFndkMsSUFBSSxNQUFLLEdBQWdmLEdBQUcsR0FBdzhDLFNBQVMsR0FBRyxFQUFFLFVBQVUsTUFBTSxTQUFTLEdBQUcsR0FBSSxHQUFFLElBQUssR0FBRSxLQUFLLEtBQUssRUFBRSxRQUFPLEVBQUcsR0FBRyxFQUFFLGFBQWEsU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsU0FBUyxPQUFPLE9BQU8sRUFBRSxZQUFZLFNBQVMsRUFBRSxFQUFFLFlBQWEsR0FBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBRSxJQUFJLEdBQUUsRUFBRSxnQkFBaUIsR0FBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxHQUFHLEdBQUcsRUFBRSxhQUFhLE1BQU0sR0FBRyxFQUFFLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsTUFBTyxJQUFHLElBQUksRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsVUFBVSxFQUFFLFNBQVMsRUFBRSxFQUFFLE9BQVEsR0FBRSxVQUFVLEtBQUssR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsU0FBUyxLQUFLLEVBQUUsVUFBVSxLQUFLLEVBQUUsaUJBQWdCLEVBQUcsRUFBRSxZQUFXLEVBQUcsRUFBRSxjQUFhLEVBQUcsRUFBRSxtQkFBa0IsR0FBSSxHQUFHLFNBQVMsR0FBRyxFQUFFLFFBQVEsT0FBTyxPQUFPLE1BQU0sRUFBRSxlQUFjLENBQUcsSUFBSSxHQUFFLEVBQUUsU0FBUyxnQkFBaUIsSUFBRyxHQUFHLEVBQUUsSUFBSSxHQUFHLFNBQVMsR0FBRyxFQUFFLE9BQU8sS0FBSyxFQUFFLGFBQWEsSUFBSyxJQUFJLEdBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxPQUFRLEdBQUUsT0FBTyxHQUFHLEVBQUUsZ0JBQWdCLEdBQUcsRUFBRSxhQUFhLEVBQUUsRUFBRSxHQUFHLFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFPLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFFLElBQUssRUFBRSxlQUFlLFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFPLElBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFFLEdBQUssSUFBSSxHQUFFLEdBQUcsRUFBRSxJQUFLLElBQUcsRUFBRSxTQUFTLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBSyxHQUFJLEdBQUcsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsTUFBSyxJQUFLLEdBQUcsR0FBRyxFQUFFLGdCQUFnQixTQUFTLEdBQUcsR0FBSSxHQUFFLEdBQUcsRUFBRSxTQUFTLE9BQU8sRUFBRyxLQUFJLElBQUcsR0FBSSxPQUFPLEtBQUssR0FBRyxRQUFRLFNBQVMsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sSUFBRyxLQUFNLEdBQUcsR0FBRyxHQUFHLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxTQUFTLE9BQVEsS0FBSSxFQUFFLFVBQVUsa0JBQW1CLEdBQUUsRUFBRSxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsTUFBTSxJQUFJLFNBQVMsR0FBRyxHQUFJLElBQUcsSUFBSSxXQUFXLE1BQU8sTUFBSyxRQUFRLEdBQUcsSUFBSSxXQUFXLE1BQU8sTUFBSyxRQUFTLFFBQU8sZUFBZSxFQUFFLFVBQVUsUUFBUSxHQUFHLE9BQU8sZUFBZSxFQUFFLFVBQVUsU0FBUyxHQUFHLEVBQUUsVUFBVSxLQUFLLEdBQUcsRUFBRSxVQUFVLFFBQVEsR0FBRyxFQUFFLFVBQVUsT0FBTyxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLE1BQU8sSUFBRyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxNQUFLLENBQUcsSUFBSSxHQUFFLEdBQUksSUFBRyxLQUFLLEVBQUUsRUFBRSxFQUFHLElBQUcsRUFBRSxVQUFVLElBQUksRUFBRSxLQUFLLEtBQUssRUFBRSxPQUFPLE1BQU0sR0FBRyxHQUFHLEVBQUUsS0FBSyxtQ0FBbUMsRUFBRSxXQUFXLEtBQUssTUFBTyxZQUFXLEVBQUUsY0FBYyxJQUFJLFNBQVMsR0FBRyxHQUFJLEdBQUUsUUFBUyxHQUFFLFVBQVUsSUFBSSxTQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsSUFBSyxJQUFHLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxRQUFRLEVBQUUsUUFBUSxLQUFLLEVBQUUsUUFBUSxRQUFRLEtBQUssR0FBRyxFQUFFLEtBQUssS0FBSyxFQUFFLGVBQWMsRUFBSSxPQUFPLElBQUcsRUFBRSxVQUFVLE1BQU0sU0FBUyxFQUFFLEdBQWMsUUFBUyxLQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsV0FBOUMsR0FBSSxHQUFFLElBQW1ELE9BQU8sR0FBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLEVBQUUsVUFBVSxLQUFLLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxJQUFLLEtBQUksVUFBVSxPQUFPLE1BQU8sR0FBRSxRQUFRLE9BQU8sT0FBTyxNQUFNLENBQUUsSUFBRyxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFHLE9BQU8sR0FBRSxHQUFJLEdBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRyxLQUFJLEVBQUUsTUFBTyxFQUFFLEtBQUksRUFBRSxNQUFPLEdBQUUsUUFBUSxHQUFHLEtBQUssQ0FBRSxLQUFJLEdBQUksR0FBRSxFQUFFLE9BQU8sS0FBSyxJQUFJLEVBQUUsRUFBRSxNQUFNLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFHLE9BQU0sTUFBTyxJQUFHLEVBQUUsVUFBVSxNQUFNLFNBQVMsR0FBRyxHQUFJLEdBQUUsS0FBSyxRQUFRLEVBQUcsSUFBRyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUcsQ0FBRSxLQUFJLEdBQUksR0FBRSxFQUFFLFVBQVUsR0FBRyxFQUFFLHNCQUFzQixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxLQUFLLEdBQUcsTUFBTyxRQUFPLElBQUksU0FBUyxHQUFHLEVBQUUsVUFBVSxRQUFRLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFHLEdBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUUsR0FBSSxJQUFJLElBQUksRUFBRSxRQUFRLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxRQUFRLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLFNBQVMsRUFBRSxRQUFRLElBQUksRUFBRSxNQUFNLEVBQUUsVUFBVSxhQUFhLFdBQVcsS0FBSyxVQUFVLEtBQUssU0FBUyxVQUFVLEVBQUUsVUFBVSxTQUFTLFdBQVcsR0FBSSxHQUFFLElBQUssS0FBSSxFQUFFLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxpQkFBaUIsRUFBRSxtQkFBa0IsQ0FBRyxJQUFJLEdBQUUsRUFBRSxTQUFTLEdBQUcsRUFBRSxtQkFBbUIsRUFBRSxTQUFTLFVBQVUsRUFBRSxFQUFFLFVBQVUsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLFVBQVcsS0FBSSxHQUFJLEdBQUUsRUFBRSxVQUFVLE9BQU8sS0FBSyxFQUFFLFVBQVUsR0FBRyxVQUFXLEdBQUUsTUFBTSxRQUFRLEVBQUUsTUFBTSxPQUFPLFVBQVUsRUFBRSxjQUFhLEVBQUcsRUFBRSxVQUFVLEVBQUUsT0FBTyxNQUFNLEdBQUcsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLFFBQVEsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLE9BQU8sU0FBUyxJQUFJLFNBQVMsR0FBRyxHQUFHLEVBQUUsV0FBVyxFQUFFLFVBQVUsVUFBVSxTQUFTLEdBQUcsTUFBTyxJQUFHLEVBQUUsT0FBTyxFQUFFLFVBQVUsUUFBUSxXQUFXLEdBQUksR0FBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLFlBQWEsS0FBSSxFQUFFLGFBQWEsR0FBRyxFQUFFLEtBQUssWUFBWSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxDQUFFLEtBQUksR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixNQUFNLEdBQUcsR0FBRyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsT0FBTyxRQUFRLEdBQUcsS0FBSyxNQUFPLE9BQU0sUUFBUSxJQUFJLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRSxJQUFJLFlBQWEsTUFBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxHQUFJLElBQUksS0FBSSxPQUFPLE9BQU8sT0FBTyxJQUFJLFdBQVcsS0FBSyxhQUFhLFVBQVMsRUFBRyxPQUFPLFFBQVEsR0FBRyxRQUFRLEdBQUcsS0FBSyxPQUFPLFNBQVMsUUFBUSxXQUFXLEtBQUssTUFBTSxPQUFPLE9BQU8sTUFBTSxLQUFLLFNBQVMsVUFBVSxXQUFXLElBQUksR0FBSSxLQUFLLE1BQUssTUFBTSxHQUFHLEtBQUssTUFBTSxFQUFFLEtBQUssT0FBTyxRQUFRLFdBQVcsR0FBSSxHQUFFLElBQUssTUFBSyxPQUFPLFVBQVUsU0FBUyxHQUFHLEdBQUcsRUFBRSxTQUFTLEdBQUcsTUFBTyxJQUFHLEVBQUUsT0FBTyxLQUFLLE9BQU8sVUFBVSxTQUFTLEdBQUcsR0FBRyxFQUFFLFNBQVMsR0FBRyxPQUFPLEdBQUcsRUFBRSxRQUFRLE9BQU8sV0FBVyxHQUFJLEdBQUUsS0FBSyxPQUFPLFFBQVEsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsZ0JBQWlCLElBQUcsRUFBRSxDQUFDLEdBQUksR0FBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLFFBQVEsRUFBRSxLQUFLLE9BQVEsSUFBRyxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLE1BQU8sRUFBRSxJQUFJLEdBQUUsS0FBSyxNQUFNLEVBQUUsS0FBSyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEtBQUssRUFBRSxJQUFJLEtBQUssRUFBRSxJQUFJLElBQUksRUFBRSxHQUFJLEdBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLEdBQUcsa0JBQWtCLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxHQUFHLEtBQUssS0FBSyxFQUFFLE9BQU8sU0FBUyxLQUFLLE1BQU0sR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssU0FBUyxFQUFFLEtBQUssV0FBVSxFQUFHLE1BQU8sSUFBRyxHQUFHLEVBQUUsT0FBTyxTQUFTLEdBQUcsR0FBSSxJQUFHLElBQUksV0FBVyxNQUFPLElBQUksUUFBTyxlQUFlLEVBQUUsU0FBUyxHQUFHLEVBQUUsTUFBTSxLQUFLLEdBQUcsT0FBTyxFQUFFLGFBQWEsR0FBRyxlQUFlLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxPQUFPLEdBQUcsRUFBRSxTQUFTLEdBQUcsRUFBRSxXQUFXLFNBQVMsR0FBRyxNQUFPLElBQUcsR0FBRyxHQUFHLEVBQUUsUUFBUSxPQUFPLE9BQU8sTUFBTSxFQUFFLFFBQVEsU0FBUyxHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssT0FBTyxPQUFPLFFBQVEsRUFBRSxRQUFRLE1BQU0sRUFBRSxFQUFFLEVBQUUsUUFBUSxXQUFXLElBQUksU0FBUyxHQUFHLEVBQUUsSUFBSSxTQUFTLEdBQUcsR0FBSSxHQUFFLEtBQUssb0JBQW9CLEtBQUsscUJBQXNCLElBQUcsRUFBRSxRQUFRLElBQUksRUFBRSxNQUFPLEtBQUssSUFBSSxHQUFFLEVBQUUsVUFBVSxFQUFHLE9BQU8sR0FBRSxRQUFRLE1BQU0sa0JBQW1CLEdBQUUsUUFBUSxFQUFFLFFBQVEsTUFBTSxFQUFFLEdBQUcsa0JBQW1CLElBQUcsRUFBRSxNQUFNLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxPQUFPLEdBQUcsU0FBUyxHQUFHLEVBQUUsTUFBTSxTQUFTLEdBQUcsTUFBTyxNQUFLLFFBQVEsR0FBRyxLQUFLLFFBQVEsR0FBRyxPQUFPLEdBQUcsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLFFBQVEsU0FBUyxHQUFHLEVBQUUsR0FBRyxTQUFTLEVBQUUsR0FBRyxNQUFPLElBQUcsY0FBYyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLFFBQVEsTUFBTSxPQUFPLElBQUksY0FBYyxHQUFHLGtCQUFtQixLQUFJLEdBQUcsS0FBSyxFQUFFLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxLQUFLLEdBQUcsRUFBRSxHQUFHLEtBQUssUUFBUSxFQUFFLEtBQUssT0FBTyxJQUFJLElBQUksT0FBTyxlQUFlLEdBQUcsVUFBVSxhQUFhLElBQUksSUFBSSxPQUFPLGVBQWUsR0FBRyxVQUFVLGVBQWUsSUFBSSxXQUFXLE1B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c0JBQXNCLE9BQU8sc0JBQXNCLEtBQUssUUFBUSxXQUFXLFNBQVMsR0FBRyxNQUFPLE1BQWllLEdBQUcseUJBQWl0RixHQUFHLFNBQVMsR0FBOEksUUFBUyxHQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsV0FBVyxFQUFHLEdBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLFFBQVMsR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxFQUFFLGNBQWMsR0FBRyxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsSUFBSyxJQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsU0FBVSxJQUFHLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUUsR0FBSSxFQUFFLEVBQUUsbUJBQW1CLE1BQU8sR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsSUFBSSxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsbUJBQW1CLEdBQUcsRUFBRSxFQUFFLGtCQUFrQixPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsWUFBWSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLFNBQVMsRUFBRSxFQUFFLFNBQVMsR0FBRyxHQUFHLEVBQUcsR0FBRSxLQUFLLEVBQUcsT0FBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBRyxJQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxHQUFJLEdBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFJLEdBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxHQUFHLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEtBQUssRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxLQUFLLFFBQVMsR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssaUJBQWlCLEVBQUUsS0FBSyxNQUFNLEVBQUUsRUFBRSxLQUFLLGVBQWUsRUFBRSxLQUFLLGNBQWMsTUFBTSxFQUFFLElBQUksRUFBRSxrQkFBa0IsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEdBQUcsR0FBRyxFQUFFLEtBQUssSUFBSSxRQUFTLEdBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFdBQVcsS0FBSyxHQUFHLEVBQUUsYUFBYSxFQUFFLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxJQUFJLFFBQVMsR0FBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxNQUFLLEVBQUcsRUFBRSxPQUFRLEdBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxlQUFlLE9BQU8sRUFBRSxRQUFRLFFBQVMsR0FBRSxHQUFHLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxFQUFFLGtCQUFrQixNQUFPLE9BQU8sR0FBRSxFQUFFLEtBQUssUUFBUyxHQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLFNBQVMsRUFBRSxFQUFFLE9BQU8sR0FBRyxHQUFHLEVBQUcsR0FBRSxFQUFFLEVBQUUsS0FBSyxRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxHQUFHLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLElBQUksUUFBUyxHQUFFLEdBQUcsR0FBSSxFQUFFLElBQUcsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxJQUFJLE9BQVEsS0FBSSxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsU0FBUyxXQUFXLEVBQUUsY0FBYyxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsTUFBTyxHQUFFLEVBQUUsS0FBSyxJQUFJLEVBQUUsU0FBUyxJQUFJLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxTQUFTLFdBQVcsRUFBRSxjQUFjLEVBQUUsSUFBSSxHQUFHLFFBQVMsR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxLQUFLLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFFLEVBQUcsRUFBRSxHQUFHLFFBQVMsR0FBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxJQUFLLElBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsU0FBUyxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUcsSUFBRyxFQUFFLEVBQUUsRUFBRSxVQUFVLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLFNBQVMsRUFBRSxFQUFFLEVBQUUsU0FBUyxJQUFJLFFBQVMsR0FBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFHLEdBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLFFBQVMsR0FBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFFLE9BQU8sT0FBTyxDQUFFLEtBQUksRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsUUFBUyxLQUFJLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFPLEdBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLFNBQVMsRUFBRSxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUcsR0FBRSxFQUFFLEVBQUUsS0FBSyxPQUFPLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEdBQUcsUUFBUyxHQUFFLEVBQUUsS0FBSyxRQUFTLEdBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxNQUFPLElBQUcsUUFBUyxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBSSxJQUFJLEdBQUUsRUFBRSxJQUFJLEVBQUUsR0FBSSxJQUFHLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLGFBQWEsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxvQkFBbUIsTUFBUSxJQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxzQkFBc0IsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFFLElBQUssR0FBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRyxJQUFJLEdBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxRQUFTLElBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLFNBQVMsRUFBRSxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUcsR0FBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxHQUFHLEVBQUUsSUFBSSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSSxFQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFHLEdBQU8sR0FBRyxFQUFFLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFJLEVBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssUUFBUyxHQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxLQUFLLGNBQWMsTUFBTyxLQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLEtBQUssS0FBSyxPQUFPLEVBQUUsSUFBdUQsUUFBUyxHQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxRQUFTLElBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxjQUFjLE1BQU8sR0FBRSxvQkFBbUIsR0FBRyxDQUFHLElBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUUsR0FBSSxFQUFFLEVBQUUsRUFBRSxvQkFBb0IsTUFBTyxHQUFFLEVBQUUsSUFBRyxDQUFHLElBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLGdCQUFnQixHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsWUFBWSxHQUFHLElBQUksRUFBRSxVQUFVLE9BQU0sTUFBTyxDQUFDLElBQUksR0FBSSxJQUFFLEVBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFFLENBQUcsT0FBTSxFQUFFLEVBQUUsWUFBWSxJQUFJLEdBQUcsRUFBRSxPQUFNLE1BQVEsR0FBRSxFQUFFLEVBQUUsRUFBRyxJQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUksSUFBRSxDQUFHLEtBQUksR0FBSSxLQUFLLEdBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFFLEVBQUcsRUFBRSxFQUFFLEVBQUcsUUFBTyxHQUFHLEVBQUUsT0FBTyxHQUFHLEVBQUUsWUFBYSxHQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQU0sUUFBTSxFQUFob0osR0FBSSxHQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsT0FBUSxLQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxNQUFNLEVBQUUsR0FBRyxJQUFJLEtBQUssRUFBRSxHQUFHLEdBQUcsSUFBaTJILElBQUksR0FBRSxFQUFFLDBDQUFvcEIsT0FBTyxVQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFJLEdBQUUsR0FBRSxFQUFHLElBQUssSUFBRyxFQUFFLEdBQUcsR0FBRSxFQUFHLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRSxTQUFVLEtBQUksR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssS0FBSyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsVUFBVSxFQUFFLGFBQWEsS0FBSyxFQUFFLGdCQUFnQixHQUFHLEdBQUUsR0FBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFPLEdBQUUsRUFBRSxHQUFFLEdBQUksQ0FBRSxHQUFFLEVBQUUsRUFBRSxHQUFJLElBQUcsRUFBRSxRQUFRLEdBQUcsd0JBQW9CLEdBQU8sR0FBRyxHQUFJLEdBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUcsSUFBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsS0FBSyxFQUFFLEVBQUUsWUFBWSxJQUFJLEVBQUUsRUFBRSxRQUFRLElBQUksR0FBSSxHQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxTQUFTLEVBQUUsRUFBRSxRQUFRLEdBQUcsRUFBRyxJQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sU0FBUyxFQUFFLEVBQUUsT0FBTyxHQUFHLEdBQUcsRUFBRyxJQUFJLEdBQUUsRUFBRSxLQUFLLEtBQUssTUFBTyxJQUFHLEVBQUUsT0FBTyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLE9BQU8sSUFBSSxFQUFFLElBQUksU0FBVSxJQUFHLEVBQUcsR0FBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksTUFBTyxHQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsR0FBRyxTQUFTLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLE9BQU8sR0FBRyxTQUFTLEdBQUcsT0FBTyxTQUFTLEVBQUUsSUFBRyxJQUFLLEVBQUUsS0FBSyxLQUFLLEdBQUcsRUFBRSxHQUFHLFVBQVUsT0FBTyxLQUFNLElBQUcsU0FBUyxpQkFBaUIsa0JBQWtCLFdBQVcsR0FBSSxHQUFFLFNBQVMsYUFBYyxJQUFHLEVBQUUsUUFBUSxHQUFHLEVBQUUsVUFBVyxJQUFJLEtBQUksU0FBUyxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxVQUFVLEdBQUcsRUFBRSxZQUFZLFdBQVcsR0FBRyxpQkFBaUIsRUFBRSxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsYUFBYSxJQUFJLEtBQUssRUFBRSxRQUFRLE1BQU0sYUFBYSxFQUFFLEtBQUssR0FBRyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFVBQVUsT0FBTyxFQUFFLGlCQUFpQixtQkFBbUIsSUFBSSxFQUFFLGlCQUFpQixpQkFBaUIsSUFBSSxFQUFFLGlCQUFpQixTQUFTLElBQUksSUFBSSxFQUFFLFFBQU8sTUFBTyxpQkFBaUIsU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFHLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxRQUFTLElBQUksR0FBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLGFBQWEsSUFBSSxLQUFLLEVBQUUsUUFBUSxHQUFPLEdBQUUsS0FBSyxTQUFTLEVBQUUsR0FBRyxPQUFPLEVBQUUsRUFBRSxFQUFFLFFBQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxLQUFLLFNBQVMsR0FBRyxNQUFPLElBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsR0FBRyxFQUFFLE1BQU0sS0FBSyxHQUFHLEVBQUUsYUFBNnhCLElBQUksTUFBTSxHQUFHLE1BQU0sS0FBSyxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLE1BQU0sR0FBRyxFQUFFLEdBQUcsSUFBSSxNQUFNLEVBQUUsS0FBSyxXQUFXLEVBQUUsRUFBRSxtQkFBbUIsU0FBUyxFQUFFLE1BQU0sUUFBUSxHQUFHLEVBQUUsTUFBTSxPQUFRLElBQUcsR0FBRyxFQUFFLEtBQUssTUFBSyxFQUFHLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxRQUFRLEtBQUssRUFBRSxNQUFNLFFBQVEsRUFBRSxFQUFFLFFBQVEsT0FBTyxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLElBQUksTUFBTSxFQUFFLEtBQUssWUFBWSxFQUFFLEtBQUssTUFBSyxFQUFHLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLFFBQVEsRUFBRSxxQkFBcUIsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLFFBQVEsVUFBVSxFQUFFLE1BQU0sUUFBUSxFQUFFLEVBQUUsbUJBQW1CLFNBQVMsT0FBTyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsTUFBTSxRQUFRLEVBQUUsdUJBQXVCLElBQUksS0FBSyxPQUFPLE9BQU8sUUFBUSxJQUFJLFFBQVEsS0FBSyxPQUFPLEtBQUssT0FBTyxXQUFXLE9BQU8sV0FBVyxPQUFPLGFBQWEsT0FBTyxhQUFhLE9BQU8saUJBQWlCLE9BQU8saUJBQWlCLE9BQU8sWUFBWSxPQUFPLGtCQUFrQixPQUFPLGNBQWMsT0FBTyxVQUFVLE9BQU8sT0FBTyxTQUFrVyxHQUFHLFNBQVMsR0FBRyxNQUFPLEdBQUUsS0FBSyxHQUFHLElBQUksR0FBRyxTQUFTLEdBQUcsTUFBTSxTQUFTLEVBQUUsTUFBTSxJQUFJLEtBQUssYUFBYSxNQUFNLEdBQUcsVUFBUyxFQUFHLE9BQU8sU0FBUyxHQUFHLEdBQUksR0FBRSxLQUFLLEVBQUUsS0FBSyxPQUFPLE9BQVEsSUFBRyxJQUFJLEVBQUUsRUFBRSxPQUFPLEtBQUssT0FBTyxDQUFDLEdBQUksR0FBRSxLQUFLLEtBQUssRUFBRSxFQUFFLEVBQUcsSUFBRyxTQUFTLEdBQUcsS0FBSyxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsS0FBSyxXQUFXLE9BQU0sR0FBSSxLQUFLLFFBQVEsTUFBTyxFQUFFLElBQUksR0FBRSxHQUFHLEVBQUcsS0FBSSxFQUFFLE1BQU8sRUFBRSxJQUFHLEtBQUssU0FBUyxNQUFPLElBQUcsRUFBRSxFQUFHLElBQUksR0FBRSxnQkFBZ0IsS0FBSyxLQUFLLEdBQUksR0FBRSxJQUFJLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssSUFBSSxPQUFPLEVBQUUsS0FBSyxRQUFRLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBSSxJQUFJLElBQUcsRUFBRSxPQUFPLEVBQUUsVUFBVSxXQUFXLEdBQUcsTUFBTSxFQUFFLEtBQUssT0FBTyxFQUFFLEdBQUcsRUFBRyxJQUFHLEVBQUUsS0FBSyxZQUFZLEVBQUUsS0FBSyxXQUFXLEtBQUssTUFBTSxFQUFFLEtBQUssTUFBSyxHQUFJLEdBQUcsRUFBRSxPQUFPLFNBQVMsRUFBRSxHQUFHLE1BQU8sR0FBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsT0FBTyxXQUFXLENBQUMsR0FBSSxHQUFFLEVBQUUsS0FBSyxXQUFXLEtBQUssRUFBRyxJQUFHLFdBQVcsRUFBRSxNQUFPLE1BQUssVUFBUyxFQUFHLEdBQUcsRUFBRSxhQUFhLFdBQVcsRUFBRSxVQUFTLEVBQUcsRUFBRSxpQkFBaUIsR0FBRyxFQUFFLEVBQUcsSUFBRyxXQUFXLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxNQUFPLEVBQUUsSUFBSSxHQUFFLEVBQUUsV0FBVyxJQUFLLElBQUcsRUFBRSxhQUFhLEdBQUcsR0FBRyxFQUFFLGlCQUFpQixHQUFHLEdBQUcsRUFBRSxhQUFhLFNBQVMsR0FBRyxFQUFFLEtBQUssTUFBTyxNQUFLLEdBQUcsR0FBRyxJQUFJLE9BQU8sVUFBVSxRQUFRLFVBQW9XLElBQUcsSUFBSyxJQUFJLEtBQUksV0FBVyxHQUFHLGlCQUFpQixNQUFNLEdBQUcsWUFBWSxXQUFXLEdBQUksR0FBRSxLQUFLLEVBQUUsS0FBSyxPQUFRLE1BQUssUUFBUSxTQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsR0FBRyxFQUFHLEdBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFLLEdBQUcsR0FBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLE9BQU8sU0FBUyxHQUFHLElBQUksR0FBSSxHQUFFLEtBQUssS0FBSyxLQUFLLE9BQU8sS0FBSyxLQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sTUFBTSxFQUFFLEtBQUssYUFBYSxLQUFLLFNBQVMsRUFBRSxLQUFLLE9BQU8sWUFBWSxFQUFFLEtBQUssWUFBWSxFQUFFLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsR0FBRSxLQUFLLE1BQU0sRUFBRSxLQUFLLElBQUksT0FBTyxFQUFFLEtBQUssUUFBUSxhQUFhLEVBQUUsS0FBSyxHQUFHLEVBQUUsRUFBRSxLQUFLLEdBQUcsRUFBRSxPQUFPLEVBQUUsVUFBVSxXQUFXLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFJLE1BQUssS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsR0FBRSxLQUFLLFdBQVcsRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFLElBQUksd0JBQXdCLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLEtBQUssS0FBSyxFQUFFLEVBQUUsS0FBSyxHQUFHLEtBQUssUUFBUSxFQUFFLE1BQU8sR0FBRSxFQUFFLEtBQUssSUFBSSxRQUFRLFdBQVcsR0FBSSxHQUFFLEtBQUssYUFBYSxFQUFFLEtBQUssWUFBWSxLQUFLLE1BQU0sS0FBSyxPQUFRLEdBQUUsUUFBUSxLQUFLLFFBQVEsRUFBRSxHQUFHLElBQUksS0FBSyxFQUFFLFFBQVEsSUFBSSxFQUFFLFFBQVEsSUFBSSxFQUFFLFFBQVEsSUFBSSxLQUFLLFFBQVEsU0FBUyxLQUFLLGFBQWEsRUFBRSxRQUFRLFNBQVMsR0FBRyxHQUFHLEVBQUUsS0FBSyxNQUFNLENBQUMsR0FBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBTSxJQUFHLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsR0FBRyxFQUFFLGlCQUFpQixHQUFHLEVBQUUsUUFBUSxRQUFTLEdBQUUsR0FBRyxHQUFHLEVBQUUsU0FBUyxHQUFHLElBQUksYUFBYSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsb0JBQW9CLEdBQUcsR0FBRyxFQUFFLFFBQVEsS0FBSyxHQUFHLEVBQUUsV0FBVyxTQUFTLFFBQVEsU0FBUyxFQUFFLEdBQUcsSUFBSSxHQUFHLE9BQU0sQ0FBRyxJQUFHLEtBQUssU0FBUyxNQUFPLE1BQUssUUFBUyxJQUFJLEdBQUUsRUFBRSxXQUFZLEdBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLFFBQVEsU0FBUyxHQUFHLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxRQUFRLE9BQU8sS0FBSyxJQUFJLFlBQVksRUFBRyxJQUFJLEdBQUUsR0FBRyxFQUFHLE9BQU8sTUFBSyxJQUFJLFlBQVksR0FBRyxL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RSxTQUFTLFdBQVcsTUFBTyxHQUFHLE9BQU8sR0FBRSxFQUFFLEVBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU8sUUFBTyxVQUFVLGVBQWUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxTQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxRQUFRLG1CQUFvQixTQUFRLE9BQU8sTUFBTSxLQUFLLE9BQU8sbUJBQW9CLE9BQU0sS0FBSyxNQUFNLEtBQUssS0FBSyxTQUFTLGdCQUFpQixpQkFBaUIsT0FBTSxJQUFJLElBQUksU0FBUyxFQUFFLEdBQUcsR0FBSSxNQUFLLGNBQWUsR0FBRSxRQUFRLFNBQVMsRUFBRSxHQUFHLE1BQU8sR0FBRSxLQUFLLEVBQUUsS0FBSyxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUksR0FBRSxRQUFRLFNBQVMsR0FBRyxNQUFPLEdBQUUsRUFBRSxNQUFNLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxXQUFXLE1BQU8sSUFBRyxPQUFPLGtCQUFrQixLQUFLLElBQUksV0FBVyxNQUFPLE1BQUssS0FBSyxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUksR0FBRSxRQUFRLEVBQUUsR0FBRyxTQUFTLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxTQUFTLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxHQUFHLEVBQUUsSUFBSSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLGNBQWUsR0FBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLGVBQWUsU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRSxHQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksTUFBTyxHQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU0sSUFBSSxHQUFHLE9BQVEsSUFBRyxPQUFRLEdBQUUsS0FBTSxXQUFVLDJCQUE0QixPQUFNLFNBQVUsS0FBSSxFQUFFLEdBQUcsRUFBRSxPQUFPLElBQUksU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxJQUFJLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLGtCQUFtQixJQUFHLEVBQUUsUUFBUSxTQUFTLEdBQUcsTUFBTyxHQUFFLEtBQUssRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLFVBQVUsTUFBTSxNQUFNLEdBQUcsU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFHLEdBQUUsUUFBUSxTQUFTLEdBQUcsSUFBSSxFQUFFLEdBQUcsS0FBTSxXQUFVLEVBQUUscUJBQXNCLE9BQU8sS0FBSSxTQUFTLEVBQUUsR0FBRyxFQUFFLFFBQVEsU0FBUyxHQUFHLElBQUksUUFBUSxJQUFJLE1BQU0sR0FBRyxPQUFNLEtBQU0sU0FBUyxFQUFFLEdBQUcsRUFBRSxRQUFRLFNBQVMsR0FBRyxNQUFNLGdCQUFpQixHQUFFLE9BQU8sRUFBRSxrQkFBbUIsS0FBSSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUksR0FBRSxRQUFRLE9BQU8sTUFBTSxTQUFTLEdBQUcsTUFBTyxHQUFFLEVBQUUsS0FBSyxTQUFTLEVBQUUsR0FBRyxFQUFFLFFBQVEsU0FBUyxFQUFFLEdBQUcsT0FBTyxhQUFhLEVBQUUsR0FBRyxlQUFlLEVBQUUsR0FBRyxXQUFXLEVBQUUsR0FBRyxNQUFNLEtBQUssU0FBUyxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxLQUFLLFFBQVMsR0FBRSxRQUFRLFNBQVMsR0FBRyxNQUFNLFVBQVUsV0FBTyxLQUFTLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLFNBQVMsT0FBTyxTQUFTLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxTQUFTLFFBQVEsUUFBUyxpQkFBaUIsT0FBTSxJQUFJLElBQUksU0FBUyxFQUFFLEdBQUcsRUFBRSxRQUFRLFNBQVMsR0FBRyxPQUFHLElBQVEsRUFBRSxLQUFNLFdBQVUseUJBQXlCLEVBQUcsT0FBTyxLQUFJLFNBQVMsRUFBRSxHQUFHLEVBQUUsUUFBUSxnR0FBZ0csTUFBTSxNQUFNLFNBQVMsRUFBRSxHQUFHLEVBQUUsWUFBWSxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVEsR0FBSSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssc0JBQXNCLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLGNBQWUsR0FBRSxRQUFRLFNBQVMsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVSxJQUFJLEVBQUUsRUFBRSxHQUFHLGNBQWEsRUFBRyxNQUFNLE1BQU0sU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxJQUFJLFFBQVEsRUFBRSxFQUFFLEdBQUksR0FBRSxRQUFRLFNBQVMsR0FBRyxNQUFPLEdBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsd0JBQXdCLEVBQUUseUJBQTBCLEdBQUUsUUFBUSxTQUFTLEdBQUcsTUFBTyxHQUFFLEtBQUssRUFBRSxTQUFTLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxLQUFLLEtBQUssRUFBRSxLQUFLLEtBQU0sR0FBRSxRQUFRLFNBQVMsR0FBRyxNQUFPLE9BQU0sR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxLQUFLLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRyxHQUFFLFFBQVEsU0FBUyxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsTUFBTyxFQUFFLElBQUksR0FBRSxDQUFFLElBQUcsR0FBRyxtQkFBbUIsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsS0FBSyxJQUFJLE1BQU8sRUFBRSxJQUFHLG1CQUFtQixFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxLQUFLLElBQUksTUFBTyxFQUFFLEtBQUksR0FBRyxtQkFBbUIsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsS0FBSyxJQUFJLE1BQU8sRUFBRSxNQUFNLFdBQVUsNkNBQTZDLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFFLEdBQUUsUUFBUSxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUUsU0FBUyxFQUFFLE9BQU8sS0FBSyxFQUFFLFdBQVksTUFBSyxFQUFFLE9BQU8sSUFBSSxJQUFLLElBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTSxFQUFFLEVBQUUsT0FBTyxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLElBQUksU0FBUyxFQUFFLEVBQUUsR0FBRyxZQUFhLEdBQUUsR0FBRyxjQUFjLElBQUksU0FBUyxZQUFZLFFBQVEsVUFBVSxXQUFXLFlBQVksUUFBUSxRQUFRLE1BQU0sUUFBUSxRQUFRLFdBQVcsWUFBWSxVQUFVLFdBQVcsWUFBWSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxJQUFJLFNBQVMsU0FBUyxLQUFJLEVBQUcsUUFBUSxVQUFVLFFBQVEsU0FBUyxPQUFPLFFBQVEsT0FBTyxRQUFRLFFBQVEsUUFBUSxTQUFTLFNBQVMsU0FBUyxVQUFVLE1BQU0sUUFBUSxTQUFTLE9BQU8sUUFBUSxPQUFPLFFBQVEsUUFBUSxRQUFRLFNBQVMsU0FBUyxTQUFTLFdBQVcsTUFBTSxNQUFNLFFBQVEsU0FBUyxTQUFTLE9BQU8sT0FBTyxRQUFRLElBQUksU0FBUyxZQUFZLFFBQVEsVUFBVSxTQUFTLFdBQVcsT0FBTyxRQUFRLE1BQU0sTUFBTSxNQUFNLFNBQVMsWUFBWSxXQUFXLFVBQVUsWUFBWSxNQUFNLEtBQUssTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssT0FBTyxJQUFJLFNBQVMsVUFBVSxRQUFRLFVBQVUsU0FBUyxVQUFVLE9BQU8sUUFBUSxNQUFNLE9BQU8sT0FBTyxTQUFTLFlBQVksVUFBVSxXQUFXLFlBQVksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsSUFBSSxTQUFTLFFBQVEsUUFBUSxVQUFVLFFBQVEsT0FBTyxTQUFTLFFBQVEsU0FBUyxTQUFTLFdBQVcsUUFBUSxPQUFPLFFBQVEsV0FBVyxZQUFZLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsTUFBTSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxPQUFPLElBQUksU0FBUyxTQUFTLFFBQVEsVUFBVSxTQUFTLFVBQVUsUUFBUSxRQUFRLE1BQU0sT0FBTyxPQUFPLFNBQVMsWUFBWSxVQUFVLFdBQVcsWUFBWSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssT0FBTyxJQUFJLFNBQVMsU0FBUyxRQUFRLFVBQVUsU0FBUyxVQUFVLE9BQU8sUUFBUSxNQUFNLE9BQU8sT0FBTyxTQUFTLFlBQVksVUFBVSxXQUFXLFlBQVksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsSUFBSSxTQUFTLFdBQVcsUUFBUSxVQUFVLFVBQVUsV0FBVyxRQUFRLFNBQVMsTUFBTSxRQUFRLFFBQVEsU0FBUyxZQUFZLFdBQVcsV0FBVyxhQUFhLE1BQU0sT0FBTyxRQUFRLFFBQVEsTUFBTSxNQUFNLFFBQVEsUUFBUSxNQUFNLE9BQU8sTUFBTSxNQUFNLFNBQVMsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxNQUFNLElBQUksU0FBUyxRQUFRLFFBQVEsVUFBVSxhQUFhLGNBQWMsVUFBVSxXQUFXLFFBQVEsVUFBVSxVQUFVLFlBQVksY0FBYyxZQUFZLFlBQVksY0FBYyxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxPQUFPLE9BQU8sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxJQUFJLFNBQVMsVUFBVSxRQUFRLFVBQVUsVUFBVSxXQUFXLFFBQVEsUUFBUSxNQUFNLE9BQU8sT0FBTyxTQUFTLFlBQVksVUFBVSxXQUFXLFlBQVksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsSUFBSSxTQUFTLFVBQVUsUUFBUSxVQUFVLFFBQVEsVUFBVSxRQUFRLFFBQVEsT0FBTyxRQUFRLFFBQVEsU0FBUyxhQUFhLFVBQVUsWUFBWSxhQUFhLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLElBQUksU0FBUyxVQUFVLFFBQVEsVUFBVSxRQUFRLFNBQVMsT0FBTyxRQUFRLE9BQU8sT0FBTyxTQUFTLFFBQVEsV0FBVyxVQUFVLFdBQVcsWUFBWSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxJQUFJLFNBQVMsU0FBUyxRQUFRLFVBQVUsV0FBVyxXQUFXLFlBQVksV0FBVyxXQUFXLFVBQVUsV0FBVyxTQUFTLFVBQVUsVUFBVSxZQUFZLFlBQVksTUFBTSxRQUFRLFFBQVEsU0FBUyxRQUFRLFFBQVEsT0FBTyxRQUFRLE1BQU0sT0FBTyxPQUFPLFNBQVMsVUFBVSxNQUFNLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLE9BQU8sSUFBSSxTQUFTLFNBQVMsUUFBUSxVQUFVLFVBQVUsVUFBVSxPQUFPLFFBQVEsTUFBTSxPQUFPLFVBQVUsT0FBTyxZQUFZLFVBQVUsV0FBVyxZQUFZLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE9BQU8sT0FBTyxPQUFPLE1BQU0sTUFBTSxNQUFNLFFBQVEsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLElBQUksU0FBUyxVQUFVLFFBQVEsVUFBVSxVQUFVLFlBQVksUUFBUSxTQUFTLFFBQVEsU0FBUyxTQUFTLFVBQVUsYUFBYSxZQUFZLFdBQVcsYUFBYSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxJQUFJLFNBQVMsV0FBVyxLQUFJLEVBQUcsUUFBUSxVQUFVLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLE1BQU0sTUFBTSxPQUFPLE1BQU0sS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssTUFBTSxNQUFNLFFBQVEsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxNQUFNLElBQUksU0FBUyxTQUFTLEtBQUksRUFBRyxRQUFRLFVBQVUsUUFBUSxTQUFTLE1BQU0sUUFBUSxNQUFNLE9BQU8sT0FBTyxTQUFTLFNBQVMsVUFBVSxTQUFTLFNBQVMsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0sSUFBSSxTQUFTLFlBQVksS0FBSSxFQUFHLFFBQVEsVUFBVSxTQUFTLFVBQVUsVUFBVSxVQUFVLFFBQVEsU0FBUyxTQUFTLFlBQVksYUFBYSxVQUFVLFdBQVcsWUFBWSxNQUFNLE1BQU0sT0FBTyxPQUFPLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxNQUFNLEtBQUssTUFBTSxNQUFNLE1BQU0sUUFBUSxJQUFJLFNBQVMsV0FBVyxRQUFRLFVBQVUsV0FBVyxVQUFVLFNBQVMsVUFBVSxVQUFVLFNBQVMsU0FBUyxVQUFVLFFBQVEsV0FBVyxVQUFVLFlBQVksTUFBTSxNQUFNLE9BQU8sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsSUFBSSxTQUFTLGFBQWEsUUFBUSxVQUFVLFVBQVUsV0FBVyxRQUFRLFFBQVEsTUFBTSxPQUFPLE9BQU8sVUFBVSxZQUFZLFVBQVUsV0FBVyxZQUFZLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLElBQUksU0FBUyxVQUFVLFFBQVEsVUFBVSxVQUFVLFdBQVcsUUFBUSxTQUFTLFNBQVMsU0FBUyxTQUFTLFNBQVMsWUFBWSxVQUFVLFdBQVcsWUFBWSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxJQUFJLFNBQVMsWUFBWSxRQUFRLFVBQVUsU0FBUyxVQUFVLE9BQU8sUUFBUSxNQUFNLE9BQU8sT0FBTyxRQUFRLFlBQVksVUFBVSxXQUFXLFlBQVksTUFBTSxNQUFNLE1BQU0sT0FBTyxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsSUFBSSxTQUFTLFVBQVUsUUFBUSxVQUFVLFVBQVUsV0FBVyxRQUFRLE1BQU0sUUFBUSxTQUFTLE1BQU0sT0FBTyxNQUFNLEtBQUssT0FBTyxTQUFTLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sS0FBSyxNQUFNLFFBQVEsTUFBTSxTQUFTLFNBQVMsVUFBVSxXQUFXLFVBQVUsT0FBTyxTQUFTLElBQUksU0FBUyxTQUFTLEtBQUksRUFBRyxRQUFRLFVBQVUsS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssTUFBTSxNQUFNLE9BQU8sTUFBTSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxNQUFNLE1BQU0sUUFBUSxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0sSUFBSSxTQUFTLGdCQUFnQixRQUFRLFVBQVUsU0FBUyxVQUFVLFFBQVEsU0FBUyxNQUFNLE9BQU8sT0FBTyxTQUFTLFlBQVksVUFBVSxXQUFXLFlBQVksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsSUFBSSxTQUFTLGFBQWEsS0FBSSxFQUFHLFFBQVEsVUFBVSxTQUFTLFVBQVUsUUFBUSxXQUFXLFNBQVMsV0FBVyxRQUFRLFlBQVksV0FBVyxTQUFTLFlBQVksV0FBVyxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sT0FBTyxPQUFPLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxJQUFJLFNBQVMsVUFBVSxRQUFRLFVBQVUsV0FBVyxZQUFZLFFBQVEsVUFBVSxRQUFRLFNBQVMsU0FBUyxVQUFVLGFBQWEsV0FBVyxZQUFZLGFBQWEsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLE9BQU8sSUFBSSxTQUFTLFdBQVcsS0FBSSxFQUFHLFFBQVEsVUFBVSxlQUFlLGVBQWUsZUFBZSxlQUFlLGVBQWUsZUFBZSxlQUFlLGVBQWUsZUFBZSxnQkFBZ0IsZ0JBQWdCLGlCQUFpQixNQUFNLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFdBQVcsV0FBVyxhQUFhLE1BQU0sS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssT0FBTyxJQUFJLFNBQVMsUUFBUSxRQUFRLFVBQVUsVUFBVSxXQUFXLFFBQVEsUUFBUSxNQUFNLE9BQU8sT0FBTyxXQUFXLFlBQVksVUFBVSxXQUFXLFlBQVksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLE9BQU8sU0FBUyxTQUFTLG1CQUFtQixRQUFRLFVBQVUsU0FBUyxVQUFVLE9BQU8sUUFBUSxNQUFNLE9BQU8sT0FBTyxTQUFTLFlBQVksVUFBVSxXQUFXLFlBQVksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLE9BQU8sSUFBSSxTQUFTLFNBQVMsUUFBUSxVQUFVLFVBQVUsT0FBTyxTQUFTLFdBQVcsTUFBTSxXQUFXLFNBQVMsV0FBVyxXQUFXLGNBQWMsV0FBVyxZQUFZLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsTUFBTSxLQUFLLEtBQUssS0FBSyxLQUFLLE1BQU0sS0FBSyxRQUFRLFNBQVMsU0FBUyxZQUFZLFFBQVEsVUFBVSxVQUFVLFlBQVksUUFBUSxRQUFRLE9BQU8sUUFBUSxRQUFRLFNBQVMsV0FBVyxVQUFVLFdBQVcsWUFBWSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxJQUFJLFNBQVMsV0FBVyxRQUFRLFVBQVUsV0FBVyxZQUFZLFNBQVMsVUFBVSxNQUFNLFFBQVEsUUFBUSxTQUFTLGFBQWEsWUFBWSxZQUFZLGFBQWEsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE1BQU0sSUFBSSxTQUFTLFVBQVUsUUFBUSxVQUFVLFNBQVMsVUFBVSxPQUFPLFNBQVMsTUFBTSxPQUFPLE9BQU8sU0FBUyxXQUFXLFVBQVUsU0FBUyxXQUFXLE1BQU0sTUFBTSxPQUFPLE9BQU8sTUFBTSxNQUFNLE9BQU8sT0FBTyxNQUFNLE9BQU8sTUFBTSxPQUFPLFFBQVEsTUFBTSxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxPQUFPLElBQUksU0FBUyxVQUFVLFFBQVEsVUFBVSxVQUFVLFdBQVcsT0FBTyxRQUFRLE1BQU0sT0FBTyxPQUFPLFVBQVUsWUFBWSxVQUFVLFdBQVcsWUFBWSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxJQUFJLFNBQVMsWUFBWSxRQUFRLFVBQVUsU0FBUyxVQUFVLFFBQVEsUUFBUSxNQUFNLE1BQU0sTUFBTSxTQUFTLFlBQVksVUFBVSxXQUFXLFlBQVksTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxNQUFNLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLE9BQU8sU0FBUyxTQUFTLFdBQVcsUUFBUSxVQUFVLFNBQVMsVUFBVSxRQUFRLFFBQVEsTUFBTSxRQUFRLFFBQVEsU0FBUyxZQUFZLFVBQVUsV0FBVyxZQUFZLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLElBQUksU0FBUyxVQUFVLFFBQVEsVUFBVSxTQUFTLFVBQVUsT0FBTyxRQUFRLE1BQU0sTUFBTSxNQUFNLFNBQVMsWUFBWSxVQUFVLFdBQVcsWUFBWSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxXQUFXLFNBQVMsNkJBQTZCLFFBQVEsVUFBVSxTQUFTLFVBQVUsT0FBTyxRQUFRLE1BQU0sTUFBTSxNQUFNLFNBQVMsWUFBWSxVQUFVLFdBQVcsWUFBWSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sUUFBUSxJQUFJLFNBQVMsT0FBTyxRQUFRLFVBQVUsU0FBUyxhQUFhLFNBQVMsU0FBUyxVQUFVLFdBQVcsVUFBVSxVQUFVLFVBQVUsU0FBUyxZQUFZLFdBQVcsTUFBTSxPQUFPLE9BQU8sUUFBUSxRQUFRLE9BQU8sUUFBUSxPQUFPLE9BQU8sT0FBTyxPQUFPLE9BQU8sU0FBUyxNQUFNLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLE1BQU0sSUFBSSxTQUFTLFVBQVUsUUFBUSxVQUFVLE9BQU8sUUFBUSxPQUFPLFFBQVEsUUFBUSxVQUFVLFNBQVMsVUFBVSxRQUFRLE9BQU8sUUFBUSxVQUFVLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLFFBQVEsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxRQUFRLElBQUksU0FBUyxVQUFVLFFBQVEsVUFBVSxTQUFTLFFBQVEsV0FBVyxVQUFVLFVBQVUsVUFBVSxTQUFTLFVBQVUsV0FBVyxVQUFVLFdBQVcsV0FBVyxNQUFNLE1BQU0sTUFBTSxNQUFNLE9BQU8sT0FBTyxNQUFNLE1BQU0sT0FBTyxNQUFNLE9BQU8sT0FBTyxTQUFTLE1BQU0sS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssT0FBTyxJQUFJLFNBQVMsT0FBTyxLQUFJLEVBQUcsUUFBUSxVQUFVLFFBQVEsUUFBUSxPQUFPLFFBQVEsTUFBTSxNQUFNLFNBQVMsT0FBTyxTQUFTLFNBQVMsUUFBUSxTQUFTLE1BQU0sUUFBUSxRQUFRLE9BQU8sUUFBUSxNQUFNLE1BQU0sU0FBUyxPQUFPLFNBQVMsU0FBUyxRQUFRLFVBQVUsTUFBTSxRQUFRLE1BQU0sT0FBTyxNQUFNLFNBQVMsT0FBTyxTQUFTLElBQUksU0FBUyxjQUFjLFFBQVEsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxXQUFXLFdBQVcsWUFBWSxNQUFNLE9BQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxTQUFTLE1BQU0sS0FBSyxRQUFRLFFBQVEsUUFBUSxRQUFRLFFBQVEsVUFBVSxJQUFJLFNBQVMsVUFBVSxLQUFJLEVBQUcsUUFBUSxVQUFVLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssTUFBTSxPQUFPLE1BQU0sS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxNQUFNLFFBQVEsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxTQUFTLFNBQVMsRUFBRSxHQUFHLEdBQUksTUFBSyxRQUFTLEdBQUUsUUFBUSxTQUFTLEdBQUcsTUFBTyxHQUFFLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsY0FBZSxHQUFFLFFBQVEsU0FBUyxHQUFHLE1BQU8sR0FBRSxFQUFFLGNBQWMsUUFBUSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsU0FBVSxLQUFJLEVBQUUsRUFBRyxLQUFJLElBQUssSUFBRyxHQUFHLEdBQUcsT0FBRyxLQUFTLEVBQUUsS0FBSyxJQUFLLEtBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsa0JBQW1CLEdBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxHQUFHLEdBQUksR0FBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUcsZUFBZ0IsR0FBRSxDQUFDLE9BQU8sVUFBVSxRQUFRLElBQUssR0FBRSxNQUFPLElBQUksRUFBRSxLQUFLLEdBQUUsTUFBTyxJQUFJLEdBQUUsRUFBRyxLQUFLLEdBQUUsTUFBTyxJQUFJLEdBQUUsRUFBRSxHQUFHLE1BQU8sSUFBSSxHQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxNQUFNLEtBQUssV0FBWSxPQUFPLEdBQUUsVUFBVSxFQUFFLFVBQVUsR0FBRyxHQUFHLEdBQUcsa0JBQW1CLEdBQUUsRUFBRSxTQUFTLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsYUFBYSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBTSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsR0FBRyxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxHQUFHLFdBQVcsTUFBTyxJQUFHLE9BQU8sZUFBZSxFQUFFLElBQUksT0FBTyxLQUFLLElBQUksV0FBVyxNQUFPLE1BQUssS0FBSyxTQUFTLEVBQUUsRUFBRSxHQUFHLFlBQWEsSUFBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxZQUFZLE9BQU8sTUFBTSxXQUFXLFFBQVEsRUFBRSxXQUFXLE1BQU8sTUFBTSxHQUFFLFFBQVEsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUcsSUFBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsR0FBRyxJQUFJLEdBQUcsSUFBSyxHQUFFLE1BQU8sR0FBRSxFQUFHLFFBQU8sR0FBRyxJQUFJLE9BQU8sSUFBSSxTQUFTLE1BQU8sWUFBVyxNQUFPLElBQUksR0FBRSxLQUFLLElBQUksTUFBTyxZQUFXLE1BQU8sSUFBSSxHQUFFLEtBQUssS0FBSyxFQUFFLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxHQUFFLEVBQUcsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxlQUFlLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLE1BQUUsR0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFFLElBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEdBQUksUUFBTyxPQUFPLFlBQVksRUFBRSxFQUFFLEdBQUUsR0FBSSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksR0FBRyxHQUFHLFdBQVcsRUFBRSxPQUFPLEdBQUUsRUFBRyxFQUFFLFdBQVcsTUFBTyxHQUFFLEtBQUssUUFBUSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLE9BQU8sRUFBRSxFQUFFLEVBQUUsVUFBVSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsUUFBUSxHQUFHLEVBQUUsSUFBSSxJQUFLLEdBQUUsSUFBSyxJQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUyxHQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRyxPQUFPLEtBQUksU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLFlBQVksRUFBRSxhQUFhLEVBQUUsV0FBVyxHQUFJLEdBQUUsRUFBRSxFQUFFLElBQUksVUFBVSxFQUFFLEVBQUUsTUFBTyxLQUFJLEVBQUUsTUFBTSxRQUFRLE9BQU8sRUFBRSxJQUFJLFlBQVksR0FBRyxFQUFFLElBQUksY0FBYyxFQUFFLEVBQUUsY0FBYyxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sdUNBQXVDLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxXQUFZLEdBQUUsVUFBVSxFQUFFLEdBQUksT0FBTyxLQUFLLEdBQUUsUUFBUSxPQUFPLFFBQVEsU0FBUyxFQUFFLEdBQUcsR0FBSSxFQUFFLE9BQU8sUUFBTyxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFJLEdBQUUsRUFBRSxVQUFVLEtBQUssRUFBRSxHQUFHLEdBQUcsRUFBRSxRQUFJLEtBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxPQUFPLFNBQVMsWUFBYSxHQUFFLEVBQUUsT0FBTyxxQkFBcUIsU0FBUyxHQUFHLE1BQU8sR0FBRSxFQUFFLEtBQUssU0FBUyxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sdUJBQXVCLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSSxHQUFJLEVBQUUsRUFBRSxJQUFJLFdBQVksR0FBRSxRQUFRLFNBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSyxLQUFJLElBQUssR0FBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUcsTUFBSyxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMs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QUFRLEVBQUUsY0FBYSxJQUFLLE1BQU0sUUFBUSxTQUFTLEdBQUcsR0FBSSxHQUFFLEdBQUksTUFBSyxFQUFHLE1BQUssYUFBYSxHQUFJLE1BQUssR0FBRyxLQUFLLFlBQVksR0FBRyxLQUFLLE1BQU0sV0FBVyxHQUFJLE1BQUssSUFBSSxLQUFLLE1BQU0sUUFBUSxHQUFJLE1BQUssS0FBSyxVQUFVLFdBQVcsS0FBSyxhQUFhLEtBQUssS0FBSyxNQUFNLFdBQVcsTUFBTSxLQUFLLE1BQU0sUUFBUSxNQUFNLEtBQUssTUFBTSxZQUFZLFdBQVcsU0FBUyxHQUFHLEdBQUcsRUFBRSxXQUFXLE1BQU8sTUFBSyxNQUFNLG1CQUFtQixJQUFHLENBQUcsTUFBSyxRQUFRLEVBQUUsV0FBVyxLQUFLLFVBQVUsS0FBSyxPQUFNLElBQUssWUFBWSxTQUFTLEdBQUcsR0FBRyxFQUFFLFdBQVcsT0FBTSxDQUFHLElBQUksR0FBRSxHQUFJLE1BQUssRUFBRSxVQUFXLE1BQUssa0JBQWtCLFFBQVEsS0FBSyxZQUFZLEdBQUcsS0FBSyxNQUFNLGVBQWUsR0FBRyxLQUFLLG9CQUFvQixLQUFLLFFBQVEsR0FBRyxLQUFLLFVBQVUsS0FBSyxPQUFNLEtBQU0sV0FBVyxTQUFTLEdBQUcsR0FBRyxFQUFFLFdBQVcsT0FBTSxDQUFHLElBQUksR0FBRSxHQUFJLE1BQUssRUFBRSxVQUFXLE1BQUssa0JBQWtCLFVBQVUsS0FBSyxZQUFZLEdBQUcsS0FBSyxNQUFNLGNBQWMsR0FBRyxLQUFLLHNCQUFzQixLQUFLLFFBQVEsR0FBRyxLQUFLLFVBQVUsS0FBSyxPQUFNLEtBQU0sWUFBWSxXQUFXLE1BQU8sTUFBSyxTQUFTLFdBQVcsYUFBYSxXQUFXLE1BQU8sTUFBSyxTQUFTLFlBQVksWUFBWSxXQUFXLE1BQU8sTUFBSyxTQUFTLGVBQWUsY0FBYyxXQUFXLEdBQUksR0FBRSxHQUFHLEtBQUssTUFBTSxLQUFLLFNBQVMsY0FBYyxHQUFJLE9BQU8sR0FBRSxPQUFPLEVBQUUsSUFBSSxZQUFZLFNBQVMsR0FBRyxHQUFJLEdBQUUsS0FBSyxR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WSxFQUFFLElBQUksU0FBUyxHQUFHLE1BQU8sSUFBRyxrQkFBbUIsR0FBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLFNBQVMsSUFBSSxFQUFFLFFBQVEsVUFBVSxhQUFTLEtBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLFFBQVEsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxhQUFhLFNBQVMsRUFBRSxHQUFHLEVBQUUsUUFBUSxTQUFTLEdBQUcsR0FBRyxrQkFBbUIsR0FBRSxLQUFNLFdBQVUsRUFBRSxzQkFBdUIsT0FBTyxLQUFJLFNBQVMsRUFBRSxHQUFHLEVBQUUsUUFBUSxjQUFjLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBSSxHQUFFLFFBQVEsU0FBUyxHQUFHLE1BQU8sVUFBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFHLElBQUcsR0FBRyxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU0sTUFBUSxNQUFLLEVBQUUsRUFBRSxJQUFJLElBQUksR0FBRyxJQUFLLEtBQUksRUFBRSxLQUFLLEVBQUUsTUFBTyxJQUFHLEdBQUcsQ0FBRSxRQUFPLElBQUksS0FBSyxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEdBQUksR0FBRSxRQUFRLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLE9BQUcsS0FBUyxFQUFFLE1BQU8sRUFBRSxRQUFPLEdBQUcsSUFBSyxHQUFFLE1BQU8sVUFBUyxHQUFHLE1BQU8sR0FBRSxLQUFLLEVBQUUsR0FBSSxLQUFLLEdBQUUsTUFBTyxVQUFTLEVBQUUsR0FBRyxNQUFPLEdBQUUsS0FBSyxFQUFFLEVBQUUsR0FBSSxLQUFLLEdBQUUsTUFBTyxVQUFTLEVBQUUsRUFBRSxHQUFHLE1BQU8sR0FBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksTUFBTyxZQUFXLE1BQU8sR0FBRSxNQUFNLEVBQUUsY0FBYyxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUksR0FBRSxRQUFRLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFFLElBQUcsRUFBRSxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUcsT0FBTyxLQUFJLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxVQUFVLFNBQVMsaUJBQWlCLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsR0FBSSxHQUFFLFFBQVEsT0FBTyxLQUFLLHFCQUFxQixHQUFHLE9BQU8sU0FBUyxHQUFHLE1BQU0sVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLElBQUksT0FBTyxLQUFLLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsR0FBSSxHQUFFLFFBQVEsTUFBTSxTQUFTLFNBQVMsR0FBRyxNQUFNLFNBQVMsRUFBRSxLQUFLLFNBQVMsRUFBRSxFQUFFLEdBQUcsWUFBYSxJQUFJLEdBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUssR0FBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLFlBQVksV0FBVyxNQUFPLFFBQU8sRUFBRSxRQUFRLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLGVBQWUsU0FBUyxFQUFFLEdBQUcsRUFBRSxRQUFRLFNBQVMsRUFBRSxHQUFHLE9BQU8sTUFBTSxFQUFFLE9BQU8sS0FBSyxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUcsR0FBRSxRQUFRLFNBQVMsRUFBRSxHQUFHLElBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTyxLQUFJLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsSUFBSSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxjQUFjLFdBQVcsT0FBTSxHQUFJLEdBQUcsRUFBRSxHQUFHLFdBQVcsTUFBTyxHQUFFLE9BQU8seUJBQXlCLEVBQUUsU0FBUyxHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLE1BQU0sZ0JBQWlCLEdBQUUsR0FBRyxnQkFBaUIsR0FBRSxJQUFJLEtBQUssQ0FBRSxLQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxHQUFJLEtBQUksRUFBRSxNQUFNLEdBQUksR0FBRSxHQUFHLE1BQU8sR0FBRSxHQUFHLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsT0FBTSxDQUFHLEtBQUksRUFBRSxPQUFNLENBQUcsR0FBRSxHQUFHLE1BQU8sR0FBRSxHQUFHLEdBQUcsRUFBRSxTQUFTLEdBQUcsTUFBTyxJQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLFNBQVMsSUFBSSxFQUFFLE1BQUssRUFBRyxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsSUFBSSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUksR0FBRSxRQUFRLEVBQUUsR0FBRyxPQUFPLGlCQUFpQixTQUFTLEVBQUUsR0FBRyxFQUFFLEVBQUcsS0FBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUksT0FBTyxLQUFJLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sd0JBQXlCLEdBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFFLEdBQUksRUFBRSxJQUFJLE1BQU8sR0FBRSxFQUFFLEdBQUcsTUFBTSxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTyxJQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sU0FBUyxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxTQUFTLEVBQUUsZ0JBQWlCLFNBQVEsUUFBUSxPQUFPLG9CQUFvQixPQUFPLG9CQUFvQixXQUFXLEVBQUUsU0FBUyxHQUFHLElBQUksTUFBTyxHQUFFLEdBQUcsTUFBTSxHQUFHLE1BQU8sR0FBRSxTQUFVLEdBQUUsUUFBUSxFQUFFLFNBQVMsR0FBRyxNQUFPLElBQUcsbUJBQW1CLEVBQUUsS0FBSyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsTUFBTSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksWUFBWSxFQUFFLE9BQU8sU0FBVSxHQUFFLFFBQVEsT0FBTyxnQkFBZ0IsU0FBUyxHQUFHLE1BQU8sR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLGtCQUFtQixHQUFFLGFBQWEsWUFBYSxHQUFFLFlBQVksRUFBRSxZQUFZLFVBQVUsWUFBYSxRQUFPLEVBQUUsT0FBTyxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUksR0FBRSxRQUFRLFNBQVMsR0FBRyxNQUFPLFVBQVMsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLE1BQU8sT0FBTyxHQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsT0FBRyxJQUFRLEVBQUUsRUFBRSxXQUFXLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sSUFBSSxVQUFVLFNBQVMsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLEtBQUssR0FBSSxHQUFFLFFBQVEsU0FBUyxFQUFFLEdBQUcsTUFBTyxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLElBQUksRUFBRSxLQUFLLEdBQUksR0FBRSxRQUFRLFNBQVMsR0FBRyxNQUFPLEdBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxrQkFBa0IsSUFBSSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEdBQUksR0FBRSxRQUFRLFNBQVMsR0FBRyxNQUFPLFFBQU8sRUFBRSxNQUFNLFNBQVMsRUFBRSxFQUFFLEdBQUcsWUFBYSxJQUFJLEdBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFHLEdBQUUsUUFBUSxFQUFFLElBQUksTUFBTSxRQUFRLFNBQVMsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLEdBQUcsV0FBVyxHQUFJLEdBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxJQUFLLFFBQU8sR0FBRyxHQUFHLEVBQUUsUUFBUSxLQUFLLE9BQUcsR0FBTyxFQUFFLElBQUksUUFBUSxFQUFFLEVBQUUsRUFBRSxHQUFHLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsTUFBTSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFlBQVksU0FBUyxFQUFFLEtBQUssU0FBUyxFQUFFLEVBQUUsR0FBRyxZQUFhLElBQUksR0FBRSxFQUFFLEtBQUksRUFBSSxHQUFFLElBQUksT0FBTyxTQUFTLFNBQVMsR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLEtBQUssR0FBRyxHQUFHLFdBQVcsR0FBSSxHQUFFLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFHLE9BQU8sSUFBRyxFQUFFLFFBQVEsVUFBTSxHQUFPLE1BQUssSUFBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssSUFBSSxFQUFFLFFBQVEsTUFBTSxFQUFFLE1BQUssT0FBUSxTQUFTLEVBQUUsRUFBRSxHQUFHLFlBQWEsSUFBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLGVBQWUsS0FBSyxxQkFBcUIsRUFBRSxFQUFFLG1CQUFtQixFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsY0FBYyxFQUFFLE9BQU8sVUFBVSxFQUFFLGtCQUFtQixHQUFFLEVBQUUsRUFBRSxRQUFRLEdBQUcsSUFBSSxFQUFFLFlBQVksRUFBRSxVQUFVLFVBQVUsRUFBRSxHQUFHLEVBQUUsV0FBVyxNQUFPLElBQUcsRUFBRSxLQUFLLEtBQUssSUFBSSxXQUFXLE1BQU8sR0FBRSxLQUFLLEtBQUssTUFBTSxJQUFJLE1BQU0sSUFBSSxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRyxVQUFVLEdBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLFNBQVMsR0FBRyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxVQUFXLE9BQU8sR0FBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsZ0JBQWlCLEdBQUUsU0FBUyxTQUFTLEdBQUcsTUFBTSxnQkFBaUIsSUFBRyxTQUFTLEdBQUcsTUFBTyxhQUFhLElBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLE1BQU8sS0FBSSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFFLEdBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxFQUFFLEdBQUcsSUFBRyxHQUFJLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFBRSxHQUFFLE9BQVEsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFHLEdBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxFQUFHLEtBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUksT0FBTyxJQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsV0FBTyxLQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxTQUFTLEdBQUcsR0FBSSxHQUFFLEVBQUUsS0FBSyxLQUFLLEVBQUUsRUFBRSxHQUFFLEdBQUssU0FBUSxPQUFPLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFFBQVEsSUFBSSxFQUFFLEtBQUssS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxLQUFLLEdBQUcsS0FBSyxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRSxHQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRyxRQUFPLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssRUFBRSxZQUFXLEdBQUksSUFBSSxFQUFFLFNBQVMsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEtBQUssRUFBRSxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsS0FBSyxFQUFHLE9BQU8sSUFBRyxFQUFFLFNBQVMsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxLQUFLLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFJLE9BQU8sR0FBRyxLQUFJLEVBQUUsV0FBVyxHQUFHLGVBQWdCLEdBQUUsS0FBTSxXQUFVLCtCQUFnQyxJQUFJLEdBQUUsRUFBRSxVQUFVLE9BQU8sRUFBRSxVQUFVLE9BQUcsSUFBUSxFQUFFLFNBQVMsR0FBRyxPQUFPLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLEtBQUssR0FBRyxLQUFLLEtBQUssR0FBRyxJQUFHLEdBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUssT0FBTyxJQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsY0FBYSxFQUFHLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLFVBQVUsV0FBVyxXQUFXLE1BQU8sTUFBSyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsdUJBQXVCLEdBQUUsR0FBSSxFQUFFLEVBQUUsU0FBUyxHQUFHLE1BQU8sR0FBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLE9BQU8sR0FBSSxLQUFJLEdBQUksSUFBRyxpSEFBaUgsTUFBTSxLQUFLLEdBQUcsRUFBRSxHQUFHLE9BQU8sSUFBSSxFQUFFLEdBQUcsTUFBTyxLQUFJLEdBQUksSUFBRyxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLElBQUksRUFBRSxHQUFHLE1BQU8sR0FBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsVUFBVSxJQUFJLFNBQVMsR0FBRyxNQUFPLEdBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksT0FBTyxTQUFTLEdBQUcsR0FBRyxFQUFFLEdBQUcsTUFBTyxHQUFFLEVBQUUsRUFBRyxNQUFNLFdBQVUsRUFBRSxzQkFBc0IsVUFBVSxXQUFXLEdBQUUsR0FBSSxVQUFVLFdBQVcsR0FBRSxLQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLFVBQVUsT0FBTyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSx5QkFBeUIsRUFBRSxvQkFBb0IsRUFBRSxzQkFBc0IsSUFBSSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsV0FBVyxHQUFJLEdBQUUsR0FBSSxPQUFNLFVBQVUsR0FBRyxLQUFLLE1BQU0sR0FBRyxFQUFFLEtBQUssTUFBTSxFQUFFLE9BQU8sT0FBTyxRQUFRLFVBQVUsU0FBUyxHQUFHLE9BQUcsS0FBUyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksR0FBSSxHQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxVQUFVLE9BQU8sR0FBRyxFQUFFLEtBQUssVUFBVSxLQUFNLE9BQU8sR0FBRSxFQUFFLEdBQUcsa0JBQW1CLEtBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FBRyxJQUFJLEVBQUUsRUFBRSxLQUFLLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFPLEtBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFVBQVUsSUFBSSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsRUFBRSxVQUFVLFNBQVMsRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLFFBQU8sR0FBSSxFQUFFLEVBQUUsS0FBSyxRQUFPLElBQUssU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksa0JBQWtCLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLGVBQWUsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUksS0FBSSxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLGVBQWUsR0FBRyxXQUFXLGVBQWUsWUFBWSxpQkFBaUIsZUFBZSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVUsS0FBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxRQUFRLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFJLEdBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSx3bkdBQXduRyxNQUFNLFNBQVMsRUFBRSxHQUFHLFFBQVMsR0FBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxFQUFHLEtBQUksRUFBRSxNQUFPLEVBQUUsSUFBRyxHQUFHLGtCQUFtQixNQUFLLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxRQUFPLEdBQUcsT0FBTyxFQUFFLFFBQVEsSUFBSSxTQUFTLEdBQUcsTUFBTSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsU0FBUyxRQUFRLElBQUksS0FBSyxNQUFNLE9BQU8sR0FBRyxLQUFLLE1BQU0sUUFBUyxHQUFFLEdBQUcsTUFBTSxtRUFBbUUsS0FBSyxTQUFTLG1CQUFtQixLQUFLLFVBQVUsTUFBTSxNQUFNLEVBQUUsUUFBUSxTQUFTLEdBQUcsR0FBSSxLQUFLLE9BQU8sR0FBRSxTQUFTLFdBQVcsTUFBTyxNQUFLLElBQUksU0FBUyxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRyxPQUFPLEdBQUUsR0FBRyxVQUFVLEVBQUUsR0FBRyxJQUFJLEVBQUUsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsZ0JBQWlCLEtBQUksSUFBSSxLQUFLLEVBQUUsS0FBTSxLQUFJLEdBQUksTUFBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLE9BQU8sSUFBSSxDQUFDLEdBQUksR0FBRSxLQUFLLEdBQUcsRUFBRyxpQkFBaUIsS0FBSSxFQUFFLElBQUcsR0FBSSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxpQkFBaUIsR0FBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxNQUFNLElBQUksU0FBUyxFQUFFLEVBQUUsR0FBRyxRQUFTLEdBQUUsR0FBRyxFQUFFLElBQUksR0FBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxLQUFNLEdBQUUsUUFBUSxFQUFFLFNBQVMsU0FBUyxFQUFFLEVBQUUsR0FBRyxRQUFTLEdBQUUsR0FBRyxJQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUksSUFBRyxFQUFFLENBQUMsRUFBRSxNQUFPLEtBQUksR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sT0FBTyxJQUFJLEVBQUUsTUFBTSxHQUFHLEVBQUUsTUFBTSxHQUFJLE1BQUssRUFBRSxFQUFFLE1BQU0sT0FBTyxJQUFJLEVBQUUsTUFBTSxLQUFLLEVBQUUsRUFBRSxNQUFNLElBQUssR0FBRSxNQUFNLE9BQU8sRUFBRSxNQUFNLFNBQVMsRUFBRSxNQUFNLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQyxJQUFJLEdBQUksTUFBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sT0FBTyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxJQUFLLEdBQUUsRUFBRSxLQUFLLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxNQUFNLEtBQUssUUFBUyxLQUFJLEdBQUksR0FBRSxTQUFTLGNBQWMsUUFBUyxPQUFPLEdBQUUsS0FBSyxXQUFXLEVBQUUsWUFBWSxHQUFHLEVBQUUsUUFBUyxHQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxTQUFTLGNBQWMsMkJBQTJCLEVBQUUsR0FBRyxLQUFNLElBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxNQUFPLEVBQUUsR0FBRSxXQUFXLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFJLEdBQUUsR0FBSSxHQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEtBQUssRUFBRSxHQUFFLEdBQUksRUFBRSxFQUFFLEtBQUssS0FBSyxFQUFFLEdBQUUsT0FBUyxHQUFFLElBQUksRUFBRSxFQUFFLEtBQUssS0FBSyxHQUFHLEVBQUUsV0FBVyxFQUFFLFdBQVcsWUFBWSxHQUFJLE9BQU8sR0FBRSxHQUFHLFNBQVMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLE1BQU8sR0FBRSxFQUFFLE9BQVEsTUFBSyxRQUFTLEdBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsR0FBSSxJQUFHLEVBQUUsV0FBVyxFQUFFLFdBQVcsUUFBUSxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUksR0FBRSxTQUFTLGVBQWUsR0FBRyxFQUFFLEVBQUUsVUFBVyxHQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxJQUFJLFFBQVMsR0FBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsU0FBVSxJQUFHLEdBQUcsRUFBRSxhQUFhLFFBQVEsR0FBRyxJQUFJLEdBQUcsbUJBQW1CLEVBQUUsUUFBUSxHQUFHLE1BQU0sR0FBRyx1REFBdUQsS0FBSyxTQUFTLG1CQUFtQixLQUFLLFVBQVUsTUFBTSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsUUFBUSxNQUFNLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsV0FBWSxHQUFFLFlBQVksU0FBUyxlQUFlLEtBQUssR0FBSSxHQUFFLG1CQUFvQixTQUFTLElBQUcsbUJBQW9CLFFBQU8sUUFBUSxFQUFFLEtBQU0sSUFBSSxPQUFNLDBKQUEySixJQUFJLEdBQUUsRUFBRSxJQUFJLEtBQUssRUFBRSxJQUFJLFNBQVMsTUFBTSxTQUFTLHFCQUFxQixRQUFRLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFFLEVBQUcsRUFBRSxhQUFhLEVBQUUsbUJBQW9CLFlBQVcsZUFBZSxLQUFLLFVBQVUsVUFBVSxjQUFlLEdBQUUsUUFBUSxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBRSxJQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUcsT0FBTyxHQUFFLEdBQUcsU0FBUyxHQUFHLElBQUksR0FBSSxNQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFJLEdBQUUsT0FBTyxFQUFFLEtBQUssR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUssS0FBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRyxJQUFHLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxPQUFPLElBQUksRUFBRSxNQUFNLFdBQVksR0FBRSxFQUFFLE9BQVEsSUFBSSxHQUFFLFdBQVcs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QUEsV0FDQSxNQUFBLE1BQUEsS0FBQSxJQUFBLEtBQUEsWUFHQSxTQUNBLGtCQUFBLFdBQ0EsS0FBQSxhQUVBLGVBQUEsV0FBQSxHQUFBLEdBQUEsSUFDQSxNQUFBLGNBQ0EsS0FBQSxZQUNBLEtBQUEsUUFFQSxLQUFBLE9BQUEsWUFDQSxFQUFBLEVBQUEsU0FBQSxLQUFBLE9BQUEsV0FBQSxRQUFBLFNBQUEsR0FDQSxFQUFBLEtBQUEsR0FBQSxFQUFBLE9BQUEsVUFBQSxLQUlBLEtBQUEscUJBRUEsVUFBQSxXQUtBLE1BSEEsTUFBQSxVQUdBLFFBQUEsS0FBQSxPQUFBLFlBR0EsS0FBQSxPQUNBLE1BQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxRQUNBLEtBQUEsU0FFQSxLQUFBLE9BQ0EsTUFBQSxXQUNBLEtBQUEsV0FFQSxLQUFBLGlCQUNBLE1BQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxrQkFDQSxLQUFBLEtBQUEsc0JBQUEsT0FBQSxXQUVBLEtBQUEsYUFDQSxNQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEsY0FDQSxLQUFBLFNBRUEsS0FBQSxVQUNBLE1BQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxXQUNBLEtBQUEsU0FFQSxLQUFBLGFBQ0EsTUFBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLGNBQ0EsS0FBQSxTQUVBLEtBQUEsYUFDQSxNQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEsY0FDQSxLQUFBLFNBRUEsS0FBQSxpQkFDQSxNQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEsa0JBQ0EsS0FBQSxTQUVBLEtBQUEsaUJBQ0EsTUFBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLGtCQUNBLEtBQUEsU0FFQSxLQUFBLFVBQ0EsTUFBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLFdBQ0EsS0FBQSxTQUVBLEtBQUEsVUFDQSxNQUFBLEtBQUEsT0FBQSxNQUFBLEtBQUEsS0FBQSxTQUFBLEtBQUEsT0FBQSxNQUFBLEtBQUEsS0FBQSxRQUFBLGFBQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxXQUNBLFFBQUEsS0FBQSxPQUFBLFFBQUEscUJBQ0EsS0FBQSxXQUVBLFNBQUEsS0FBQSxPQUFBLFdBQ0EsS0FBQSxZQUVBLEtBQUEsT0FDQSxNQUFBLEtBQUEsS0FBQSxLQUNBLE1BQUEsS0FBQSxJQUFBLFFBQ0EsS0FBQSxTQUVBLEtBQUEsT0FDQSxNQUFBLEtBQUEsS0FBQSxLQUNBLEtBQUEsV0FFQSxLQUFBLEtBQ0EsTUFBQSxLQUFBLEtBQUEsR0FDQSxLQUFBLFdBRUEsS0FBQSxpQkFDQSxNQUFBLEtBQUEsS0FBQSxlQUNBLE1BQUEsS0FBQSxJQUFBLGtCQUNBLEtBQUEsS0FBQSxzQkFBQSxPQUFBLFdBRUEsS0FBQSxhQUNBLE1BQUEsS0FBQSxLQUFBLFdBQ0EsTUFBQSxLQUFBLElBQUEsY0FDQSxLQUFBLFNBRUEsS0FBQSxVQUNBLE1BQUEsS0FBQSxLQUFBLFFBQ0EsTUFBQSxLQUFBLElBQUEsV0FDQSxLQUFBLFNBRUEsS0FBQSxhQUNBLE1BQUEsS0FBQSxLQUFBLFdBQ0EsTUFBQSxLQUFBLElBQUEsY0FDQSxLQUFBLFNBRUEsS0FBQSxhQUNBLE1BQUEsS0FBQSxLQUFBLFdBQ0EsTUFBQSxLQUFBLElBQUEsY0FDQSxLQUFBLFNBRUEsS0FBQSxpQkFDQSxNQUFBLEtBQUEsS0FBQSxlQUNBLE1BQUEsS0FBQSxJQUFBLGtCQUNBLEtBQUEsU0FFQSxLQUFBLGlCQUNBLE1BQUEsS0FBQSxLQUFBLGVBQ0EsTUFBQSxLQUFBLElBQUEsa0JBQ0EsS0FBQSxTQUVBLEtBQUEsVUFDQSxNQUFBLEtBQUEsS0FBQSxRQUNBLE1BQUEsS0FBQSxJQUFBLFdBQ0EsS0FBQSxTQUVBLEtBQUEsVUFDQSxNQUFBLEtBQUEsS0FBQSxTQUFBLEtBQUEsS0FBQSxRQUFBLGFBQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxXQUNBLFFBQUEsS0FBQSxPQUFBLFFBQUEscUJBQ0EsS0FBQSxnQkE1REEsSUFnRUEsS0FBQSxXQUNBLEtBQUEsT0FBQSxTQUFBLGdCQUNBLEtBQUEsaUJBQ0EsS0FBQSxPQUFBLEtBQUEsS0FBQSxZQUVBLE1BQUEsU0FBQSxHQUNBLEtBQUEsVUFDQSxJQUNBLEdBQ0EsT0FBQSxXQUdBLEtBQUEsUUFBQSxJQUVBLEtBQUEsT0FBQSxLQUFBLEtBQUEsWUFFQSxXQUFBLFdBQUEsR0FBQSxHQUFBLEtBQ0EsRUFBQSxJQUNBLE9BQUEsTUFBQSxLQUFBLFdBQUEsS0FBQSxVQUFBLEtBQUEsU0FBQSxHQUdBLE1BQUEsRUFBQSxPQUNBLEVBQUEsV0FBQSxFQUFBLE9BQUEsUUFHQSxNQUFBLEVBQUEsT0FDQSxFQUFBLE9BQUEsT0FBQSxhQUFBLEVBQUEsT0FBQSxTQUNBLEVBQUEsT0FBQSxPQUFBLGdCQUlBLGNBQUEsV0FBQSxHQUFBLEdBQUEsS0FDQSxFQUFBLElBRUEsT0FBQSxNQUFBLEtBQUEsY0FBQSxLQUFBLFNBQUEsR0FBQSxLQUFBLFVBQUEsS0FBQSxTQUFBLEdBR0EsTUFBQSxFQUFBLE9BQ0EsRUFBQSxXQUFBLEVBQUEsT0FBQSxRQUdBLE1BQUEsRUFBQSxPQUNBLEVBQUEsT0FBQSxPQUFBLGdCQUFBLEVBQUEsT0FBQSxTQUNBLEVBQUEsT0FBQSxPQUFBLGlCQUtBLE9BQ0EsVUFBQSxXQUNBLEtBQUEsc0xBNVBBLGtCQUFBLE9BQUEsV0FBQSxHQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsZUFBQSxFQUFBLEVBQUEsTUFBQSxJQUFBLENBQUEsT0FBQSxHQUFBLE9BQUEsRUFBQSxTQUFBLE9BQUEsS0FBQSxFQUFBLFVBQUEsa0JBQUEsRUFBQSxPQUFBLE9BQUEsWUFBQSxLQUFBLEVBQUEsbUJBQUEsT0FBQSxNQUFBLFFBQUEsRUFBQSxVQUFBLEVBQUEsSUFBQSxjQUFBLEVBQUEsSUFBQSxnQkFBQSxJQUFBLE1BQUEsRUFBQSxTQUFBLEVBQUEsVUFBQSxPQUFBLE9BQUEsRUFBQSxPQUFBLFlBQUEsRUFBQSxTQUFBLGNBQUEsRUFBQSxjQUFBLEVBQUEsT0FBQSxZQUFBLG9CQUFBLE9BQUEsS0FBQSxXQUFBLEtBQUEsWUFBQSxFQUFBLFVBQUEsWUFBQSxrQkFBQSxPQUFBLEtBQUEsVUFBQSxJQUFBLE1BQUEsRUFBQSxTQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGNBQUEsRUFBQSxHQUFBLEtBQUEsUUFBQSxFQUFBLFVBQUEsRUFBQSxVQUFBLFlBQUEsaUJBQUEsT0FBQSxLQUFBLFVBQUEsSUFBQSxNQUFBLEVBQUEsY0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxrQkFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsU0FBQSxFQUFBLFVBQUEsRUFBQSxVQUFBLFlBQUEsaUJBQUEsT0FBQSxLQUFBLFVBQUEsSUFBQSxNQUFBLEVBQUEsaUJBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEscUJBQUEsRUFBQSxVQUFBLElBQUEsSUFBQSxJQUFBLGlCQUFBOzs7c1NDbUJBLEVBQUEsUUFBQSxnQ0FDQSxFQUFBLFFBQUEsc0NBQ0EsRUFBQSxRQUFBLHdDQUdBLFlBQ0Esa0JBQUEsRUFBQSxRQUNBLHdCQUFBLEVBQUEsUUFDQSxTQUFBLEVBQUEsU0FFQSxLQUFBLGlCQUNBLE9BQUEsV0FBQSxhQUFBLGNBQ0EsS0FBQSxXQUNBLE9BQ0EsY0FDQSxZQUNBLFFBQ0EsS0FBQSxZQUNBLFdBQUEsRUFDQSxjQUFBLEVBQ0EsWUFBQSxFQUNBLG1CQUFBLEdBQ0EsbUJBQUEsR0FDQSxpQkFBQSxLQUdBLFVBQ0EsS0FBQSxXQUNBLE1BQUEsTUFBQSxPQUFBLE1BQUEsS0FBQSxNQUVBLFFBQUEsV0FDQSxNQUFBLE1BQUEsT0FBQSxNQUFBLEtBQUEsU0FFQSxPQUFBLFdBQ0EsTUFBQSxNQUFBLGFBRUEsVUFBQSxXQUNBLE1BQUEsTUFBQSxLQUFBLElBQUEsS0FBQSxZQUdBLFNBQ0EsWUFBQSxTQUFBLEdBQ0EsZ0JBQUEsRUFBQSxNQUNBLEtBQUEsU0FBQSxjQUVBLEtBQUEsZUFBQSxLQUFBLFNBQUEsZUFJQSwwQkFBQSxTQUFBLEdBQ0EsS0FBQSxjQUNBLEtBQUEsT0FBQSxNQUFBLHVCQUNBLFNBQUEsS0FDQSxLQUFBLFlBQ0EsWUFBQSxFQUNBLGNBQ0EsTUFBQSxlQUNBLFVBQUEsS0FBQSxJQUFBLGdEQUtBLGtCQUFBLFdBQ0EsS0FBQSxhQUVBLGVBQUEsV0FBQSxHQUFBLEdBQUEsSUFDQSxNQUFBLGNBQ0EsS0FBQSxZQUNBLEtBQUEsUUFDQSxLQUFBLG1CQUFBLEdBQ0EsS0FBQSxpQkFBQSxHQUVBLEtBQUEsT0FBQSxZQUNBLEVBQUEsRUFBQSxTQUFBLEtBQUEsT0FBQSxXQUFBLFFBQUEsU0FBQSxHQUNBLEVBQUEsS0FBQSxHQUFBLEVBQUEsT0FBQSxVQUFBLEtBSUEsS0FBQSxxQkFFQSxVQUFBLFdBRUEsR0FBQSxRQUFBLEtBQUEsT0FBQSxVQUNBLFFBQ0EsS0FBQSxlQUNBLE1BQUEsS0FBQSxLQUFBLGFBQ0EsTUFBQSxLQUFBLElBQUEsZ0JBQ0EsS0FBQSxTQUVBLEtBQUEsT0FDQSxNQUFBLEtBQUEsS0FBQSxNQUFBLEtBQUEsbUJBQ0EsTUFBQSxLQUFBLElBQUEsUUFDQSxLQUFBLFNBRUEsS0FBQSxjQUNBLE1BQUEsS0FBQSxLQUFBLFlBQ0EsTUFBQSxLQUFBLElBQUEsbUNBQ0EsS0FBQSxTQUVBLEtBQUEsY0FDQSxNQUFBLEtBQUEsS0FBQSxhQUFBLEtBQUEsbUJBQ0EsWUFBQSxLQUFBLElBQUEsMkNBQ0EsTUFBQSxLQUFBLElBQUEscUNBQ0EsS0FBQSxhQUVBLEtBQUEsa0JBQ0EsTUFBQSxLQUFBLEtBQUEsZ0JBQ0EsTUFBQSxLQUFBLElBQUEseUNBQ0EsS0FBQSxTQUVBLEtBQUEsWUFDQSxNQUFBLEtBQUEsS0FBQSxXQUFBLEtBQUEsaUJBRUEsTUFBQSxLQUFBLElBQUEsbUNBQ0EsS0FBQSxhQUVBLEtBQUEsZ0JBQ0EsTUFBQSxLQUFBLEtBQUEsY0FDQSxNQUFBLEtBQUEsSUFBQSx1Q0FDQSxLQUFBLFNBRUEsS0FBQSxjQUNBLE1BQUEsS0FBQSxJQUFBLHFDQUNBLEtBQUEsYUFDQSxTQUFBLFFBQ0EsY0FBQSxTQUNBLFdBQUEsRUFDQSxTQUNBLFNBRUEsTUFBQSxLQUFBLElBQUEsNkJBQ0EsWUFBQSxLQUFBLElBQUEsNkJBQ0EsS0FBQSxPQUNBLEtBQUEsU0FFQSxNQUFBLEtBQUEsSUFBQSwyQkFDQSxZQUFBLEtBQUEsSUFBQSwyQkFDQSxLQUFBLE9BQ0EsS0FBQSxPQUVBLE1BQUEsS0FBQSxJQUFBLCtCQUNBLFlBQUEsS0FBQSxJQUFBLCtCQUNBLEtBQUEsU0FDQSxLQUFBLFdBRUEsTUFBQSxLQUFBLElBQUEsOEJBQ0EsWUFBQSxLQUFBLElBQUEsOEJBQ0EsS0FBQSxXQUNBLEtBQUEsWUFHQSxLQUFBLFdBQ0EsTUFBQSxLQUFBLElBQUEsOEJBQ0EsS0FBQSxhQUNBLFNBQUEsUUFDQSxjQUFBLFFBQ0EsV0FBQSxFQUNBLFNBQ0EsU0FRQSxNQUFBLEtBQUEsSUFBQSwyQkFDQSxZQUFBLEtBQUEsSUFBQSwyQkFDQSxLQUFBLFNBQ0EsS0FBQSxVQUVBLE1BQUEsS0FBQSxJQUFBLDJCQUNBLFlBQUEsS0FBQSxJQUFBLDJCQUNBLEtBQUEsV0FDQSxLQUFBLFlBR0EsS0FBQSxRQUNBLFVBQUEsRUFDQSxTQUNBLEtBQUEsUUFFQSxNQUFBLE9BQUEsV0FJQSxLQUFBLFdBQ0EsS0FBQSxpQkFDQSxLQUFBLE9BQUEsS0FBQSxLQUFBLFlBRUEsTUFBQSxTQUFBLEdBQ0EsS0FBQSxVQUNBLElBQ0EsR0FDQSxPQUFBLFdBR0EsS0FBQSxRQUFBLElBRUEsS0FBQSxPQUFBLEtBQUEsS0FBQSxZQUVBLGVBQUEsU0FBQSxHQUFBLEdBQUEsR0FBQSxJQUFBLFFBQUEsRUFBQSxFQUFBLFNBQUEsRUFBQSxRQUFBLEtBQUEsUUFBQSxLQUFBLEdBQUEsR0FBQSxDQUFBLE9BQUEsR0FBQSxRQUFBLEtBQUEsU0FBQSxHQUFBLE9BQUEsT0FBQSxFQUFBLEtBQUEsRUFBQSxNQUFBLElBQUEsR0FBQSxNQUVBLEdBQUEsRUFBQSxTQUZBLEVBQUEsS0FBQSxFQUFBLEVBQUEsS0FBQSxtQkFBQSxFQUFBLEtBQUEsR0FBQSxHQUlBLEVBQUEsRUFBQSxLQUVBLEtBQUEsRUFBQSxNQUNBLEVBQUEsT0FBQSxlQUFBLHFCQUNBLEVBQUEsU0FBQSxLQUFBLEVBQUEsT0FBQSxnQkFBQSxZQUNBLEVBQUEsbUJBQUEsRUFBQSxPQUFBLGdCQUFBLFlBQ0EsRUFBQSxTQUFBLFlBQUEsRUFBQSxZQUNBLEVBQUEsS0FBQSxZQUFBLEVBQUEsU0FBQSxZQUNBLEVBQUEsU0FBQSxnQkFBQSxFQUFBLGdCQUNBLEVBQUEsS0FBQSxnQkFBQSxFQUFBLFNBQUEsZ0JBQ0EsRUFBQSxTQUFBLFVBQUEsRUFBQSxVQUNBLEVBQUEsS0FBQSxVQUFBLEVBQUEsU0FBQSxVQUNBLEVBQUEsU0FBQSxjQUFBLEVBQUEsY0FDQSxFQUFBLEtBQUEsY0FBQSxFQUFBLFNBQUEsY0FDQSxFQUFBLEtBQUEsYUFBQSxFQUNBLEVBQUEsU0FBQSxhQUFBLEdBbkJBLE1BQUEsRUFBQSxLQUFBLENBQUEsRUFBQSxLQUFBLENBQUEsT0FBQSxNQXdCQSxHQUFBLG1CQUFBLEdBQ0EsRUFBQSxTQUFBLEtBQUEsR0F6QkEsRUFBQSxPQUFBLFNBQUEsS0FBQSxHQUFBLEdBQUEsTUFBQSxFQUFBLEtBQUEsQ0FBQSxFQUFBLEtBQUEsRUFBQSxPQUFBLE1BOEJBLEdBQUEsU0FBQSxLQUFBLEdBOUJBLEVBQUEsT0FBQSxTQUFBLEtBQUEsSUFBQSxJQUFBLE1BQUEsTUFBQSxHQUFBLFNBQUEsRUFBQSxTQWtDQSxhQUFBLFdBQUEsR0FBQSxHQUFBLElBQUEsUUFBQSxFQUFBLEVBQUEsU0FBQSxFQUFBLFFBQUEsS0FBQSxRQUFBLEtBQUEsR0FBQSxHQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxDQUFBLE9BQUEsR0FBQSxRQUFBLEtBQUEsU0FBQSxHQUFBLE9BQUEsT0FBQSxFQUFBLEtBQUEsRUFBQSxNQUFBLElBQUEsR0FBQSxNQUNBLEdBQUEsWUFBQSxFQURBLEVBQUEsS0FBQSxFQUFBLEVBQUEsS0FBQSxjQUlBLGFBQUEsRUFBQSxTQUFBLGFBQ0EsWUFBQSxFQUFBLFNBQUEsWUFDQSxnQkFBQSxFQUFBLFNBQUEsZ0JBQ0EsVUFBQSxFQUFBLFNBQUEsVUFDQSxjQUFBLEVBQUEsU0FBQSxjQUNBLFlBQUEsRUFBQSxTQUFBLFlBQ0EsWUFBQSxFQUFBLFNBQUEsWUFDQSxTQUFBLEVBQUEsU0FBQSxVQVhBLEtBQUEsR0FBQSxHQUdBLEVBQUEs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WUFDQSxLQUFBLE9BQ0EsVUFBQSxFQUNBLFVBR0EsVUFDQSxPQUFBLFdBRUEsR0FBQSxLQUFBLE9BQUEsUUFBQSxxQkFDQSxNQUFBLE1BQUEsYUFHQSxVQUFBLFdBQ0EsTUFBQSxNQUFBLEtBQUEsSUFBQSxLQUFBLFdBRUEsWUFBQSxXQUVBLE1BQUEsTUFBQSxLQUFBLEtBQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxLQUFBLEtBR0EsU0FDQSxlQUFBLFdBQUEsR0FBQSxHQUFBLElBQ0EsTUFBQSxjQUNBLEtBQUEsWUFDQSxLQUFBLFFBRUEsS0FBQSxPQUFBLFlBQ0EsRUFBQSxFQUFBLFNBQUEsS0FBQSxPQUFBLFdBQUEsUUFBQSxTQUFBLEdBQ0EsRUFBQSxLQUFBLEdBQUEsRUFBQSxPQUFBLFVBQUEsS0FJQSxLQUFBLHFCQUVBLGtCQUFBLFdBQ0EsS0FBQSxhQUVBLFVBQUEsV0FLQSxNQUhBLE1BQUEsVUFHQSxRQUFBLEtBQUEsT0FBQSxZQUVBLEtBQUEsWUFDQSxNQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEsYUFDQSxLQUFBLFNBRUEsS0FBQSxXQUNBLE1BQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxZQUNBLEtBQUEsU0FFQSxLQUFBLFdBQ0EsTUFBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLHlCQUNBLEtBQUEsVUFFQSxLQUFBLFVBQ0EsTUFBQSxLQUFBLEtBQUEsVUFDQSxNQUFBLEdBQ0EsS0FBQSxXQUVBLEtBQUEsUUFDQSxNQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEsU0FDQSxLQUFBLFNBRUEsS0FBQSxPQUNBLE1BQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxxQkFDQSxVQUNBLE1BQUEsV0FDQSxLQUFBLEtBQUEsSUFBQSxvQkFFQSxNQUFBLGlCQUNBLEtBQUEsS0FBQSxJQUFBLHlCQUVBLEtBQUEsV0FFQSxLQUFBLFVBQ0EsTUFBQSxLQUFBLEtBQUEsYUFBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLFdBQ0EsUUFBQSxLQUFBLE9BQUEsUUFBQSxxQkFDQSxLQUFBLFdBRUEsU0FBQSxLQUFBLE9BQUEsWUFFQSxLQUFBLEtBQ0EsTUFBQSxLQUFBLEtBQUEsR0FDQSxLQUFBLFdBRUEsS0FBQSxZQUNBLE1BQUEsS0FBQSxLQUFBLFVBQ0EsTUFBQSxLQUFBLElBQUEsYUFDQSxLQUFBLFNBRUEsS0FBQSxXQUNBLE1BQUEsS0FBQSxLQUFBLFNBQ0EsTUFBQSxLQUFBLElBQUEsWUFDQSxLQUFBLFNBRUEsS0FBQSxRQUNBLE1BQUEsS0FBQSxLQUFBLE1BQ0EsTUFBQSxLQUFBLElBQUEsU0FDQSxLQUFBLFNBRUEsS0FBQSxPQUNBLE1BQUEsS0FBQSxLQUFBLEtBQ0EsTUFBQSxLQUFBLElBQUEscUJBQ0EsVUFDQSxNQUFBLFdBQ0EsS0FBQSxLQUFBLElBQUEsb0JBRUEsTUFBQSxpQkFDQSxLQUFBLEtBQUEsSUFBQSx5QkFFQSxLQUFBLEtBQUEsWUFBQSxTQUFBLFdBRUEsS0FBQSxVQUNBLE1BQUEsS0FBQSxLQUFBLFNBQUEsS0FBQSxLQUFBLFFBQUEsYUFBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLFdBQ0EsUUFBQSxLQUFBLE9BQUEsUUFBQSxxQkFDQSxLQUFBLGVBckNBLElBeUNBLEtBQUEsV0FDQSxLQUFBLE9BQUEsU0FBQSxnQkFDQSxLQUFBLGlCQUNBLEtBQUEsT0FBQSxLQUFBLEtBQUEsWUFFQSxNQUFBLFNBQUEsR0FDQSxLQUFBLFVBQ0EsSUFDQSxHQUNBLE9BQUEsV0FHQSxLQUFBLFFBQUEsSUFFQSxLQUFBLE9BQUEsS0FBQSxLQUFBLFlBRUEsUUFBQSxXQUFBLEdBQUEsR0FBQSxLQUNBLEVBQUEsSUFDQSxPQUFBLE1BQUEsS0FBQSxRQUFBLEtBQUEsVUFBQSxLQUFBLFNBQUEsR0FHQSxNQUFBLEVBQUEsT0FDQSxFQUFBLFdBQUEsRUFBQSxPQUFBLFFBR0EsTUFBQSxFQUFBLE9BQ0EsRUFBQSxPQUFBLE9BQUEsVUFBQSxFQUFBLE9BQUEsTUFDQSxFQUFBLE9BQUEsT0FBQSxZQUNBLEVBQUEsZ0JBQUEsRUFBQSxPQUFBLFVBS0EsZ0JBQUEsU0FBQSxHQUFBLEdBQUEsR0FBQSxJQUFBLFFBQUEsRUFBQSxFQUFBLFNBQUEsRUFBQSxRQUFBLEtBQUEsUUFBQSxLQUFBLEdBQUEsRUFBQSxPQUFBLEdBQUEsUUFBQSxLQUFBLFNBQUEsR0FBQSxPQUFBLE9BQUEsRUFBQSxLQUFBLEVBQUEsTUFBQSxJQUFBLEdBQUEsR0FBQSxFQUFBLE1BQUEsQ0FBQSxFQUFBLEtBQUEsQ0FBQSxPQUFBLE1BQUEsR0FBQSxLQUFBLEVBQUEsRUFBQSxLQUFBLFVBQUEsS0FBQSxHQUVBLEVBQUEsRUFBQSxLQUNBLE1BQUEsRUFBQSxPQUNBLEVBQUEsTUFBQSxFQUFBLE9BQUEsTUFKQSxLQUFBLEdBQUEsTUFBQSxHQUFBLE9BQUEsU0FBQSxFQUFBLEtBQUEsa0JBU0EsTUFBQSxFQUFBLE1BQ0EsU0FBQSxFQUFBLFdBRkEsS0FBQSxTQUFBLEdBS0EsRUFBQSxNQUFBLEdBR0EsTUFBQSxFQUFBLE9BQ0EsRUFBQSxXQUFBLEVBQUEsT0FBQSxRQUdBLE1BQUEsRUFBQSxPQUNBLEVBQUEsY0FBQSxLQXJCQSxLQUFBLEdBQUEsSUFBQSxNQUFBLE1BQUEsR0FBQSxTQUFBLEVBQUEsU0F5QkEsV0FBQSxXQUFBLEdBQUEsR0FBQSxLQUNBLEVBQUEsSUFDQSxPQUFBLE1BQUEsS0FBQSxXQUFBLEtBQUEsU0FBQSxHQUFBLEtBQUEsVUFBQSxLQUFBLFNBQUEsR0FHQSxNQUFBLEVBQUEsT0FDQSxFQUFBLFdBQUEsRUFBQSxPQUFBLFFBR0EsTUFBQSxFQUFBLE9BQ0EsRUFBQSxPQUFBLE9BQUEsYUFBQSxFQUFBLE9BQUEsTUFDQSxFQUFBLE9BQUEsT0FBQSxpQkFLQSxPQUNBLFVBQUEsV0FDQSxLQUFBLHNMQTVPQSxrQkFBQSxPQUFBLFdBQUEsR0FBQSxHQUFBLEtBQUEsRUFBQSxFQUFBLGVBQUEsRUFBQSxFQUFBLE1BQUEsSUFBQSxDQUFBLE9BQUEsR0FBQSxPQUFBLEVBQUEsU0FBQSxPQUFBLEtBQUEsRUFBQSxVQUFBLGtCQUFBLEVBQUEsT0FBQSxPQUFBLFlBQUEsS0FBQSxFQUFBLG1CQUFBLE9BQUEsTUFBQSxRQUFBLEVBQUEsVUFBQSxFQUFBLElBQUEsV0FBQSxFQUFBLElBQUEsYUFBQSxJQUFBLE1BQUEsRUFBQSxTQUFBLEVBQUEsVUFBQSxPQUFBLE9BQUEsRUFBQSxPQUFBLFlBQUEsRUFBQSxTQUFBLGNBQUEsRUFBQSxjQUFBLEVBQUEsT0FBQSxZQUFBLG9CQUFBLE9BQUEsS0FBQSxXQUFBLEtBQUEsWUFBQSxFQUFBLFVBQUEsWUFBQSxrQkFBQSxPQUFBLEtBQUEsVUFBQSxJQUFBLE1BQUEsRUFBQSxTQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGNBQUEsRUFBQSxHQUFBLEtBQUEsUUFBQSxFQUFBLFVBQUEsRUFBQSxVQUFBLFlBQUEsaUJBQUEsT0FBQSxLQUFBLFVBQUEsSUFBQSxNQUFBLEVBQUEsV0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxlQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxTQUFBLEVBQUEsVUFBQSxFQUFBLFVBQUEsWUFBQSxpQkFBQSxPQUFBLEtBQUEsVUFBQSxJQUFBLE1BQUEsRUFBQSxjQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGtCQUFBLEVBQUEsVUFBQSxJQUFBLElBQUEsSUFBQSxpQkFBQTs7O3NTQ2VBLEVBQUEsUUFBQSxnQ0FDQSxFQUFBLFFBQUEsd0NBRUEsWUFDQSxrQkFBQSxFQUFBLFFBQ0EsU0FBQSxFQUFBLFNBRUEsS0FBQSw0QkFDQSxPQUFBLFdBQUEsYUFBQSxjQUNBLEtBQUEsV0FDQSxPQUNBLGNBQ0EsWUFDQSxRQUNBLEtBQUEsd0JBQ0EsWUFBQSxJQUdBLFVBQ0EsT0FBQSxXQUNBLE1BQUEsTUFBQSxhQUVBLFVBQUEsV0FDQSxNQUFBLE1BQUEsS0FBQSxJQUFBLEtBQUEsWUFHQSxTQUNBLGtCQUFBLFdBQ0EsS0FBQSxhQUVBLGVBQUEsV0FBQSxHQUFBLEdBQUEsSUFDQSxNQUFBLGNBQ0EsS0FBQSxZQUNBLEtBQUEsUUFFQSxLQUFBLE9BQUEsWUFDQSxFQUFBLEVBQUEsU0FBQSxLQUFBLE9BQUEsV0FBQSxRQUFBLFNBQUEsR0FDQSxFQUFBLEtBQUEsR0FBQSxFQUFBLE9BQUEsVUFBQSxLQUlBLEtBQUEscUJBRUEsVUFBQSxXQUVBLEdBQUEsUUFBQSxLQUFBLE9BQUEsVUFDQSxRQUNBLEtBQUEscUJBQ0EsUUFBQSxLQUFBLElBQUEsc0JBQ0EsS0FBQSxZQUdBLEtBQUEsZUFDQSxNQUFBLEtBQUEsS0FBQSxhQUNBLE1BQUEsS0FBQSxJQUFBLGdCQUFBLEtBQ0EsS0FBQSxTQUdBLEtBQUEsVUFDQSxNQUFBLEtBQUEsS0FBQSxRQUNBLE1BQUEsS0FBQSxJQUFBLGdCQUFBLEtBQ0EsS0FBQSxTQUdBLEtBQUEsZUFDQSxNQUFBLEtBQUEsSUFBQSxnQ0FDQSxLQUFBLGFBQ0EsV0FBQSxFQUNBLFdBQUEsS0FBQSxJQUFBLFVBQ0EsU0FDQSxTQUVBLEtBQUEsZUFDQSxNQUFBLEtBQUEsS0FBQSxhQUNBLE1BQUEsS0FBQSxJQUFBLGdCQUFBLEtBQ0EsS0FBQSxTQUdBLEtBQUEsVUFDQSxNQUFBLEtBQUEsS0FBQSxRQUNBLE1BQUEsS0FBQSxJQUFBLGdCQUFBLEtBQ0EsS0FBQSxXQUlBLEtBQUEsNkJBQ0EsUUFBQSxLQUFBLElBQUEsdUJBQ0EsS0FBQSxZQUdBLEtBQUEsb0JBQ0EsTUFBQSxLQUFBLEtBQUEsa0JBQ0EsTUFBQSxLQUFBLElBQUEsYUFBQSxLQUNBLEtBQUEsU0FHQSxLQUFBLG1CQUNBLE1BQUEsS0FBQSxLQUFBLGlCQUNBLE1BQUEsS0FBQSxJQUFBLFlBQUEsS0FDQSxLQUFBLFNBR0EsS0FBQSxrQkFDQSxNQUFBLEtBQUEsS0FBQSxnQkFDQSxNQUFBLEtBQUEsSUFBQSxtQkFDQSxLQUFBLFNBR0EsS0FBQSxnQkFDQSxNQUFBLEtBQUEsS0FBQSxjQUNBLE1BQUEsS0FBQSxJQUFBLFNBQUEsS0FDQSxLQUFBLFVBR0EsS0FBQSxnQkFDQSxNQUFBLEtBQUEsS0FBQSxjQUNBLE1BQUEsS0FBQSxJQUFBLFNBQ0EsS0FBQSxTQUdBLEtBQUEsZUFDQSxNQUFBLEtBQUEsS0FBQSxhQUNBLE1BQUEsS0FBQSxJQUFBLGdCQUFBLEtBQ0EsS0FBQSxTQUdBLEtBQUEsa0JBQ0EsTUFBQSxLQUFBLEtBQUEsZ0JBQ0EsTUFBQSxLQUFBLElBQUEsV0FDQSxLQUFBLFNBR0EsS0FBQSxxQkFDQSxNQUFBLEtBQUEsS0FBQSxtQkFDQSxNQUFBLEtBQUEsSUFBQSxjQUFBLEtBQ0EsS0FBQSxTQUVBLEtBQUEscUJBQ0EsTUFBQSxLQUFBLEtBQUEsbUJBQ0EsTUFBQSxLQUFBLElBQUEsY0FBQSxLQUNBLEtBQUEsU0FHQSxLQUFBLDJCQUNBLFFBQUEsS0FBQSxJQUFBLHFCQUNBLEtBQUEsWUFHQSxLQUFBLGtCQUNBLE1BQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxLQUFBLFVBQ0EsTUFBQSxLQUFBLElBQUEsYUFBQSxLQUNBLEtBQUEsU0FHQSxLQUFBLGlCQUNBLE1BQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxLQUFBLFNBQ0EsTUFBQSxLQUFBLElBQUEsWUFBQSxLQUNBLEtBQUEsU0FHQSxLQUFBLGNBQ0EsTUFBQSxLQUFBLE9BQUEsTUFBQSxLQUFBLEtBQUEsU0FDQSxNQUFBLEtBQUEsSUFBQSxTQUFBLEtBQ0EsS0FBQSxVQUdBLEtBQUEsY0FDQSxNQUFBLEtBQUEsT0FBQSxNQUFBLEtBQUEsUUFBQSxLQUNBLE1BQUEsS0FBQSxJQUFBLFNBQUEsS0FDQSxLQUFBLFNBR0EsS0FBQSxtQkFDQSxNQUFBLEtBQUEsT0FBQSxNQUFBLEtBQUEsUUFBQSxXQUNBLE1BQUEsS0FBQSxJQUFBLGNBQ0EsS0FBQSxTQUdBLEtBQUEsc0JBQ0EsTUFBQSxLQUFBLE9BQUEsTUFBQSxLQUFBLFFBQUEsUUFDQSxNQUFBLEtBQUEsSUFBQSxXQUNBLEtBQUEsU0FHQSxLQUFBLG1CQUNBLE1BQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxRQUFBLFdBQ0EsTUFBQSxLQUFBLElBQUEsY0FDQSxLQUFBLFNBR0EsS0FBQSxtQkFDQSxNQUFBLEtBQUEsT0FBQSxNQUFBLEtBQUEsUUFBQSxXQUNBLE1BQUEsS0FBQSxJQUFBLGNBQ0EsS0FBQSxTQUdBLEtBQUEsbUNBQ0EsUUFBQSxLQUFBLElBQUEsNkJBQ0EsS0FBQSxZQUdBLEtBQUEsaUJBQ0EsTUFBQSxLQUFBLEtBQUEsZUFDQSxNQUFBLEtBQUEsSUFBQSxtREFBQSxLQUNBLEtBQUEsU0FHQSxLQUFBLHlCQUNBLE1BQUEsS0FBQSxLQUFBLHVCQUNBLE1BQUEsS0FBQSxJQUFBLG1EQUFBLEtBQ0EsS0FBQSxTQWVBLEtBQUEsZ0JBQ0EsUUFBQSxJQUNBLEtBQUEsWUFHQSxLQUFBLGlCQUNBLE1BQUEsS0FBQSxLQUFBLGVBQ0EsTUFBQSxLQUFBLElBQUEsbURBQUEsS0FDQSxLQUFBLFNBR0EsS0FBQSxjQUNBLE1BQUEsS0FBQSxLQUFBLFlBQ0EsTUFBQSxLQUFBLElBQUEsZUFBQSxLQUNBLEtBQUEsS0FBQSxJQUFBLG1CQUNBLEtBQUEsU0FHQSxLQUFBLG1DQUNBLE1BQUEsS0FBQSxLQUFBLGlDQUNBLE1BQUEsS0FBQSxJQUFBLG9DQUFBLE9BQ0EsS0FBQSxLQUFBLElBQUEsbUJBQ0EsS0FBQSxRQUdBLE1BQUEsT0FBQSxXQUlBLEtBQUEsV0FDQSxLQUFBLGlCQUNBLEtBQUEsT0FBQSxLQUFBLEtBQUEsWUFFQSxNQUFBLFNBQUEsR0FDQSxLQUFBLFVBQ0EsSUFDQSxHQUNBLE9BQUEsV0FHQSxLQUFBLFFBQUEsSUFFQSxLQUFBLE9BQUEsS0FBQSxLQUFBLFlBRUEsd0JBQUEsV0FBQSxHQUFBLEdBQUEsSUFBQSxRQUFBLEVBQUEsRUFBQSxTQUFBLEVBQUEsUUFBQSxLQUFBLFFBQUEsS0FBQSxHQUFBLEdBQUEsRUFBQSxDQUFBLE9BQUEsR0FBQSxRQUFBLEtBQUEsU0FBQSxHQUFBLE9BQUEsT0FBQSxFQUFBLEtBQUEsRUFBQSxNQUFBLElBQUEsR0FBQSxNQUNBLEdBQUEsWUFBQSxFQURBLEVBQUEsS0FBQSxFQUFBLEVBQUEsS0FBQSx5QkFJQSxhQUFBLEVBQUEsU0FBQSxhQUNBLFFBQUEsRUFBQSxTQUFBLFFBQ0EsYUFBQSxFQUFBLFNBQUEsYUFDQSxrQkFBQSxFQUFBLFNBQUEsa0JBQ0EsaUJBQUEsRUFBQSxTQUFBLGlCQUNBLGdCQUFBLEVBQUEsU0FBQSxnQkFDQSxjQUFBLEVBQUEsU0FB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LEVBQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxvQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxRQUFBLE9BQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxlQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEsU0FBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEsWUFBQSxJQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEsWUFBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEsU0FBQSxFQUFBLFFBQUEsUUFBQSxPQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsYUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxLQUFBLFFBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxhQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLEtBQUEsVUFBQSxhQUFBLGlCQUFBOzs7aUdDUUEsS0FBQSxpQkFDQSxPQUFBLFFBQUEsZUFBQSxlQUFBLGVBQ0EsS0FBQSxXQUNBLE9BQ0EsZUFBQSxFQUNBLFFBQUEsSUFDQSxlQUFBLElBQ0EsU0FBQSxNQUdBLFVBQ0EsY0FDQSxJQUFBLFdBQ0EsR0FBQSxHQUFBLEtBQUEsS0FPQSxPQUxBLFFBQUEsS0FBQSxRQUNBLEtBQUEsTUFBQSxRQUFBLEdBQ0EsRUFBQSxHQUdBLEtBQUEsY0FDQSxLQUFBLHFCQUFBLEdBQUEsSUFHQSxFQUFBLEVBQUEsV0FFQSxFQUFBLFdBQUEsRUFBQSxRQUFBLEtBQUEsTUFBQSxRQUFBLEdBR0EsTUFBQSxLQUNBLEVBQUEsR0FHQSxLQUFBLE1BQUEsUUFBQSxXQUFBLElBRUEsS0FBQSxxQkFBQSxHQUFBLEtBR0EsSUFBQSxTQUFBLEdBRUEsR0FBQSxHQUFBLEdBQUEsUUFBQSxhQUFBLEtBQ0EsRUFBQSxFQUFBLFFBQUEsRUFBQSxHQUlBLE1BQUEsTUFBQSxRQUFBLE1BSUEsU0FDQSxxQkFBQSxTQUFBLEVBQUEsR0FDQSxHQUFBLEdBQUEsRUFBQSxXQUVBLEVBQUEsR0FBQSxRQUFBLGFBQUEsSUFRQSxPQVBBLEdBQUEsRUFBQSxRQUFBLEVBQUEsSUFFQSxNQUFBLEtBQUEsVUFDQSxFQUFBLEVBQUEsUUFBQSxLQUFBLE1BSUEsR0FBQSxJQUFBLEVBR0EsR0FBQSxFQUFBLElBQUEsS0FBQSxTQUFBLElBRkEsS0FLQSxRQUFBLFdBQ0EsS0FBQSxRQUFBLEtBQUEsYUFBQSxLQUFBLFFBQ0EsS0FBQSxlQUFBLE1BQUEsS0FBQSxRQUFBLElBQUEsd0tBOUVBLGtCQUFBLE9BQUEsV0FBQSxHQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsZUFBQSxFQUFBLEVBQUEsTUFBQSxJQUFBLENBQUEsT0FBQSxHQUFBLFFBQUEsRUFBQSxZQUFBLEVBQUEsUUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsaUJBQUEsRUFBQSxTQUFBLGFBQUEsS0FBQSxRQUFBLFFBQUEsVUFBQSxNQUFBLEVBQUEsYUFBQSxXQUFBLGlCQUFBLE1BQUEsRUFBQSxXQUFBLE9BQUEsS0FBQSxRQUFBLFVBQUEsTUFBQSxFQUFBLGNBQUEsSUFBQSxLQUFBLFNBQUEsR0FBQSxFQUFBLGVBQUEsR0FBQSxNQUFBLFNBQUEsR0FBQSxFQUFBLGVBQUEsR0FBQSxRQUFBLFNBQUEsR0FBQSxJQUFBLEVBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxHQUFBLEVBQUEsUUFBQSxRQUFBLEdBQUEsRUFBQSxJQUFBLFNBQUEsTUFBQSxLQUFBLEdBQUEsa0JBQUEsTUFBQSxTQUFBLEdBQUEsRUFBQSxPQUFBLFlBQUEsRUFBQSxhQUFBLEVBQUEsT0FBQSxjQUFBLGlCQUFBOzs7a0lDeUNBLElBQUEsR0FBQSxRQUFBLGlDQUNBLEVBQUEsUUFBQSxnREFHQSxZQUNBLG1CQUFBLEVBQUEsUUFDQSxpQkFBQSxFQUFBLFNBRUEsS0FBQSxhQUNBLEtBQUEsV0FDQSxPQUNBLFNBQ0EsYUFDQSxVQUNBLEtBQUEsR0FDQSxPQUFBLHlCQUlBLE9BQ0EsU0FBQSxPQUNBLGNBQUEsT0FDQSxTQUFBLFNBQ0EsT0FBQSxNQUNBLEtBQUEsTUFDQSxVQUFBLFFBQ0EsV0FBQSxPQUNBLE9BQUEsT0FDQSxVQUNBLFNBQUEsRUFDQSxLQUFBLFVBR0EsVUFDQSxVQUFBLFdBQ0EsT0FBQSxLQUFBLGFBSUEsS0FBQSxNQUFBLFFBRUEsU0FBQSxXQUFBLEdBQUEsR0FBQSxLQUNBLEVBQUEsQ0FTQSxPQVJBLE1BQUEsTUFBQSxRQUFBLFNBQUEsR0FDQSxHQUFBLEdBQUEsRUFBQSxFQUFBLGdCQUFBLEVBQ0EsR0FBQSxFQUFBLEVBQUEsV0FBQSxHQUFBLENBQ0EsaUJBQUEsS0FDQSxHQUFBLEtBSUEsSUFHQSxTQUNBLGtCQUFBLFNBQUEsRUFBQSxHQUNBLEdBQUEsR0FBQSxLQUFBLFVBQUEsRUFFQSxPQUFBLElBQUEsRUFBQSxJQUFBLEVBQUEsR0FBQSxjQUVBLFFBQUEsV0FDQSxHQUFBLEtBQ0EsTUFBQSxPQUFBLFFBQUEsU0FBQSxHQUNBLEVBQUEsRUFBQSxNQUFBLE9BR0EsS0FBQSxNQUFBLEtBQUEsSUFFQSxXQUFBLFNBQUEsR0FDQSxLQUFBLE1BQUEsT0FBQSxFQUFBLEdBQ0Esa0JBQUEsTUFBQSxVQUNBLEtBQUEsU0FBQSxLQUFBLFFBR0EsT0FBQSxTQUFBLEdBQ0Esa0JBQUEsTUFBQSxVQUNBLEtBQUEsU0FBQSxLQUFBLFNBSUEsUUFBQSxXQUNBLEtBQUEsTUFBQSxLQUFBLFVBRUEsT0FDQSxLQUFBLFdBQ0EsS0FBQSxNQUFBLEtBQUEsVUFFQSxPQUFBLFdBQ0EsS0FBQSxVQUFBLEtBQUEsZ0xBaklBLGtCQUFBLE9BQUEsV0FBQSxHQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsZUFBQSxFQUFBLEVBQUEsTUFBQSxJQUFBLENBQUEsT0FBQSxHQUFBLE9BQUEsWUFBQSxpQkFBQSxFQUFBLFVBQUEsRUFBQSxTQUFBLFlBQUEsOEJBQUEsRUFBQSxTQUFBLEVBQUEsR0FBQSxFQUFBLE9BQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxNQUFBLElBQUEsRUFBQSxPQUFBLEVBQUEsR0FBQSxhQUFBLEVBQUEsR0FBQSxFQUFBLE9BQUEsZ0JBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxTQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsT0FBQSxFQUFBLE1BQUEsR0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxNQUFBLFNBQUEsRUFBQSxHQUFBLE1BQUEsR0FBQSxNQUFBLElBQUEsSUFBQSxFQUFBLEdBQUEsRUFBQSxPQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsTUFBQSxJQUFBLEVBQUEsS0FBQSxZQUFBLHFCQUFBLEVBQUEsR0FBQSxFQUFBLGtCQUFBLEVBQUEsRUFBQSxNQUFBLFNBQUEsRUFBQSxHQUFBLE1BQUEsR0FBQSxRQUFBLElBQUEsRUFBQSxZQUFBLHdCQUFBLEVBQUEsR0FBQSxlQUFBLEVBQUEsR0FBQSxJQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFNBQUEsRUFBQSxPQUFBLFdBQUEsRUFBQSxLQUFBLEVBQUEsa0JBQUEsT0FBQSxjQUFBLHNCQUFBLGVBQUEsS0FBQSxPQUFBLE1BQUEsRUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUEsRUFBQSxLQUFBLEVBQUEsRUFBQSxLQUFBLElBQUEsV0FBQSxzQkFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsYUFBQSxFQUFBLEtBQUEsRUFBQSxvQkFBQSxPQUFBLGNBQUEsc0JBQUEsZUFBQSxLQUFBLE9BQUEsTUFBQSxFQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQSxFQUFBLEtBQUEsRUFBQSxFQUFBLEtBQUEsSUFBQSxXQUFBLHNCQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxTQUFBLEVBQUEsS0FBQSxFQUFBLFNBQUEsYUFBQSxLQUFBLFFBQUEsUUFBQSxVQUFBLE1BQUEsRUFBQSxFQUFBLE1BQUEsV0FBQSxxQkFBQSxZQUFBLHNCQUFBLE9BQUEsWUFBQSxFQUFBLGFBQUEsVUFBQSxNQUFBLEVBQUEsRUFBQSxPQUFBLElBQUEsUUFBQSxTQUFBLEdBQUEsSUFBQSxFQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEsUUFBQSxHQUFBLEVBQUEsSUFBQSxTQUFBLE1BQUEsS0FBQSxHQUFBLGtCQUFBLE1BQUEsU0FBQSxHQUFBLEVBQUEsT0FBQSxXQUFBLEVBQUEsS0FBQSxFQUFBLEVBQUEsS0FBQSxFQUFBLE9BQUEsV0FBQSxFQUFBLE1BQUEsR0FBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxTQUFBLEVBQUEsS0FBQSxFQUFBLE9BQUEsV0FBQSxFQUFBLEtBQUEsRUFBQSxrQkFBQSxPQUFBLGdCQUFBLEVBQUEsY0FBQSxzQkFBQSxlQUFBLEtBQUEsT0FBQSxNQUFBLEVBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBLEVBQUEsS0FBQSxFQUFBLEVBQUEsS0FBQSxJQUFBLFdBQUEsc0JBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLGFBQUEsRUFBQSxLQUFBLEVBQUEsb0JBQUEsT0FBQSxnQkFBQSxFQUFBLGNBQUEsc0JBQUEsZUFBQSxLQUFBLE9BQUEsTUFBQSxFQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQSxFQUFBLEtBQUEsRUFBQSxFQUFBLEtBQUEsSUFBQSxXQUFBLHNCQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxTQUFBLEVBQUEsS0FBQSxFQUFBLFFBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLEVBQUEsVUFBQSxFQUFBLE1BQUEsSUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsU0FBQSxFQUFBLE1BQUEsWUFBQSxzRUFBQSxFQUFBLFVBQUEsWUFBQSw0Q0FBQSxJQUFBLE1BQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxXQUFBLE9BQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsZ0JBQUEsRUFBQSxNQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxTQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxPQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsTUFBQSxJQUFBLEVBQUEsT0FBQSxFQUFBLFdBQUEsRUFBQSxLQUFBLEVBQUEsT0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxVQUFBLE1BQUEsRUFBQSxvQkFBQSxPQUFBLGdCQUFBLEVBQUEsTUFBQSxFQUFBLFNBQUEsZUFBQSxRQUFBLEdBQUEsRUFBQSxPQUFBLEVBQUEsR0FBQSxXQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsU0FBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLE9BQUEsRUFBQSxNQUFBLEdBQUEsRUFBQSxNQUFBLEdBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsU0FBQSxFQUFBLFVBQUEsWUFBQSwwQ0FBQSxJQUFBLE1BQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxjQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxZQUFBLEVBQUEsSUFBQSxjQUFBLEVBQUEsUUFBQSxpQkFBQTs7O2lHQ21CQSxLQUFBLFFBQ0EsS0FBQSxXQUNBLE9BQ0EsZUFHQSxPQUFBLFdBQUEsWUFBQSxvQkFDQSxVQUNBLGFBQUEsV0FDQSxRQUFBLEtBQUEsZ0JBQUEsS0FBQSxnQkFBQSxLQUFBLFVBQUEsU0FHQSxTQUNBLFdBQUEsU0FBQSxHQUNBLEtBQUEsVUFBQSxPQUFBLEVBQUEsR0FDQSxLQUFBLFNBQUEsS0FBQSxZQUVBLGVBQUEsV0FDQSxLQUFBLE1BQUEsVUFBQSxTQUdBLFVBQUEsU0FBQSxHQUNBLEdBQUEsR0FBQSxzR0FDQSxTQUFBLEVBQUEsT0FBQSxNQUFBLElBRUEsYUFBQSxTQUFBLEdBR0EsSUFBQSxHQUhBLEdBQUEsS0FDQSxFQUFBLEVBQUEsT0FBQSxPQUFBLEVBQUEsYUFBQSxVQUVBLEVBQUEsRUFBQSxFQUFBLEVBQUEsT0FBQSxLQUhBLFNBQUEsR0FJQSxHQUFBLEdBQUEsRUFBQSxHQUNBLEVBQUEsR0FBQSxXQUVBLEdBQUEsaUJBQUEsT0FBQSxZQUNBLEVBQUEsY0FBQSxFQUFBLFVBQUEsRUFBQSxVQUNBLEVBQUEsVUFBQSxNQUNBLEtBQUEsRUFBQSxPQUNBLEtBQUEsRUFDQSxLQUFBLEVBQUEsS0FDQSxLQUFBLEVBQUEsS0FDQSxLQUFBLEVBQUEsT0FHQSxrQkFBQSxHQUFBLFVBQ0EsRUFBQSxTQUFBLEVBQUEsY0FHQSxHQUVBLEVBQUEsY0FBQSxJQXBCQSx3S0EvQ0Esa0JBQUEsT0FBQSxXQUFBLEdBQUEsR0FBQSxLQUFBLEVBQUEsRUFBQSxlQUFBLEVBQUEsRUFBQSxNQUFBLElBQUEsQ0FBQSxPQUFBLEdBQUEsT0FBQSxZQUFBLFdBQUEsRUFBQSxVQUFBLFlBQUEsZ0NBQUEsT0FBQSxTQUFBLEVBQUEsY0FBQSxJQUFBLE1BQUEsRUFBQSxrQkFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxnQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFNBQUEsSUFBQSxZQUFBLFlBQUEscUJBQUEsT0FBQSxTQUFBLEVBQUEsYUFBQSxLQUFBLE9BQUEsV0FBQSxFQUFBLFVBQUEsSUFBQSxPQUFBLEVBQUEsZ0JBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLE9BQUEsRUFBQSxPQUFBLFlBQUEsa0JBQUEsRUFBQSxNQUFBLFlBQUEsd0JBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsa0JBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxTQUFBLFlBQUEsU0FBQSxFQUFBLEdBQUEsRUFBQSxVQUFBLFNBQUEsRUFBQSxHQUFBLE1BQUEsR0FBQSxNQUFBLElBQUEsSUFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLFNBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxNQUFBLFlBQUEsNkJBQUEsRUFBQSxVQUFBLFlBQUEsdUNBQUEsSUFBQSxNQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsV0FBQSxPQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLHdCQUFBLEtBQUEsRUFBQSxRQUFBLGlCQUFBOzs7NEVDOERBLFFBQUEsS0FDQSxHQUFBLEdBQUEsV0FDQSxPQUFBLE9BQUEsRUFBQSxLQUFBLFVBQUEsR0FBQSxTQUFBLElBQUEsVUFBQSxHQUdBLE9BQUEsS0FBQSxJQUFBLElBQUEsSUFBQSxJQUFBLElBQUEsSUFBQSxJQUFBLElBQUEsSUFBQSxJQUFBLDBEQVZBLElBQUEsR0FBQSxRQUFBLGdDQUNBLEVBQUEsUUFBQSx1QkFDQSxFQUFBLFFBQUEsMkJBQ0EsRUFBQSxRQUFBLDhDQVVBLFlBQ0Esa0JBQUEsRUFBQSxRQUNBLFdBQUEsRUFBQSxRQUNBLFNBQUEsRUFBQSxRQUNBLGVBQUEsRUFBQSxTQUVBLE9BQUEsYUFBQSxXQUFBLGFBQUEsWUFBQSxXQUNBLEtBQUEsV0FDQSxPQUNBLFlBQUEsSUFDQSxXQUFBLEtBR0EsU0FDQSxLQUFBLFNBQUEsR0FDQSxNQUFBLFVBQUEsRUFBQSxZQUVBLGVBQUEsV0FDQSxLQUFBLFNBQUEsS0FBQSxVQUFBLE1BQUEsS0FBQSxVQUFBLE1BQ0EsS0FBQSxXQUFBLEtBQUEsVUFBQSxNQUVBLGtCQUFBLE1BQUEsVUFDQSxLQUFBLFNBQUEsS0FBQSxXQUdBLFlBQUEsV0FDQSxrQkFBQSxNQUFBLFFBQ0EsS0FBQSxPQUFBLEtBQUEsWUFHQSxjQUFBLFNBQUEsR0FDQSxLQUFBLFVBQUEsTUFBQSxFQUNBLEtBQUEsbUJBR0EsVUFDQSxTQUFBLFdBQ0EsTUFBQSxNQUFBLE9BQUEsTUFBQSxVQUVBLGNBQUEsV0FDQSxHQUFBLEdBQUEsS0FBQSxXQUFBLEtBQUEsVUFBQSxLQUVBLE9BQUEsSUFBQSxFQUFBLGNBRUEsV0FBQSxXQUNBLEdBQUEsR0FBQSxLQUFBLFdBQUEsS0FBQSxVQUFBLEtBRUEsT0FBQSxJQUFBLEVBQUEsT0FBQSxNQUVBLG1CQUFBLFdBQ0EsTUFBQSxhQUFBLEtBQUEsVUFBQSxNQUFBLEtBQUEsWUFBQSxJQUVBLG1CQUFBLFdBRUEsSUFBQSxHQUFBLEdBQUEsRUFBQSxFQUFBLEtBQUEsVUFBQSxRQUFBLE9BQUEsSUFDQSxHQUFBLEtBQUEsWUFBQSxLQUFBLFVBQUEsUUFBQSxHQUFBLE1BQ0EsTUFBQSxNQUFBLFVBQUEsUUFBQSxHQUFBLElBR0EsT0FBQSxLQUdBLFFBQUEsV0FDQSxLQUFBLGtCQUVBLE9BRUEsVUFBQSxXQUNBLEtBQUEsc0xBMUlBLGtCQUFBLE9BQUEsV0FBQSxHQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsZUFBQSxFQUFBLEVBQUEsTUFBQSxJQUFBLENBQUEsT0FBQSxHQUFBLE9BQUEsWUFBQSxpQkFBQSxXQUFBLEVBQUEsVUFBQSxNQUFBLFlBQUEsRUFBQSxVQUFBLE1BQUEsU0FBQSxFQUFBLFVBQUEsS0FBQSxFQUFBLFNBQUEsWUFBQSxzQkFBQSxPQUFBLElBQUEsRUFBQSxlQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxVQUFBLFVBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLFFBQUEsRUFBQSxVQUFBLEtBQUEsRUFBQSxTQUFBLFlBQUEsd0JBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLFVBQUEsVUFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLEtBQUEsRUFBQSxPQUFBLFVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxLQUFBLEVBQUEsVUFBQSxVQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLGNBQUEsT0FBQSxFQUFBLEtBQUEsWUFBQSx3QkFBQSxFQUFBLEdBQUEsRUFBQSxjQUFBLFNBQUEsRUFBQSxHQUFBLE1BQUEsR0FBQSxRQUFBLElBQUEsSUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLElBQUEsRUFBQSxVQUFBLEdBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLFNBQUEsRUFBQSxVQUFBLEtBQUEsRUFBQSxTQUFBLGFBQUEsS0FBQSxRQUFBLFFBQUEsVUFBQSxNQUFBLEVBQUEsVUFBQSxNQUFBLFdBQUEsb0JBQUEsWUFBQSxxQkFBQSxPQUFBLEdBQUEsRUFBQSxZQUFBLEtBQUEsT0FBQSxZQUFBLEVBQUEsVUFBQSxhQUFBLFVBQUEsTUFBQSxFQUFBLFVBQUEsT0FBQSxJQUFBLEtBQUEsRUFBQSxZQUFBLE9BQUEsU0FBQSxHQUFBLEVBQUEsT0FBQSxXQUFBLEVBQUEsS0FBQSxFQUFBLFVBQUEsUUFBQSxFQUFBLE9BQUEsUUFBQSxFQUFBLGdCQUFBLFFBQUEsU0FBQSxHQUFBLElBQUEsRUFBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEdBQUEsRUFBQSxRQUFBLFFBQUEsR0FBQSxFQUFBLElBQUEsU0FBQSxNQUFBLEtBQUEsR0FBQSxxQkFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsYUFBQSxFQUFBLFVBQUEsS0FBQSxFQUFBLFlBQUEsYUFBQSxLQUFBLFFBQUEsUUFBQSxVQUFBLE1BQUEsRUFBQSxVQUFBLE1BQUEsV0FBQSxvQkFBQSxZQUFBLHFCQUFBLE9BQUEsR0FBQSxFQUFBLFlBQUEsWUFBQSxFQUFBLFVBQUEsYUFBQSxVQUFBLE1BQUEsRUFBQSxVQUFBLE9BQUEsSUFBQSxPQUFBLFNBQUEsR0FBQSxFQUFBLE9BQUEsV0FBQSxFQUFBLEtBQUEsRUFBQSxVQUFBLFFBQUEsRUFBQSxPQUFBLFFBQUEsRUFBQSxtQkFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsU0FBQSxFQUFBLFVBQUEsS0FBQSxFQUFBLGNBQUEsWUFBQSxxQkFBQSxPQUFBLFNBQUEsRUFBQSxTQUFBLE9BQUEsYUFBQSxnQkFBQSxFQUFBLEdBQUEsRUFBQSxhQUFBLElBQUEsTUFBQSxFQUFBLGdCQUFBLE9BQUEsTUFBQSxFQUFBLFVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQSxFQUFBLEtBQUEsRUFBQSxVQUFBLFFBQUEsSUFBQSxXQUFBLHFCQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxVQUFBLEVBQUEsVUFBQSxLQUFBLEVBQUEsU0FBQSxhQUFBLEtBQUEsUUFBQSxRQUFBLFVBQUEsTUFBQSxFQUFBLFVBQUEsTUFBQSxXQUFBLG9CQUFBLFlBQUEsc0JBQUEsT0FBQSxHQUFBLEVBQUEsWUFBQSxLQUFBLFNBQUEsVUFBQSxNQUFBLEVBQUEsVUFBQSxPQUFBLElBQUEsT0FBQSxTQUFBLEdBQUEsRUFBQSxPQUFBLFdBQUEsRUFBQSxLQUFBLEVBQUEsVUFBQSxRQUFBLEVBQUEsT0FBQSxRQUFBLEVBQUEsbUJBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLHNCQUFBLEVBQUEsVUFBQSxLQUFBLEVBQUEsbUJBQUEsT0FBQSxTQUFBLEVBQUEsY0FBQSxFQUFBLFNBQUEsYUFBQSxLQUFBLFFBQUEsUUFBQSxVQUFBLE1BQUEsRUFBQSxVQUFBLE1BQUEsV0FBQSxvQkFBQSxZQUFBLHlEQUFBLE9BQUEsYUFBQSxlQUFBLEdBQUEsRUFBQSxZQUFBLEtBQUEsWUFBQSxVQUFBLE1BQUEsRUFBQSxVQUFBLE9BQUEsSUFBQSxPQUFBLFNBQUEsR0FBQSxFQUFBLE9BQUEsV0FBQSxFQUFBLEtBQUEsRUFBQSxVQUFBLFFBQUEsRUFBQSxPQUFBLFFBQUEsRUFBQSxxQkFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsYUFBQSxFQUFBLFVBQUEsS0FBQSxFQUFBLFNBQUEsYUFBQSxLQUFBLFFBQUEsUUFBQSxVQUFBLE1BQUEsRUFBQSxVQUFBLE1BQUEsV0FBQSxvQkFBQSxZQUFBLHlCQUFBLE9BQUEsYUFBQSxlQUFBLEdBQUEsRUFBQSxZQUFBLEtBQUEsWUFBQSxVQUFBLE1BQUEsRUFBQSxVQUFBLE9BQUEsSUFBQSxPQUFBLFNBQUEsR0FBQSxFQUFBLE9BQUEsV0FBQSxFQUFBLEtBQUEsRUFBQSxVQUFBLFFBQUEsRUFBQSxPQUFBLFFBQUEsRUFBQSxtQkFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsV0FBQSxFQUFBLFVBQUEsS0FBQSxFQUFBLFNBQUEsYUFBQSxLQUFBLFFBQUEsUUFBQSxVQUFBLE1BQUEsRUFBQSxVQUFBLE1BQUEsV0FBQSxvQkFBQSxPQUFBLEtBQUEsVUFBQSxVQUFBLE1BQUEsRUFBQSxVQUFBLE9BQUEsSUFBQSxNQUFBLFNBQUEsR0FBQSxFQUFBLE9BQUEsV0FBQSxFQUFBLEtBQUEsRUFBQSxVQUFBLFFBQUEsRUFBQSxPQUFBLFdBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLFVBQUEsRUFBQSxVQUFBLEtBQUEsRUFBQSxPQUFBLFlBQUEsb0VBQUEsRUFBQSxPQUFBLFlBQUEsc0RBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxRQUFBLFlBQUEsa0RBQUEsT0FBQSxHQUFBLEVBQUEsZUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsdUJBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLGFBQUEsS0FBQSxRQUFBLFFBQUEsVUFBQSxNQUFBLEVBQUEsVUFBQSxNQUFBLFdBQUEsb0JBQUEsWUFBQSxnSUFBQSxPQUFBLEdBQUEsRUFBQSxhQUFBLElBQUEsUUFBQSxTQUFBLEdBQUEsR0FBQSxHQUFBLE1BQUEsVUFBQSxPQUFBLEtBQUEsRUFBQSxPQUFBLFFBQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxXQUFBLElBQUEsU0FBQSxHQUFBLE1BQUEsVUFBQSxHQUFBLEVBQUEsT0FBQSxFQUFBLE9BQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxRQUFBLEVBQUEsT0FBQSxTQUFBLEVBQUEsRUFBQSxLQUFBLEVBQUEsbUJBQUEsRUFBQSxVQUFBLE9BQUEsU0FBQSxHQUFBLE1BQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxpQ0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxVQUFBLFFBQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxVQUFBLElBQUEsRUFBQSxLQUFBLE9BQUEsU0FBQSxxQkFBQSxLQUFBLEVBQUEsTUFBQSxVQUFBLE1BQUEsRUFBQSxTQUFBLEVBQUEsR0FBQSxhQUFBLEVBQUEsR0FBQSxFQUFBLE1BQUEsaUJBQUEsS0FBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsV0FBQSxFQUFBLFVBQUEsS0FBQSxFQUFBLE9BQUEsWUFBQSw0QkFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLFVBQUEsY0FBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsUUFBQSxFQUFBLFVBQUEsS0FBQSxFQUFBLE9BQUEsWUFBQSx3QkFBQSxFQUFBLFNBQUEsWUFBQSxvQkFBQSxFQUFBLFNBQUEsYUFBQSxLQUFBLFFBQUEsUUFBQSxVQUFBLE1BQUEsRUFBQSxVQUFBLE1BQUEsV0FBQSxvQkFBQSxPQUFBLEtBQUEsUUFBQSxHQUFBLEVBQUEsWUFBQSxLQUFBLEVBQUEsWUFBQSxNQUFBLEtBQUEsVUFBQSxRQUFBLEVBQUEsR0FBQSxFQUFBLFVBQUEsTUFBQSxNQUFBLElBQUEsUUFBQSxTQUFBLEdBQUEsTUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLFFBQUEsTUFBQSxFQUFBLG1CQUFBLEVBQUEsR0FBQSxJQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsb0JBQUEsT0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFNBQUEsWUFBQSxvQkFBQSxFQUFBLFNBQUEsYUFBQSxLQUFBLFFBQUEsUUFBQSxVQUFBLE1BQUEsRUFBQSxVQUFBLE1BQUEsV0FBQSxvQkFBQSxPQUFBLEtBQUEsUUFBQSxHQUFBLEVBQUEsWUFBQSxLQUFBLEVBQUEsWUFBQSxNQUFBLEtBQUEsVUFBQSxRQUFBLEVBQUEsR0FBQSxFQUFBLFVBQUEsTUFBQSxNQUFBLElBQUEsUUFBQSxTQUFBLEdBQUEsTUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLFFBQUEsTUFBQSxFQUFBLG1CQUFBLEVBQUEsR0FBQSxJQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsbUJBQUEsU0FBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsZUFBQSxFQUFBLFVBQUEsS0FBQSxFQUFBLGdCQUFBLE9BQUEsYUFBQSxFQUFBLFVBQUEsVUFBQSxZQUFBLEVBQUEsVUFBQSxTQUFBLGlCQUFBLEVBQUEsVUFBQSxjQUFBLE9BQUEsRUFBQSxVQUFBLE9BQUEsS0FBQSxFQUFBLFVBQUEsTUFBQSxPQUFBLEVBQUEsV0FBQSxlQUFBLEVBQUEsVUFBQSxjQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxTQUFBLEVBQUEsVUFBQSxLQUFBLEVBQUEsVUFBQSxPQUFBLG1CQUFBLEVBQUEsVUFBQSxlQUFBLFdBQUEsRUFBQSxVQUFBLFNBQUEsWUFBQSxFQUFBLGlCQUFBLEVBQUEsTUFBQSxJQUFBLGlCQUFBOzs7K0VDVUEsSUFBQSxHQUFBLFFBQUEsOEZBR0EsWUFDQSxlQUFBLEVBQUEsU0FFQSxPQUFBLFNBQUEsWUFBQSxjQUFBLFlBQUEsV0FDQSxTQUVBLGdCQUFBLGlMQW5CQSxrQkFBQSxPQUFBLFdBQUEsR0FBQSxHQUFBLEtBQUEsRUFBQSxFQUFBLGVBQUEsRUFBQSxFQUFBLE1BQUEsSUFBQSxDQUFBLE9BQUEsR0FBQSxRQUFBLFlBQUEsU0FBQSxPQUFBLE9BQUEsR0FBQSxPQUFBLFFBQUEsSUFBQSxPQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsaUJBQUEsRUFBQSxnQkFBQSxPQUFBLEVBQUEsR0FBQSxFQUFBLE9BQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxnQkFBQSxJQUFBLEVBQUEsS0FBQSxPQUFBLGFBQUEsRUFBQSxZQUFBLEVBQUEsU0FBQSxjQUFBLEVBQUEsV0FBQSxZQUFBLEVBQUEsU0FBQSxVQUFBLEVBQUEsWUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsV0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFdBQUEsMEJBQUEsRUFBQSxLQUFBLFlBQUEsOEJBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsbURBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLE9BQUEsS0FBQSxFQUFBLFlBQUEsT0FBQSxJQUFBLEVBQUEsV0FBQSxXQUFBLEVBQUEsS0FBQSxZQUFBLDhCQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGdDQUFBLEVBQUEsTUFBQSxJQUFBLGlCQUFBOzs7aUdDYUEsT0FBQSxTQUNBLFNBQ0EsTUFBQSxXQUNBLEtBQUEsTUFBQSw4S0FoQkEsa0JBQUEsT0FBQSxXQUFBLEdBQUEsR0FBQSxLQUFBLEVBQUEsRUFBQSxlQUFBLEVBQUEsRUFBQSxNQUFBLElBQUEsQ0FBQSxPQUFBLEdBQUEsT0FBQSxZQUFBLG9DQUFBLEVBQUEsT0FBQSxZQUFBLGlCQUFBLEVBQUEsTUFBQSxFQUFBLE1BQUEsWUFBQSx1Q0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsVUFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLFlBQUEseUJBQUEsT0FBQSxLQUFBLFVBQUEsSUFBQSxNQUFBLEVBQUEsU0FBQSxFQUFBLEdBQUEsU0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE9BQUEsWUFBQSw2QkFBQSxFQUFBLEdBQUEsWUFBQSxHQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsT0FBQSxZQUFBLDZCQUFBLEVBQUEsR0FBQSxZQUFBLE1BQUEsaUJBQUE7OztpR0NTQSxLQUFBLGlCQUNBLE9BQUEsUUFBQSxjQUFBLGVBQUEsZ0JBQ0EsS0FBQSxXQUNBLE9BQ0EsZUFBQSxFQUNBLFFBQUEsTUFHQSxVQUNBLGNBQ0EsSUFBQSxXQUNBLEdBQUEsR0FBQSxLQUFBLEtBT0EsT0FMQSxRQUFBLEtBQUEsUUFDQSxLQUFBLE1BQUEsUUFBQSxHQUNBLEVBQUEsR0FHQSxLQUFBLGNBQ0EsS0FBQSxxQkFBQSxHQUFBLElBR0EsRUFBQSxFQUFBLFdBRUEsRUFBQSxXQUFBLEVBQUEsUUFBQSxLQUFBLE1BQUEsUUFBQSxHQUdBLE1BQUEsS0FDQSxFQUFBLEdBR0EsS0FBQSxNQUFBLFFBQUEsV0FBQSxJQUVBLEtBQUEscUJBQUEsR0FBQSxLQUdBLElBQUEsU0FBQSxHQUVBLEdBQUEsR0FBQSxHQUFBLFFBQUEsYUFBQSxLQUNBLEVBQUEsRUFBQSxRQUFBLEVBQUEsR0FJQSxNQUFBLE1BQUEsUUFBQSxNQUlBLFNBQ0EscUJBQUEsU0FBQSxHQUNBLEdBQUEsR0FBQSxFQUFBLFdBRUEsRUFBQSxHQUFBLFFBQUEsYUFBQSxJQU9BLE9BTkEsR0FBQSxFQUFBLFFBQUEsRUFBQSxJQUVBLE1BQUEsS0FBQSxVQUNBLEVBQUEsRUFBQSxRQUFBLEtBQUEsTUFHQSxJQUdBLFFBQUEsV0FDQSxLQUFBLFFBQUEsS0FBQSxhQUFBLEtBQUEsNEtBdkVBLGtCQUFBLE9BQUEsV0FBQSxHQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsZUFBQSxFQUFBLEVBQUEsTUFBQSxJQUFBLENBQUEsT0FBQSxHQUFBLFFBQUEsRUFBQSxZQUFBLEVBQUEsUUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsaUJBQUEsRUFBQSxTQUFBLGFBQUEsS0FBQSxRQUFBLFFBQUEsVUFBQSxNQUFBLEVBQUEsYUFBQSxXQUFBLGlCQUFBLE1BQUEsRUFBQSxXQUFBLE9BQUEsS0FBQSxRQUFBLFVBQUEsTUFBQSxFQUFBLGNBQUEsSUFBQSxLQUFBLFNBQUEsR0FBQSxFQUFBLGVBQUEsR0FBQSxNQUFBLFNBQUEsR0FBQSxFQUFBLGVBQUEsR0FBQSxRQUFBLFNBQUEsR0FBQSxJQUFBLEVBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxHQUFBLEVBQUEsUUFBQSxRQUFBLEdBQUEsRUFBQSxJQUFBLFNBQUEsTUFBQSxLQUFBLEdBQUEsa0JBQUEsTUFBQSxTQUFBLEdBQUEsRUFBQSxPQUFBLFlBQUEsRUFBQSxhQUFBLEVBQUEsT0FBQSxjQUFBLGlCQUFBOzs7aUdDZ0JBLEtBQUEsZ0JBQ0EsT0FBQSxZQUNBLFVBRUEsY0FBQSxXQVVBLElBQUEsR0FQQSxHQUFBLEtBQUEsU0FFQSxFQUFBLEVBR0EsS0FFQSxFQUFBLEVBQUEsRUFBQSxFQUFBLE9BQUEsSUFDQSxFQUFBLEVBQUEsS0FBQSxFQUFBLEVBQUEsS0FBQSxHQUFBLEVBQ0EsR0FBQSxFQUFBLEVBQUEsRUFBQSxHQUlBLElBQUEsSUFDQSxPQUFBLEtBQUEsS0FBQSxHQUNBLE1BQUEsUUFBQSxLQUFBLEdBQ0EsTUFBQSxRQUFBLEtBQUEsR0FDQSxTQUFBLEtBQUEsS0FBQSxJQUdBLEVBQUEsQ0FDQSxLQUFBLEdBQUEsS0FBQSxHQUNBLElBQUEsSUFBQSxFQUFBLEdBQUEsRUFBQSxDQVNBLE9BUEEsSUFBQSxJQUFBLEVBQUEsR0FHQSxFQUFBLFFBN0JBLElBOEJBLEdBQUEsRUFBQSxPQTlCQSxHQWlDQSxHQUVBLGNBQUEsV0FDQSxHQUFBLEdBQUEsS0FBQSxhQUVBLE9BQUEsR0FBQSxHQUNBLFlBR0EsRUFBQSxHQUNBLFVBR0EsR0FBQSxHQUNBLFVBR0EsRUFBQSxFQUNBLGNBREEsd0tBdkVBLGtCQUFBLE9BQUEsV0FBQSxHQUFBLEdB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Q0EsWUFBQSxFQUNBLFVBQ0EsS0FBQSxLQUFBLElBQUEsUUFDQSxTQUFBLEtBQUEsSUFBQSxZQUNBLFFBQUEsS0FBQSxJQUFBLFlBRkEsT0FLQSxNQUFBLEtBQUEsSUFBQSxtQkFDQSxNQUFBLEtBQUEsSUFBQSxXQUNBLFVBQUEsS0FBQSxJQUFBLHdCQUlBLFlBQUEsV0FFQSxHQUFBLFlBQ0EsTUFBQSxPQUFBLFFBQUEsZUFBQSxRQUFBLFNBQUEsR0FDQSxFQUFBLE1BQ0EsS0FBQSxFQUFBLEtBQ0EsR0FBQSxFQUFBLEdBQ0EsU0FBQSxFQUFBLE1BQUEsRUFBQSxNQUFBLElBQUEsU0FBQSxHQUNBLE1BQUEsR0FBQSxTQUFBLEtBQUEsRUFBQSxlQUFBLFFBQUEsTUFBQSxFQUFBLFFBQUEsRUFBQSxRQUFBLEtBQUEsVUFNQSxhQUFBLFdBRUEsR0FBQSxHQUFBLEtBQ0EsRUFBQSxLQUFBLE9BQUEsTUFBQSxVQUFBLFdBQ0EsRUFBQSxLQUFBLGtCQUdBLEdBQUEsR0FBQSxHQUFBLFFBQUEsRUFBQSxpQ0FHQSxJQUFBLEdBQUEsR0FBQSxFQUFBLEVBQUEsRUFBQSxjQUFBLE9BQUEsRUFBQSxFQUFBLElBQUEsQ0FDQSxHQUFBLEdBQUEsRUFBQSxjQUFBLG1CQUdBLE9BQUEsRUFHQSxPQUFBLElBR0EsTUFBQSxJQUVBLGNBQUEsV0FDQSxNQUFBLE1BQUEsV0FyREEsU0F5REEsV0FBQSxXQUNBLEtBQUEsTUFBQSxnQkFBQSxTQURBLFFBQUEsV0FLQSxLQUFBLE9BQUEsU0FBQSx3REFHQSxTQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEsdUNBQ0EsWUFBQSxLQUFBLElBQUEsNkNBQ0EsZUFBQSx3S0EvR0Esa0JBQUEsT0FBQSxXQUFBLEdBQUEsR0FBQSxLQUFBLEVBQUEsRUFBQSxlQUFBLEVBQUEsRUFBQSxNQUFBLElBQUEsQ0FBQSxPQUFBLEdBQUEsdUJBQUEsRUFBQSxPQUFBLGFBQUEsTUFBQSxRQUFBLGdCQUFBLFVBQUEsRUFBQSxRQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsS0FBQSxJQUFBLGVBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxPQUFBLFlBQUEsb0RBQUEsYUFBQSxNQUFBLE9BQUEsU0FBQSxjQUFBLEVBQUEsUUFBQSxZQUFBLG9EQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxrQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsYUFBQSxLQUFBLFFBQUEsUUFBQSxVQUFBLE1BQUEsRUFBQSxTQUFBLFdBQUEsYUFBQSxZQUFBLDJGQUFBLElBQUEsUUFBQSxTQUFBLEdBQUEsR0FBQSxHQUFBLE1BQUEsVUFBQSxPQUFBLEtBQUEsRUFBQSxPQUFBLFFBQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxXQUFBLElBQUEsU0FBQSxHQUFBLE1BQUEsVUFBQSxHQUFBLEVBQUEsT0FBQSxFQUFBLE9BQUEsR0FBQSxTQUFBLEVBQUEsT0FBQSxTQUFBLEVBQUEsRUFBQSxJQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsTUFBQSxNQUFBLFNBQUEsRUFBQSxPQUFBLFlBQUEsRUFBQSxVQUFBLE9BQUEsS0FBQSxHQUFBLE1BQUEsUUFBQSxFQUFBLEdBQUEsUUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsT0FBQSxLQUFBLEdBQUEsTUFBQSxRQUFBLEVBQUEsR0FBQSxjQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsa0JBQUEsSUFBQSxRQUFBLE9BQUEsUUFBQSxFQUFBLFFBQUEsS0FBQSxFQUFBLGFBQUEsUUFBQSxFQUFBLFNBQUEsWUFBQSxFQUFBLEtBQUEsSUFBQSxPQUFBLEdBQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxlQUFBLE9BQUEsSUFBQSxLQUFBLFVBQUEsUUFBQSxHQUFBLEVBQUEsSUFBQSxRQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLFlBQUEsSUFBQSxXQUFBLEdBQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxTQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsU0FBQSxTQUFBLEVBQUEsR0FBQSxNQUFBLEdBQUEsT0FBQSxJQUFBLElBQUEsRUFBQSxHQUFBLGFBQUEsRUFBQSxHQUFBLEdBQUEsZ0JBQUEsU0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsWUFBQSxpQkFBQSxJQUFBLE1BQUEsRUFBQSxjQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGtCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsaUJBQUEsSUFBQSxrQkFBQSxPQUFBLGFBQUEsVUFBQSxJQUFBLGlCQUFBOzs7a0lDOENBLElBQUEsR0FBQSxRQUFBLDhCQUNBLEVBQUEsUUFBQSw0Q0FHQSxZQUNBLGdCQUFBLEVBQUEsUUFDQSxhQUFBLEVBQUEsU0FFQSxLQUFBLFdBQ0EsT0FDQSxXQUFBLEdBQ0EsZUFBQSxZQUFBLFdBQUEsV0FBQSxRQUFBLFFBQ0EsUUFBQSxNQUNBLFNBQUEsT0FBQSxXQUFBLFFBQUEsT0FBQSxXQUNBLFVBQUEsT0FBQSxXQUFBLFFBQUEsUUFDQSxZQUFBLE9BQUEsV0FBQSxRQUFBLFFBQ0EsZ0JBQ0EsY0FBQSxFQUNBLFVBQUEsS0FDQSxTQUFBLE9BSUEsVUFDQSxRQUFBLFdBQ0EsT0FDQSxZQUFBLEVBQ0EsVUFDQSxLQUFBLEtBQUEsSUFBQSxRQUNBLFNBQUEsS0FBQSxJQUFBLFNBQ0EsTUFBQSxLQUFBLElBQUEsU0FDQSxLQUFBLEtBQUEsSUFBQSxTQUVBLE9BQ0EsTUFBQSxLQUFBLElBQUEsbUJBQ0EsTUFBQSxLQUFBLElBQUEsV0FDQSxVQUFBLEtBQUEsSUFBQSx3QkFJQSxRQUFBLFdBQ0EsSUFBQSxHQUFBLEdBQUEsRUFBQSxFQUFBLEtBQUEsT0FBQSxNQUFBLFVBQUEsT0FBQSxFQUFBLEVBQUEsSUFDQSxHQUFBLEtBQUEsT0FBQSxNQUFBLFVBQUEsR0FBQSxLQUFBLEtBQUEsVUFDQSxNQUFBLE1BQUEsT0FBQSxNQUFBLFVBQUEsRUFHQSxRQUNBLGFBR0EsZUFBQSxXQUVBLE1BQUEsTUFBQSxZQUFBLFNBQUEsT0FBQSxPQUFBLG9CQUFBLEtBQUEsT0FBQSxNQUFBLEtBQUEsT0FFQSxXQUFBLFdBRUEsTUFBQSxZQUFBLEtBQUEsUUFBQSxNQUdBLEtBQUEsWUFBQSxTQUFBLE9BQUEsT0FBQSx5QkFBQSxLQUFBLE9BQUEsTUFBQSxLQUFBLE9BSUEsaUJBQUEsV0FHQSxNQUFBLE1BQUEsWUFBQSxLQUFBLE9BQUEsTUFBQSxLQUFBLFFBQUEsT0FLQSxLQUFBLFlBQUEsU0FBQSxPQUFBLE9BQUEsc0JBQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxPQUFBLEtBQUEsYUFBQSxTQU1BLGFBQUEsV0FDQSxPQUFBLEtBQUEsUUFBQSxNQUNBLElBQUEsV0FDQSxNQUFBLE1BQUEsWUFBQSxTQUFBLE9BQUEsT0FBQSxtQ0FBQSxLQUFBLE9BQUEsTUFBQSxLQUFBLEtBRUEsS0FBQSxXQUNBLE1BQUEsTUFBQSxZQUFBLFNBQUEsT0FBQSxPQUFBLG1DQUFBLEtBQUEsT0FBQSxNQUFBLEtBQUEsTUFJQSxPQUFBLEdBRUEsYUFBQSxXQUFBLEdBQUEsR0FBQSxJQUNBLE9BQUEsTUFBQSxPQUFBLE1BQUEsTUFBQSxPQUFBLFNBQUEsR0FDQSxNQUFBLEdBQUEsVUFBQSxFQUFBLFFBQUEsTUFHQSxhQUFBLFdBQ0EsT0FDQSxVQUFBLEtBQUEsUUFBQSxHQUNBLFlBQUEsS0FBQSxRQUFBLFNBQUEsS0FBQSxRQUFBLFFBQUEsYUFBQSxLQUdBLGFBQUEsV0FBQSxHQUFBLEdBQUEsS0FDQSxFQUFBLEtBQ0EsRUFBQSxLQUFBLE9BQUEsTUFBQSxVQUFBLFdBQ0EsRUFBQSxLQUFBLFlBWUEsSUFSQSxFQUFBLElBQUEsU0FBQSxHQUNBLEdBQUEsR0FBQSxFQUFBLEtBQUEsUUFBQSxtQkFBQSxJQUFBLFFBQUEsb0JBQUEsU0FBQSxHQUNBLE1BQUEsR0FBQSxHQUFBLGdCQUFBLFFBQUEsVUFBQSxHQUdBLE9BREEsR0FBQSxlQUFBLElBQUEsRUFBQSxFQUFBLElBQUEsY0FBQSxHQUFBLEdBQ0EsSUFHQSxFQUFBLENBQ0EsR0FBQSxHQUFBLEdBQUEsUUFBQSxFQUFBLElBRUEsT0FBQSxHQUFBLE9BQUEsU0FBQSxHQUNBLElBQUEsR0FBQSxHQUFBLEVBQUEsRUFBQSxFQUFBLGNBQUEsT0FBQSxFQUFBLEVBQUEsSUFBQSxDQUNBLEdBQUEsR0FBQSxFQUFBLGNBQUEsRUFFQSxJQUFBLEVBQUEsS0FBQSxFQUFBLElBQ0EsT0FBQSxFQUdBLE9BQUEsSUFHQSxNQUFBLElBRUEsY0FBQSxXQUNBLE1BQUEsTUFBQSxXQUdBLFNBQ0EsY0FBQSxTQUFBLEdBRUEsTUFBQSxHQUFBLEtBQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxLQUFBLElBRUEsY0FBQSxXQUFBLEdBQUEsR0FBQSxLQUNBLEVBQUEsS0FBQSxJQUFBLHNCQUFBLFFBQUEsYUFBQSxLQUFBLFFBQUEsS0FFQSxJQUFBLFFBQUEsR0FDQSxNQUFBLE1BQUEsS0FBQSxjQUFBLEtBQUEsUUFBQSxJQUFBLEtBQUEsU0FBQSxHQUNBLE1BQUEsRUFBQSxPQUNBLEVBQUEsT0FBQSxPQUFBLGdCQUFBLEVBQUEsUUFBQSxJQUNBLEVBQUEsUUFBQSxTQUFBLEtBQUEsYUFLQSxZQUFBLFdBQ0EsS0FBQSxNQUFBLGFBQUEsUUFFQSxTQUFBLFNBQUEsR0FDQSxLQUFBLGFBQUEsRUFDQSxLQUFBLE1BQUEsY0FBQSxRQUVBLFFBQUEsV0FDQSxLQUFBLE1BQUEsYUFBQSxRQUVBLFdBQUEsU0FBQSxHQUFBLEdBQUEsR0FBQSxLQUNBLEVBQUEsS0FBQSxJQUFBLHNCQUFBLFFBQUEsYUFBQSxFQUFBLFNBQUEsS0FBQSxFQUFBLFVBRUEsSUFBQSxRQUFBLEdBQ0EsTUFBQSxNQUFBLEtBQUEsV0FBQSxFQUFBLElBQUEsS0FBQSxTQUFBLEdBQ0EsTUFBQSxFQUFBLE1BQ0EsRUFBQSxPQUFBLE9BQUEsYUFBQSxFQUFBLE9BS0EsYUFBQSxTQUFBLEdBQ0EsTUFBQSxVQUFBLEdBRUEsV0FBQSxTQUFBLEdBQ0EsTUFBQSxPQUFBLElBR0EsUUFBQSxXQUdBLEtBQUEsVUFBQSxLQUFBLE9BQUEsT0FBQSxJQUFBLEtBQUEsT0FBQSxNQUFBLEtBQUEsUUFBQSxHQUVBLEtBQUEsT0FBQSxPQUFBLEtBQ0EsS0FBQSxjQUFBLEdBR0EsS0FBQSxPQUFBLFNBQUEsYUFBQSxLQUFBLFdBQ0EsS0FBQSxPQUFBLFNBQUEsa0JBQUEsS0FBQSxXQUVBLEtBQUEsT0FBQSxPQUFBLGdCQUNBLFNBQUEsR0FDQSxNQUFBLEdBQ0EsWUFBQSxHQUNBLGVBQUEsd0tBbFBBLGtCQUFBLE9BQUEsV0FBQSxHQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsZUFBQSxFQUFBLEVBQUEsTUFBQSxJQUFBLENBQUEsT0FBQSxHQUFBLHNCQUFBLEVBQUEsT0FBQSxPQUFBLEtBQUEsaUJBQUEsS0FBQSxrQkFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsUUFBQSxTQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsT0FBQSxPQUFBLEtBQUEsV0FBQSxLQUFBLFlBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxRQUFBLFVBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxTQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEsWUFBQSxJQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEsYUFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLFNBQUEsRUFBQSxHQUFBLEVBQUEsUUFBQSxRQUFBLFNBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxXQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsZUFBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEsYUFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLFdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxtQkFBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEsaUJBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxXQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsbUJBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxRQUFBLGdCQUFBLFdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxtQkFBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEsZ0JBQUEsWUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLGVBQUEsRUFBQSxVQUFBLFlBQUEsaUJBQUEsSUFBQSxNQUFBLEVBQUEsZUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxtQkFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxpQkFBQSxFQUFBLFVBQUEsWUFBQSxpQkFBQSxJQUFBLE1BQUEsRUFBQSxpQkFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxxQkFBQSxFQUFBLE9BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxPQUFBLGFBQUEsTUFBQSxRQUFBLGdCQUFBLFVBQUEsRUFBQSxRQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsS0FBQSxJQUFBLGVBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxPQUFBLFlBQUEsb0RBQUEsYUFBQSxNQUFBLE9BQUEsU0FBQSxjQUFBLEVBQUEsUUFBQSxZQUFBLG9EQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxrQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsYUFBQSxLQUFBLFFBQUEsUUFBQSxVQUFBLE1BQUEsRUFBQSxTQUFBLFdBQUEsYUFBQSxZQUFBLDJGQUFBLElBQUEsUUFBQSxTQUFBLEdBQUEsR0FBQSxHQUFBLE1BQUEsVUFBQSxPQUFBLEtBQUEsRUFBQSxPQUFBLFFBQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxXQUFBLElBQUEsU0FBQSxHQUFBLE1BQUEsVUFBQSxHQUFBLEVBQUEsT0FBQSxFQUFBLE9BQUEsR0FBQSxTQUFBLEVBQUEsT0FBQSxTQUFBLEVBQUEsRUFBQSxJQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsTUFBQSxNQUFBLFNBQUEsRUFBQSxPQUFBLFlBQUEsRUFBQSxVQUFBLE9BQUEsS0FBQSxHQUFBLE1BQUEsUUFBQSxFQUFBLEdBQUEsUUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsT0FBQSxLQUFBLEdBQUEsTUFBQSxRQUFBLEVBQUEsR0FBQSxjQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsa0JBQUEsSUFBQSxRQUFBLE9BQUEsUUFBQSxFQUFBLFFBQUEsS0FBQSxFQUFBLGFBQUEsUUFBQSxFQUFBLFNBQUEsWUFBQSxFQUFBLEtBQUEsSUFBQSxPQUFBLEdBQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLFVBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGlCQUFBLElBQUEsV0FBQSxHQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsS0FBQSxPQUFBLEtBQUEsRUFBQSxhQUFBLEVBQUEsSUFBQSxhQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGdCQUFBLElBQUEsUUFBQSxHQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsS0FBQSxPQUFBLEtBQUEsRUFBQSxXQUFBLEVBQUEsSUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGFBQUEsSUFBQSxPQUFBLEdBQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxXQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLHNCQUFBLElBQUEsVUFBQSxHQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsYUFBQSxFQUFBLFVBQUEsRUFBQSxVQUFBLFlBQUEsTUFBQSxJQUFBLE1BQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxTQUFBLEVBQUEsU0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxnQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLGNBQUEsRUFBQSxLQUFBLEVBQUEsVUFBQSxZQUFBLE1BQUEsSUFBQSxNQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsV0FBQSxFQUFBLFNBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsa0JBQUEsRUFBQSxPQUFBLEVBQUEsUUFBQSxNQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxXQUFBLEVBQUEsVUFBQSxZQUFBLGlCQUFBLElBQUEsTUFBQSxFQUFBLFdBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsZUFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxpQkFBQSxJQUFBLGVBQUEsT0FBQSxhQUFBLE9BQUEsYUFBQSxFQUFBLFdBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxjQUFBLElBQUEsZUFBQSxPQUFBLGFBQUEsTUFBQSxhQUFBLEVBQUEsZ0JBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxjQUFBLElBQUEsZ0JBQUEsT0FBQSxhQUFBLE9BQUEsYUFBQSxFQUFBLGlCQUFBLElBQUEsaUJBQUE7OztrSUNnREEsSUFBQSxHQUFBLFFBQUEsc0NBQ0EsRUFBQSxRQUFBLDZCQUNBLEVBQUEsUUFBQSxrREFHQSxLQUFBLGdCQUNBLFlBQ0Esd0JBQUEsRUFBQSxRQUNBLG1CQUFBLEVBQUEsUUFDQSxlQUFBLEVBQUEsU0FFQSxLQUFBLFdBQ0EsT0FDQSxZQUFBLE9BR0EsVUFDQSxTQUFBLFdBQ0EsTUFBQSxNQUFBLFdBQUEsS0FBQSxVQUFBLFdBRUEsZ0JBQUEsV0FDQSxNQUFBLE1BQUEsV0FBQSxLQUFBLFVBQUEsa0JBRUEsaUJBQUEsV0FDQSxNQUFBLE1BQUEsV0FBQSxLQUFBLFVBQUEsZUFFQSxnQkFBQSxXQUNBLE1BQUEsTUFBQSxXQUFBLEtBQUEsVUFBQSxjQUVBLHNCQUFBLFdBQ0EsTUFBQSxNQUFBLFdBQUEsS0FBQSxVQUFBLGtCQUVBLGNBQUEsV0FDQSxNQUFBLE1BQUEsV0FBQSxLQUFBLFVBQUEsWUFFQSxvQkFBQSxXQUNBLE1BQUEsTUFBQSxXQUFBLEtBQUEsVUFBQSxnQkFFQSxVQUFBLFdBQUEsR0FBQSxHQUFBLElBQ0EsT0FBQSxNQUFBLE9BQUEsTUFBQSxXQUFBLE9BQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxPQUFBLEVBQUEsY0FBQSxJQUVBLGdCQUFBLFdBQ0EsT0FDQSxTQUFBLFFBQ0EsY0FBQSxTQUNBLFdBQUEsRUFDQSxTQUNBLFNBQ0EsTUFBQSxLQUFBLElBQUEsNkJBQ0EsWUFBQSxLQUFBLElBQUEsNkJBQ0EsS0FBQSxPQUNBLEtBQUEsU0FFQSxNQUFBLEtBQUEsSUFBQSwyQkFDQSxZQUFBLEtBQUEsSUFBQSwyQkFDQSxLQUFBLE9BQ0EsS0FBQSxPQUVBLE1BQUEsS0FBQSxJQUFBLDhCQUNBLFlBQUEsS0FBQSxJQUFBLDhCQUNBLEtBQUEsV0FDQSxLQUFBLFVBRUEsTUFBQSxLQUFBLElBQUEsK0JBQ0EsWUFBQSxLQUFBLElBQUEsK0JBQ0EsS0FBQSxTQUNBLEtBQUEsYUFJQSxhQUFBLFdBQ0EsT0FDQSxTQUFBLFFBQ0EsY0FBQSxRQUNBLFdBQUEsRUFDQSxTQUNBLFNBRUEsTUFBQSxLQUFBLElBQUEsMkJBQ0EsWUFBQSxLQUFBLElBQUEsMkJBQ0EsS0FBQSxTQUNBLEtBQUEsVUFHQSxNQUFBLEtBQUEsSUFBQSwyQkFDQSxZQUFBLEtBQUEsSUFBQSwyQkFDQSxLQUFBLFdBQ0EsS0FBQSxZQUlBLFlBQUEsV0FBQSxHQUFBLEdBQUEsS0FDQSxFQUFBLENBR0EsTUFBQSxPQUFBLE1BQUEsV0FBQSxPQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsT0FBQSxFQUFBLGNBQUEsRUFVQSxPQVBBLE1BQUEsVUFBQSxZQUFBLFFBQUEsU0FBQSxHQUNBLEdBQUEsRUFBQSxPQUFBLEVBQUEsUUFHQSxLQUFBLFVBQUEsU0FBQSxRQUFBLFNBQUEsR0FDQSxHQUFBLEVBQUEsTUFBQSxFQUFBLFFBRUEsSUFHQSxTQUNBLE1BQUEsU0FBQSxHQUNBLEVBQUEsaUJBQ0EsT0FBQSxTQUVBLFdBQUEsU0FBQSxHQUNBLEdBQUEsR0FBQSxFQWVBLE9BWkEsR0FBQSxRQUFBLE1BQUEsSUFHQSxNQUFBLFFBRUEsUUFBQSxTQUFBLEdBQ0EsR0FBQSxNQUVBLEdBQUEsRUFBQSxRQUFBLE1BQUEsUUFDQSxHQUFBLFNBR0EsR0FFQSxXQUFBLFNBQUEsR0FDQSxHQUFBLEdBQUEsR0FBQSxNQUFBLEVBQUEsTUFDQSxFQUFBLEVBQUEsY0FFQSxFQUFBLEVBQUEsV0FBQSxDQUNBLEdBQUEsRUFBQSxXQUNBLEVBQUEsR0FBQSxFQUFBLE9BQUEsSUFBQSxFQUFBLENBRUEsSUFBQSxHQUFBLEVBQUEsU0FJQSxPQUhBLEdBQUEsRUFBQSxXQUNBLEVBQUEsR0FBQSxFQUFBLE9BQUEsSUFBQSxFQUFBLEVBRUEsRUFBQSxJQUFBLEVBQUEsSUFBQSxJQUdBLFFBQUEsV0FFQSxLQUFBLFlBQUEsS0FBQSxPQUFBLE9BQUEsR0FFQSxLQUFBLE9BQUEsU0FBQSxlQUFBLEtBQUEsWUFFQSxJQUFBLEdBQUEsU0FBQSx1QkFBQSxlQUNBLEdBQUEsU0FDQSxFQUFBLEVBQUEsR0FDQSxFQUFBLFVBQUEsSUFBQSxxTEExTUEsa0JBQUEsT0FBQSxXQUFBLEdBQUEsR0FBQSxLQUFBLEVBQUEsRUFBQSxlQUFBLEVBQUEsRUFBQSxNQUFBLElBQUEsQ0FBQSxPQUFBLEdBQUEsVUFBQSxFQUFBLHVCQUFBLEVBQUEsTUFBQSxZQUFBLGlCQUFBLEVBQUEsR0FBQSxTQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsZUFBQSxVQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxXQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEsVUFBQSxPQUFBLFNBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxLQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxtQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxVQUFBLFNBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLFlBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLG9DQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEsVUFBQSxnQkFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxLQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxvQkFBQSxFQUFBLEdBQUEsTUFBQSxFQUFBLGVBQUEsT0FBQSxJQUFBLEtBQUEsbUJBQUEsUUFBQSxhQUFBLEVBQUEsVUFBQSxrQkFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsVUFBQSxpQkFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLDZCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLFVBQUEsZ0JBQUEsR0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsb0JBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxLQUFBLFVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxxQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsS0FBQSxFQUFBLHlCQUFBLE9BQUEsWUFBQSxFQUFBLFVBQUEsS0FBQSxlQUFBLEVBQUEsVUFBQSxXQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSwrQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsc0NBQUEsT0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE9BQUEsVUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLG9CQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSwwQ0FBQSxPQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsT0FBQSxVQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsMEJBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLG9DQUFBLE9BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxPQUFBLFVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxrQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsd0NBQUEsT0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE9BQUEsVUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLHdCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxzQ0FBQSxPQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxnQkFBQSxFQUFBLE9BQUEsVUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLG9CQUFBLEVBQUEsZ0JBQUEsT0FBQSxhQUFBLEVBQUEsYUFBQSxFQUFBLGdCQUFBLFVBQUEsWUFBQSxFQUFBLGdCQUFBLFNBQUEsaUJBQUEsRUFBQSxnQkFBQSxjQUFBLE9BQUEsRUFBQSxnQkFBQSxPQUFBLEtBQUEsRUFBQSxVQUFBLFlBQUEsZ0JBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsK0JBQUEsT0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsU0FBQSxFQUFBLE9BQUEsVUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLGFBQUEsRUFBQSxnQkFBQSxPQUFBLGFBQUEsRUFBQSxhQUFBLEVBQUEsYUFBQSxVQUFBLFlBQUEsRUFBQSxhQUFBLFNBQUEsaUJBQUEsRUFBQSxhQUFBLGNBQUEsT0FBQSxFQUFBLGFBQUEsT0FBQSxLQUFBLEVBQUEsVUFBQSxTQUFBLGdCQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxZQUFBLEVBQUEsT0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxlQUFBLE1BQUEsRUFBQSxvQkFBQSxPQUFBLGdCQUFBLEVBQUEsTUFBQSxFQUFBLFlBQUEsZUFBQSxRQUFBLEdBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxVQUFBLE9BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLE1BQUEsT0FBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEVBQUEsVUFBQSxNQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsT0FBQSxJQUFBLEVBQUEsTUFBQSxFQUFBLEtBQUEsT0FBQSxLQUFBLEVBQUEsSUFBQSxPQUFBLFlBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLGFBQUEsR0FBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsZUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEtBQUEsWUFBQSxpQkFBQSxFQUFBLE1BQUEsRUFBQSxLQUFBLE9BQUEsS0FBQSxLQUFBLElBQUEsTUFBQSxFQUFBLFNBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsd0JBQUEsR0FBQSxFQUFBLE1BQUEsaUJBQUE7OztrSUNZQSxJQUFBLEdBQUEsUUFBQSx1QkFDQSxFQUFBLFFBQUEsaURBR0EsS0FBQSxpQkFDQSxZQUNBLGtCQUFBLEVBQUEsUUFDQSxTQUFBLEVBQUEsU0FFQSxLQUFBLFdBQ0EsT0FDQSxZQUNBLGNBQ0EsV0FBQSxHQUNBLGVBQUEsT0FBQSxlQUFBLFlBQUEsU0FBQSxRQUNBLFNBQUEsT0FBQSxlQUFBLFlBQUEsU0FBQSxRQUNBLFVBQUEsT0FBQSxlQUFBLFlBQUEsU0FBQSxRQUNBLFlBQUEsT0FBQSxlQUFBLFlBQUEsU0FBQSxVQUdBLFVBQ0EsV0FBQSxXQUNBLFFBQ0EsS0FBQSxRQUNBLFVBQUEsRUFDQSxTQUNBLEtBQUEsVUFHQSxRQUFBLFdBQ0EsT0FDQSxZQUFBLEVBQ0EsVUFDQSxLQUFBLEtBQUEsSUFBQSxlQUNBLGFBQUEsS0FBQSxJQUFBLGdCQUNBLFVBQUEsS0FBQSxJQUFBLHNCQUNBLE9BQUEsS0FBQSxJQUFBLFVBQ0EsS0FBQSxLQUFBLElBQUEsbUJBS0EsV0FBQSxXQUNBLE1BQUEsTUFBQSxPQUFBLE1BQUEsV0FBQSxJQUFBLFNBQUEsR0FDQSxPQUNBLEtBQUEsRUFBQSxLQUNBLGFBQUEsRUFBQSxhQUNBLFNBQUEsRUFBQSxTQUNBLE9BQUEsRUFBQSxRQUFBLEVBQUEsT0FBQSxLQUNBLFVBQUEsRUFBQSxXQUFBLEVBQUEsVUFBQSxVQUNBLEtBQUEsRUFBQSxTQUtBLGFBQUEsV0FDQSxHQUFBLEdBQUEsS0FDQSxFQUFBLEtBQUEsT0FBQSxNQUFBLFVBQUEsV0FDQSxFQUFBLEtBQUEsVUFFQSxJQUFBLEVBQUEsQ0FDQSxHQUFBLEdBQUEsR0FBQSxRQUFBLEVBQUEsSUFFQSxPQUFBLEdBQUEsT0FBQSxTQUFBLEdBQ0EsSUFBQSxHQUFBLEdBQUEsRUFBQSxFQUFBLEVBQUEsY0FBQSxPQUFBLEVBQUEsRUFBQSxJQUFBLENBQ0EsR0FBQSxHQUFBLEVBQUEsY0FBQSxFQUVBLElBQUEsRUFBQSxLQUFBLEVBQUEsSUFDQSxPQUFBLEVBR0EsT0FBQSxJQUdBLE1BQUEsS0FHQSxTQUNBLGFBQUEsV0FDQSxLQUFBLE1BQUEsa0JBQUEsU0FHQSxRQUFBLFdBQ0EsS0FBQSxPQUFBLFNBQUEsaUJBRUEsS0FBQSxPQUFBLE9BQUEsZ0JBQ0EsU0FBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLHdDQUNBLFlBQUEsR0FDQSxlQUFBLHdLQXRHQSxrQkFBQSxPQUFBLFdBQUEsR0FBQSxHQUFBLEtBQUEsRUFBQSxFQUFBLGVBQUEsRUFBQSxFQUFBLE1BQUEsSUFBQSxDQUFBLE9BQUEsR0FBQSx1QkFBQSxFQUFBLE9BQUEsWUFBQSxnQkFBQSxFQUFBLFVBQUEsWUFBQSxpQkFBQSxJQUFBLE1BQUEsRUFBQSxnQkFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxzQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLGtCQUFBLE9BQUEsUUFBQSxFQUFBLFFBQUEsS0FBQSxFQUFBLGFBQUEsUUFBQSxFQUFBLFNBQUEsWUFBQSxFQUFBLEtBQUEsSUFBQSxPQUFBLEdBQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxlQUFBLE9BQUEsSUFBQSxLQUFBLFlBQUEsUUFBQSxHQUFBLEVBQUEsSUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLFlBQUEsSUFBQSxlQUFBLEdBQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxlQUFBLE9BQUEsSUFBQSxLQUFBLG1CQUFBLFFBQUEsYUFBQSxFQUFBLElBQUEsa0JBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsdUJBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxtQkFBQSxJQUFBLG9CQUFBLE9BQUEsYUFBQSxVQUFBLElBQUEsaUJBQUE7OztnUEMrSEEsRUFBQSxRQUFBLHdDQUdBLFlBQ0EsU0FBQSxFQUFBLFNBRUEsS0FBQSxzQkFDQSxLQUFBLFdBQ0EsT0FDQSxhQUFBLEdBQ0EsZUFBQSxHQUNBLGVBQUEsT0FBQSxlQUFBLFlBQUEsU0FBQSxnQkFDQSxTQUFBLE9BQUEsZUFBQSxZQUFBLFNBQUEsZ0JBQ0EsVUFBQSxPQUFBLGVBQUEsWUFBQSxTQUFBLGdCQUNBLFlBQUEsT0FBQSxlQUFBLFlBQUEsU0FBQSxnQkFDQSxTQUFBLEtBQ0EsWUFDQSxjQUNBLGlCQUFBLEVBQ0EsMkJBQUEsRUFDQSxpQkFBQSxFQUNBLGNBQUEsRUFDQSxpQkFBQSxFQUNBLHNCQUFBLEdBQ0EsaUJBQUEsRUFDQSxtQkFBQSxFQUNBLGNBQUEsRUFDQSxxQkFBQSxFQUNBLFdBQUEsRUFDQSxjQUFBLElBR0EsVUFDQSxPQUFBLFdBQ0EsTUFBQSxNQUFBLE9BQUEsUUFBQSx3QkFFQSxLQUFBLEtBQ0EsTUFBQSxLQUFBLE9BQUEsTUFBQSxLQUFBLEtBQUEsR0FDQSxNQUFBLEtBQ0EsS0FBQSxXQUVBLEtBQUEsaUJBQ0EsTUFBQSxLQUFBLFFBQUEsZUFDQSxNQUFBLEtBQUEsSUFBQSxXQUNBLFFBQUEsS0FBQSxPQUFBLFFBQUEsc0JBQ0EsS0FBQSxXQUVBLEtBQUEsZUFDQSxNQUFBLEtBQUEsYUFDQSxNQUFBLEtBQUEsSUFBQSxnQkFDQSxLQUFBLGFBS0EsS0FBQSxLQUNBLE1BQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxXQUNBLEtBQUEsU0FFQSxLQUFBLGVBQ0EsTUFBQSxLQUFBLGFBQ0EsTUFBQSxLQUFBLElBQUEsZ0JBQ0EsS0FBQSxZQUdBLHVCQUFBLFdBQ0EsR0FBQSxHQUFBLEtBQ0EsRUFBQSxLQUFBLE9BQUEsTUFBQSxVQUFBLFdBQ0EsRUFBQSxLQUFBLFVBRUEsSUFBQSxFQUFBLENBQ0EsR0FBQSxHQUFBLEdBQUEsUUFBQSxFQUFBLElBRUEsT0FBQSxHQUFBLE9BQUEsU0FBQSxHQUNBLElBQUEsR0FBQSxHQUFBLEVBQUEsRUFBQSxFQUFBLGNBQUEsT0FBQSxFQUFBLEVBQUEsSUFBQSxDQUNBLEdBQUEsR0FBQSxFQUFBLGNBQUEsRUFFQSxJQUFBLEVBQUEsS0FBQSxFQUFBLElBQ0EsT0FBQSxFQUdBLE9BQUEsSUFHQSxNQUFBLElBRUEsUUFBQSxXQUNBLE9BQ0EsWUFBQSxFQUNBLFVBQ0EsS0FBQSxLQUFBLElBQUEsZUFDQSxhQUFBLEtBQUEsSUFBQSxnQkFDQSxVQUFBLEtBQUEsSUFBQSxhQUNBLE9BQUEsS0FBQSxJQUFBLFVBQ0EsYUFBQSxLQUFBLElBQUEsc0NBRUEsT0FDQSxNQUFBLEtBQUEsSUFBQSxtQkFDQSxNQUFBLEtBQUEsSUFBQSxXQUNBLFVBQUEsS0FBQSxJQUFBLHdCQUlBLGtCQUFBLFdBQ0EsT0FDQSxZQUFBLEVBQ0EsVUFDQSxLQUFBLEtBQUEsSUFBQSxlQUNBLGFBQUEsS0FBQSxJQUFBLGdCQUNBLFVBQUEsS0FBQSxJQUFBLHNCQUNBLE9BQUEsS0FBQSxJQUFBLFVBQ0EsYUFBQSxLQUFBLElBQUEsMEJBRUEsT0FDQSxNQUFBLEtBQUEsSUFBQSxtQkFDQSxNQUFBLEtBQUEsSUFBQSxXQUNBLFVBQUEsS0FBQSxJQUFBLHdCQUlBLFdBQUEsV0FBQSxHQUFBLEdBQUEsSUFDQSxPQUFBLE1BQUEsT0FBQSxNQUFBLFdBQUEsT0FBQSxTQUFBLEdBQUEsTUFBQSxHQUFBLGVBQUEsRUFBQSxlQUFBLElBQUEsU0FBQSxHQUNBLE9BQ0EsS0FBQSxFQUFBLEtBQ0EsYUFBQSxFQUFBLGFBQ0EsU0FBQSxFQUFBLFNBQ0EsT0FBQSxFQUFBLFFBQUEsRUFBQSxPQUFBLEtBQ0EsVUFBQSxFQUFBLFdBQUEsRUFBQSxVQUFBLFVBQ0EsYUFBQSxFQUFBLGlCQUlBLFFBQUEsV0FDQSxJQUFBLEdBQUEsR0FBQSxFQUFBLEVBQUEsS0FBQSxPQUFBLE1BQUEsaUJBQUEsT0FBQSxFQUFBLEVBQUEsSUFDQSxHQUFBLEtBQUEsT0FBQSxNQUFBLGlCQUFBLEdBQUEsZUFBQSxLQUFBLGFBUUEsTUFQQSxNQUFBLE9BQUEsT0FBQSxnQkFDQSxTQUFBLEdBQ0EsTUFBQSxLQUFBLE9BQUEsTUFBQSxpQkFBQSxHQUFBLGlCQUNBLFlBQUEsR0FDQSxlQUFBLElBRUEsS0FBQSxzQkFBQSxLQUFBLE9BQUEsTUFBQSxpQkFBQSxHQUFBLHNCQUNBLEtBQUEsT0FBQSxNQUFBLGlCQUFBLEVBS0EsUUFDQSxXQUNBLGtCQUdBLGVBQUEsV0FDQSxJQUFBLEdBQUEsR0FBQSxFQUFBLEVBQUEsS0FBQSxPQUFBLE1BQUEsdUJBQUEsT0FBQSxFQUFBLEVBQUEsSUFDQSxHQUFBLEtBQUEsT0FBQSxNQUFBLHVCQUFBLEdBQUEsZUFBQSxLQUFBLGFBQ0EsTUFBQSxNQUFBLE9BQUEsTUFBQSx1QkFBQSxFQUtBLFlBSUEsU0FDQSxPQUFBLFdBQUEsR0FBQSxHQUFBLElBQUEsUUFBQSxFQUFBLEVBQUEsU0FBQSxFQUFBLFFBQUEsS0FBQSxRQUFBLEtBQUEsTUFBQSxHQUFBLFFBQUEsS0FBQSxTQUFBLEdBQUEsT0FBQSxPQUFBLEVBQUEsS0FBQSxFQUFBLE1BQUEsSUFBQSxHQUFBLE1BQ0EsR0FBQSxjQUFBLEVBREEsRUFBQSxPQUFBLFNBQUEsRUFBQSxLQUFBLDJCQUFBLEVBQUEsU0FBQSxhQUFBLEVBQUEsVUFBQSxLQUFBLFNBQUEsR0FHQSxFQUFBLGNBQUEsRUFHQSxNQUFBLEVBQUEsT0FDQSxFQUFBLFdBQUEsRUFBQSxPQUFBLFFBSUEsTUFBQSxFQUFBLE9BQ0EsRUFBQSxxQkFBQSxFQUNBLEVBQUEsT0FBQSxTQUFBLHFCQUFBLEVBQUEsY0FDQSxFQUFBLFdBQUEsS0FkQSxLQUFBLEdBQUEsSUFBQSxNQUFBLE1BQUEsR0FBQSxTQUFBLEVBQUEsU0FxQkEsZUFBQSxXQUNBLEtBQUEsaUJBQUEsRUFDQSxLQUFBLFVBQUEsV0FDQSxHQUFBLEdBQUEsU0FBQSxlQUFBLFdBQ0EsR0FBQSxRQUNBLEVBQUEsTUFBQSxPQUFBLEVBQUEsYUFBQSxRQUlBLFlBQUEsU0FBQSxHQUNBLEtBQUEsY0FBQSxFQUNBLEtBQUEsaUJBQUEsRUFDQSxLQUFBLHNCQUFBLEVBQUEsT0FBQSxLQUNBLElBQUEsR0FBQSxFQUFBLE1BQ0EsR0FBQSxNQUFBLE9BQUEsT0FDQSxFQUFBLE1BQUEsT0FBQSxFQUFBLGFBQUEsTUFHQSxLQUFBLFdBQUEsR0FBQSxHQUFBLElBQUEsUUFBQSxFQUFBLEVBQUEsU0FBQSxFQUFBLFFBQUEsS0FBQSxRQUFBLEtBQUEsR0FBQSxFQUFBLE9BQUEsR0FBQSxRQUFBLEtBQUEsU0FBQSxHQUFBLE9BQUEsT0FBQSxFQUFBLEtBQUEsRUFBQSxNQUFBLElBQUEsR0FBQSxNQUNBLEdBQUEsY0FBQSxFQUVBLEdBQ0Esc0JBQUEsRUFBQSx1QkFKQSxFQUFBLE9BQUEsU0FBQSxFQUFBLEtBQUEsK0JBQUEsRUFBQSxhQUFBLEdBQUEsS0FBQSxTQUFBLEdBVUEsTUFBQSxFQUFBLE1BQUEsTUFBQSxFQUFBLE9BQ0EsUUFBQSxNQUFBLEVBQUEsT0FBQSxRQUNBLEVBQUEsbUJBQUEsR0FHQSxNQUFBLEVBQUEsT0FDQSxFQUFBLG1CQUFBLEVBQ0EsRUFBQSxPQUFBLFNBQUEscUJBQUEsRUFBQSxlQUdBLEVBQUEsaUJBQUEsRUFFQSxXQUFBLFdBQ0EsRUFBQSxpQkFBQSxFQUNBLEVBQUEsaUJBQUEsRUFBQSxrQkFDQSxFQUFBLGVBQUEsRUFBQSxtQkFDQSxPQTFCQSxLQUFBLEdBQUEsSUFBQSxNQUFBLE1BQUEsR0FBQSxTQUFBLEVBQUEsVUFnQ0EsUUFBQSxXQUtBLEtBQUEsa0JBQUEsS0FBQSxZQUFBLFNBQUEsT0FBQSxPQUFBLG9CQUFBLEtBQUEsT0FBQSxNQUFBLEtBQUEsTUFLQSxLQUFBLDRCQUFBLEtBQUEsWUFBQSxTQUFBLE9BQUEsT0FBQSxrQkFBQSxLQUFBLE9BQUEsTUFBQSxLQUFBLE1BUUEsS0FBQSxhQUFBLEtBQUEsT0FBQSxPQUFBLGFBQ0EsS0FBQSxxQkFBQSxFQUNBLEtBQUEsT0FBQSxTQUFBLHFCQUFBLEtBQUEsY0FFQSxLQUFBLE9BQUEsU0FBQSxxQkFDQSxLQUFBLE9BQUEsU0FBQSxpQkFDQSxhQUFBLEtBQUEsYUFDQSx1QkFBQSxJQUVBLEtBQUEsT0FBQSxPQUFBLGdCQUNBLFNBQUEsR0FDQSxNQUFBLEdBQ0EsWUFBQSxHQUNBLGVBQUEsd0tBM1lBLGtCQUFBLE9BQUEsV0FBQSxHQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsZUFBQSxFQUFBLEVBQUEsTUFBQSxJQUFBLENBQUEsT0FBQSxHQUFBLHVCQUFBLEVBQUEsUUFBQSxhQUFBLEVBQUEsT0FBQSxPQUFBLElBQUEsRUFBQSxRQUFBLGdCQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEscURBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxPQUFBLFlBQUEsUUFBQSxFQUFBLE9BQUEsWUFBQSx1QkFBQSxFQUFBLFNBQUEsWUFBQSxVQUFBLEVBQUEsTUFBQSxFQUFBLE1BQUEsWUFBQSxxQkFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxpQkFBQSxPQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsUUFBQSxtQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFFBQUEsVUFBQSxFQUFBLFFBQUEsU0FBQSxVQUFBLEVBQUEsTUFBQSxFQUFBLE1BQUEsWUFBQSxxQkFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxxQkFBQSxPQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsUUFBQSxTQUFBLGdCQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFFBQUEsY0FBQSxFQUFBLFFBQUEsYUFBQSxVQUFBLEVBQUEsTUFBQSxFQUFBLE1BQUEsWUFBQSxxQkFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxzQ0FBQSxPQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsUUFBQSxhQUFBLGdCQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFFBQUEsV0FBQSxFQUFBLFFBQUEsVUFBQSxVQUFBLEVBQUEsTUFBQSxFQUFBLE1BQUEsWUFBQSxxQkFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxxQkFBQSxPQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsUUFBQSxVQUFBLGdCQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFFBQUEsbUJBQUEsRUFBQSxRQUFBLGtCQUFBLFVBQUEsRUFBQSxNQUFBLEVBQUEsTUFBQSxZQUFBLHFCQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLHNCQUFBLE9BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxRQUFBLGtCQUFBLGdCQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE1BQUEsRUFBQSxNQUFBLFlBQUEscUJBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsWUFBQSxPQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsUUFBQSxxQkFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEseUJBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxRQUFBLGtCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLE1BQUEsWUFBQSxxQkFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxZQUFBLE9BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxRQUFBLFFBQUEsV0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE1BQUEsRUFBQSxNQUFBLFlBQUEsd0JBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsMEJBQUEsT0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE1BQUEsRUFBQSxPQUFBLFlBQUEsbUNBQUEsRUFBQSxnQkFBQSxFQUFBLE9BQUEsWUFBQSxpQ0FBQSxFQUFBLFlBQUEsWUFBQSwwQ0FBQSxPQUFBLEdBQUEsWUFBQSxVQUFBLE1BQUEsRUFBQSx1QkFBQSxJQUFBLE1BQUEsRUFBQSxlQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsT0FBQSxZQUFBLFdBQUEsRUFBQSxVQUFBLFlBQUEsMkJBQUEsTUFBQSxFQUFBLGdCQUFBLFVBQUEsWUFBQSxPQUFBLFNBQUEsRUFBQSxjQUFBLElBQUEsTUFBQSxFQUFBLFFB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T0FBQSxNQUFBLGlCQUFBLFFBQUEsU0FBQSxHQUNBLE9BQUEsRUFBQSxVQUNBLElBQUEsRUFBQSxRQUFBLEVBQUEsUUFBQSxlQUVBLEVBQUEsTUFDQSxNQUFBLEVBQUEsUUFBQSxZQUNBLEtBQUEsRUFBQSxRQUFBLE9BR0EsRUFBQSxLQUFBLEVBQUEsUUFBQSxnQkFNQSxFQUFBLEtBQUEsU0FBQSxFQUFBLEdBQUEsTUFBQSxHQUFBLEtBQUEsRUFBQSxLQUFBLEdBQUEsSUFDQSxHQUVBLG1CQUFBLFdBQ0EsR0FBQSxNQUNBLElBdUJBLE9BckJBLEdBQUEsTUFDQSxNQUFBLEdBQ0EsS0FBQSxPQUdBLEtBQUEsT0FBQSxNQUFBLGlCQUFBLFFBQUEsU0FBQSxJQUVBLElBQUEsRUFBQSxRQUFBLEVBQUEscUJBQUEsT0FBQSxFQUFBLHVCQUVBLE9BQUEsRUFBQSxvQkFDQSxFQUFBLE1BQ0EsTUFBQSxFQUFBLG1CQUNBLEtBQUEsRUFBQSx1QkFJQSxFQUFBLEtBQUEsRUFBQSx1QkFJQSxFQUFBLEtBQUEsU0FBQSxFQUFBLEdBQUEsTUFBQSxHQUFBLEtBQUEsRUFBQSxLQUFBLEdBQUEsSUFDQSxHQUVBLFlBQUEsV0FDQSxHQUFBLEtBZUEsT0FiQSxNQUFBLE9BQUEsTUFBQSxpQkFBQSxRQUFBLFNBQUEsR0FDQSxHQUFBLEdBQUEsS0FBQSxPQUFBLEVBQUEsRUFBQSxTQUFBLEdBRUEsR0FBQSxZQUFBLE9BQUEsRUFBQSxRQUFBLEdBQUEsRUFBQSxRQUFBLFlBQ0EsRUFBQSxRQUFBLE9BQUEsRUFBQSxRQUFBLEdBQUEsRUFBQSxRQUFBLEtBQ0EsRUFBQSxzQkFBQSxFQUFBLGFBQUEsVUFDQSxFQUFBLGFBQUEsRUFBQSxhQUFBLEtBQ0EsRUFBQSxtQkFBQSxFQUFBLFVBQUEsVUFDQSxFQUFBLFVBQUEsRUFBQSxVQUFBLEtBQ0EsRUFBQSxZQUFBLElBQUEsRUFBQSxxQkFBQSxFQUFBLHFCQUFBLEVBQUEsWUFDQSxFQUFBLEtBQUEsS0FHQSxHQUVBLFFBQUEsV0FDQSxPQUNBLFlBQUEsRUFDQSxVQUNBLGlCQUFBLEtBQUEsSUFBQSxnQkFDQSxhQUFBLEtBQUEsSUFBQSxnQkFDQSxhQUFBLEtBQUEsSUFBQSxxQ0FDQSxZQUFBLEtBQUEsSUFBQSxXQUNBLFFBQUEsS0FBQSxJQUFBLFdBQ0EsVUFBQSxLQUFBLElBQUEsY0FFQSxPQUNBLE1BQUEsS0FBQSxJQUFBLG1CQUNBLE1BQUEsS0FBQSxJQUFBLFdBQ0EsVUFBQSxLQUFBLElBQUEsc0JBRUEsS0FBQSxxQkFJQSxhQUFBLFdBQUEsR0FBQSxHQUFBLEtBR0EsR0FEQSxLQUFBLE9BQUEsTUFBQSxVQUFBLFdBQ0EsS0FBQSxZQUNBLE1BQUEsVUFFQSxPQUFBLEdBQUEsT0FBQSxTQUFBLEdBQ0EsSUFBQSxHQUFBLEtBQUEsR0FBQSxXQUNBLE9BQUEsR0FDQSxJQUFBLGVBQ0EsR0FBQSxFQUFBLFdBQUEsYUFBQSxDQUlBLElBSEEsR0FBQSxRQUFBLEVBQUEsV0FBQSxhQUFBLEtBR0EsS0FBQSxFQUFBLGNBQ0EsT0FBQSxFQUdBLEtBQ0EsS0FBQSxvQkFDQSxHQUFBLEVBQUEsV0FBQSxxQkFFQSxFQUFBLGNBQUEsRUFBQSxXQUFBLG1CQUFBLEVBQUEsYUFBQSxFQUFBLFdBQUEsbUJBQ0EsT0FBQSxDQUdBLE1BQ0EsS0FBQSxrQkFDQSxHQUFBLEVBQUEsV0FBQSxtQkFFQSxFQUFBLGNBQUEsRUFBQSxXQUFBLGlCQUFBLEVBQUEsYUFBQSxFQUFBLFdBQUEsaUJBQ0EsT0FBQSxDQUdBLE1BQ0EsS0FBQSxpQkFDQSxHQUFBLEVBQUEsV0FBQSxrQkFFQSxFQUFBLFdBQUEsRUFBQSxXQUFBLGdCQUFBLEVBQUEsVUFBQSxFQUFBLFdBQUEsZ0JBQ0EsT0FBQSxDQUdBLE1BQ0EsS0FBQSxlQUNBLEdBQUEsRUFBQSxXQUFBLGdCQUVBLEVBQUEsV0FBQSxFQUFBLFdBQUEsY0FBQSxFQUFBLFVBQUEsRUFBQSxXQUFBLGNBQ0EsT0FBQSxDQUdBLE1BQ0EsS0FBQSxZQUVBLEdBQUEsRUFBQSxXQUFBLFdBQUEsRUFBQSxxQkFBQSxFQUFBLFdBQUEsVUFDQSxPQUFBLENBRUEsTUFDQSxLQUFBLFVBRUEsR0FBQSxFQUFBLFdBQUEsU0FBQSxFQUFBLGNBQUEsRUFBQSxXQUFBLFFBQ0EsT0FBQSxFQU9BLE9BQUEsS0FJQSxjQUFBLFdBQ0EsTUFBQSxNQUFBLFdBR0EsU0FFQSxlQUFBLFNBQUEsR0FDQSxHQUNBLElBQ0EsYUFBQSxFQUFBLGFBQ0EsVUFBQSxFQUFBLFVBQUEsRUFBQSxVQUFBLEdBQ0EsUUFBQSxFQUFBLFFBQUEsRUFBQSxRQUFBLEdBQ0Esa0JBQUEsR0FDQSxnQkFBQSxHQUNBLGVBQUEsR0FDQSxhQUFBLEdBR0EsSUFBQSxFQUFBLGtCQUFBLENBQ0EsR0FBQSxJQUFBLEVBQUEsRUFBQSxTQUFBLEVBQUEsbUJBQUEsT0FaQSxVQWFBLEdBQUEsa0JBQUEsTUFFQSxHQUFBLGtCQUFBLEVBR0EsSUFBQSxFQUFBLGdCQUFBLENBQ0EsR0FBQSxJQUFBLEVBQUEsRUFBQSxTQUFBLEVBQUEsaUJBQUEsT0FuQkEsVUFvQkEsR0FBQSxnQkFBQSxNQUVBLEdBQUEsZ0JBQUEsRUFHQSxJQUFBLEVBQUEsZUFBQSxDQUNBLEdBQUEsSUFBQSxFQUFBLEVBQUEsU0FBQSxFQUFBLGdCQUFBLE9BMUJBLFVBMkJBLEdBQUEsZUFBQSxNQUVBLEdBQUEsZUFBQSxFQUdBLElBQUEsRUFBQSxhQUFBLENBQ0EsR0FBQSxJQUFBLEVBQUEsRUFBQSxTQUFBLEVBQUEsY0FBQSxPQWpDQSxVQWtDQSxHQUFBLGFBQUEsTUFFQSxHQUFBLGFBQUEsRUFHQSxNQUFBLGlCQUFBLEdBQ0EsS0FBQSxZQUNBLEtBQUEsTUFBQSxNQUFBLFFBQUEsSUFHQSxpQkFBQSxTQUFBLEdBQUEsR0FBQSxHQUFBLE1BQ0EsRUFBQSxFQUFBLFNBQUEsR0FBQSxRQUFBLFNBQUEsR0FDQSxFQUFBLFdBQUEsR0FBQSxFQUFBLE1BR0EsVUFBQSxXQUFBLEdBQUEsR0FBQSxLQUNBLE1BR0EsRUFBQSxFQUFBLFNBQUEsS0FBQSxZQUFBLFFBQUEsU0FBQSxHQUNBLEdBQUEsR0FBQSxFQUFBLFdBQUEsRUFDQSxNQUFBLElBQ0EsRUFBQSxHQUFBLEtBSUEsS0FBQSxvQkFDQSxFQUFBLEVBQUEsU0FBQSxHQUFBLE9BQ0EsS0FBQSxRQUFBLFNBQUEsT0FBQSxRQUFBLEVBQUEsUUFBQSxVQUFBLE1BS0EsS0FBQSxRQUFBLFNBQUEsV0FBQSxNQUFBLFNBQUEsUUFLQSxXQUFBLFlBQ0EsRUFBQSxFQUFBLFNBQUEsa0JBQUEsWUFBQSxpQkFHQSxRQUFBLFdBRUEsR0FBQSxHQUFBLEtBQUEsT0FBQSxNQUFBLE9BRUEsSUFBQSxFQUFBLENBQ0EsR0FBQSxHQUFBLEVBQUEsUUFBQSxNQUFBLEVBQ0EsSUFDQSxLQUFBLGlCQUFBLEdBSUEsS0FBQSxrQkFBQSxFQUVBLEtBQUEsT0FBQSxTQUFBLHNCQUFBLEtBQUEsT0FBQSxNQUFBLEtBQUEsUUFBQSxJQUFBLEtBQUEsWUFFQSxFQUFBLEVBQUEsU0FBQSxZQUFBLFNBR0EsS0FBQSxPQUFBLE9BQUEsZ0JBQ0EsU0FBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLDhDQUNBLFlBQUEsS0FBQSxJQUFBLG9EQUNBLGVBQUEsS0FHQSxFQUFBLEVBQUEsU0FBQSxRQUFBLFNBQUEsTUFDQSxFQUFBLEVBQUEsU0FBQSx1QkFBQSxRQUFBLFlBQUEsU0FBQSxnQ0FLQSxFQUFBLEVBQUEsU0FBQSxRQUFBLE9BQUEsWUFDQSxFQUFBLEVBQUEsU0FBQSxRQUFBLFNBQUEsS0FDQSxFQUFBLEVBQUEsU0FBQSx1QkFBQSxRQUFBLFlBQUEsU0FBQSxnQ0FJQSxFQUFBLEVBQUEsU0FBQSx1QkFBQSxRQUFBLFlBQUEsWUFBQSxxTUF0WUEsa0JBQUEsT0FBQSxXQUFBLEdBQUEsR0FBQSxLQUFBLEVBQUEsRUFBQSxlQUFBLEVBQUEsRUFBQSxNQUFBLElBQUEsQ0FBQSxPQUFBLEdBQUEsc0JBQUEsRUFBQSxPQUFBLFlBQUEscUJBQUEsT0FBQSxLQUFBLGlCQUFBLElBQUEsTUFBQSxFQUFBLFlBQUEsS0FBQSxrQkFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxxQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE9BQUEsWUFBQSw0QkFBQSxPQUFBLEtBQUEsV0FBQSxLQUFBLFlBQUEsRUFBQSxVQUFBLE9BQUEsT0FBQSxFQUFBLGFBQUEsWUFBQSxFQUFBLFNBQUEsY0FBQSxFQUFBLFdBQUEsWUFBQSxFQUFBLG1CQUFBLEdBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxPQUFBLFlBQUEsY0FBQSxhQUFBLE1BQUEsUUFBQSxnQkFBQSxVQUFBLEVBQUEsT0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEtBQUEsSUFBQSxlQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsT0FBQSxZQUFBLHlDQUFBLGFBQUEsTUFBQSxXQUFBLEVBQUEsT0FBQSxZQUFBLDJFQUFBLEVBQUEsUUFBQSxZQUFBLG9EQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxrQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsYUFBQSxLQUFBLFFBQUEsUUFBQSxVQUFBLE1BQUEsRUFBQSxTQUFBLFdBQUEsYUFBQSxZQUFBLDJGQUFBLElBQUEsUUFBQSxTQUFBLEdBQUEsR0FBQSxHQUFBLE1BQUEsVUFBQSxPQUFBLEtBQUEsRUFBQSxPQUFBLFFBQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxXQUFBLElBQUEsU0FBQSxHQUFBLE1BQUEsVUFBQSxHQUFBLEVBQUEsT0FBQSxFQUFBLE9BQUEsR0FBQSxTQUFBLEVBQUEsT0FBQSxTQUFBLEVBQUEsRUFBQSxJQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsTUFBQSxNQUFBLFNBQUEsRUFBQSxPQUFBLFlBQUEsRUFBQSxVQUFBLE9BQUEsS0FBQSxHQUFBLE1BQUEsUUFBQSxFQUFBLEdBQUEsUUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsT0FBQSxLQUFBLEdBQUEsTUFBQSxRQUFBLEVBQUEsR0FBQSxnQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLGtCQUFBLElBQUEsUUFBQSxPQUFBLFFBQUEsRUFBQSxRQUFBLEtBQUEsRUFBQSxhQUFBLFFBQUEsRUFBQSxTQUFBLFlBQUEsRUFBQSxLQUFBLElBQUEsZUFBQSxHQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsZUFBQSxPQUFBLElBQUEsS0FBQSxtQkFBQSxRQUFBLGFBQUEsRUFBQSxJQUFBLGtCQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLG9CQUFBLElBQUEsZUFBQSxHQUFBLFNBQUEsR0FBQSxNQUFBLEdBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxnQ0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE9BQUEsWUFBQSxhQUFBLElBQUEsaUJBQUE7OztnUENpQkEsRUFBQSxRQUFBLHdDQUdBLFlBQ0EsU0FBQSxFQUFBLFNBRUEsS0FBQSxrQkFDQSxLQUFBLFdBQ0EsT0FDQSxjQUNBLFlBQ0EsZ0JBQUEsRUFDQSxjQUFBLElBR0EsVUFDQSxPQUFBLFdBQ0EsTUFBQSxNQUFBLE9BQUEsUUFBQSx1QkFFQSxLQUFBLEtBQ0EsTUFBQSxLQUFBLE9BQUEsTUFBQSxLQUFBLEtBQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxhQUNBLEtBQUEsV0FFQSxLQUFBLE9BQ0EsTUFBQSxLQUFBLE9BQUEsTUFBQSxLQUFBLEtBQ0EsTUFBQSxLQUFBLElBQUEsUUFDQSxLQUFBLFdBRUEsS0FBQSxZQUNBLE1BQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxLQUFBLFVBQ0EsTUFBQSxLQUFBLElBQUEsYUFDQSxLQUFBLFNBRUEsS0FBQSxXQUNBLE1BQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxLQUFBLFNBQ0EsTUFBQSxLQUFBLElBQUEsWUFDQSxLQUFBLFNBRUEsS0FBQSxRQUNBLE1BQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxLQUFBLE1BQ0EsTUFBQSxLQUFBLElBQUEsU0FDQSxLQUFBLFNBRUEsS0FBQSxVQUNBLE1BQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxLQUFBLFNBQUEsS0FBQSxPQUFBLE1BQUEsS0FBQSxLQUFBLFFBQUEsYUFBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLFdBQ0EsUUFBQSxLQUFBLE9BQUEsUUFBQSxxQkFDQSxLQUFBLGdCQU9BLFNBQ0EsT0FBQSxXQUFBLEdBQUEsR0FBQSxJQUFBLFFBQUEsRUFBQSxFQUFBLFNBQUEsRUFBQSxRQUFBLEtBQUEsUUFBQSxLQUFBLE1BQUEsR0FBQSxRQUFBLEtBQUEsU0FBQSxHQUFBLE9BQUEsT0FBQSxFQUFBLEtBQUEsRUFBQSxNQUFBLElBQUEsR0FBQSxNQUNBLEdBQUEsY0FBQSxFQURBLEVBQUEsT0FBQSxTQUFBLEVBQUEsS0FBQSxXQUFBLEVBQUEsU0FBQSxHQUFBLEVBQUEsVUFBQSxLQUFBLFNBQUEsR0FJQSxFQUFBLGNBQUEsRUFHQSxNQUFBLEVBQUEsT0FDQSxFQUFBLFdBQUEsRUFBQSxPQUFBLFFBR0EsTUFBQSxFQUFBLE9BQ0EsRUFBQSxPQUFBLE9BQUEsaUJBQUEsRUFBQSxPQUFBLE1BQ0EsRUFBQSxnQkFBQSxLQWJBLEtBQUEsR0FBQSxJQUFBLE1BQUEsTUFBQSxHQUFBLFNBQUEsRUFBQSxVQW1CQSxRQUFBLFdBQ0EsS0FBQSxPQUFBLFNBQUEsb0xBN0ZBLGtCQUFBLE9BQUEsV0FBQSxHQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsZUFBQSxFQUFBLEVBQUEsTUFBQSxJQUFBLENBQUEsT0FBQSxHQUFBLE9BQUEsRUFBQSxlQUFBLEVBQUEsT0FBQSxFQUFBLE1BQUEsVUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsK0NBQUEsRUFBQSxPQUFBLEVBQUEsVUFBQSxPQUFBLE9BQUEsRUFBQSxPQUFBLFlBQUEsRUFBQSxTQUFBLGNBQUEsRUFBQSxjQUFBLEVBQUEsT0FBQSxZQUFBLG9CQUFBLE9BQUEsS0FBQSxXQUFBLEtBQUEsWUFBQSxFQUFBLFVBQUEsWUFBQSxpQkFBQSxPQUFBLFNBQUEsRUFBQSxhQUFBLEtBQUEsVUFBQSxJQUFBLE1BQUEsRUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLDhCQUFBLE1BQUEsaUJBQUE7OztnUENrQkEsRUFBQSxRQUFBLHdDQUdBLFlBQ0EsU0FBQSxFQUFBLFNBRUEsS0FBQSxxQkFDQSxLQUFBLFdBQ0EsT0FDQSxjQUNBLFlBQ0EsY0FBQSxFQUNBLE1BQUEsS0FDQSxjQUFBLElBR0EsVUFDQSxPQUFBLFdBQ0EsUUFDQSxLQUFBLFFBQ0EsTUFBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLFNBQ0EsS0FBQSxXQUVBLEtBQUEsV0FDQSxNQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEsWUFDQSxLQUFBLFdBSUEsU0FDQSxLQUFBLFdBQUEsR0FBQSxHQUFBLElBQUEsUUFBQSxFQUFBLEVBQUEsU0FBQSxFQUFBLFFBQUEsS0FBQSxRQUFBLEtBQUEsR0FBQSxHQUFBLENBQUEsT0FBQSxHQUFBLFFBQUEsS0FBQSxTQUFBLEdBQUEsT0FBQSxPQUFBLEVBQUEsS0FBQSxFQUFBLE1BQUEsSUFBQSxHQUFBLEdBQ0EsRUFBQSxFQUVBLEVBQUEsY0FBQSxFQUhBLEVBQUEsTUFBQSxDQUFBLEVBQUEsS0FBQSxDQUFBLE9BQUEsTUFBQSxHQUFBLEtBQUEsRUFBQSxFQUFBLEtBQUEsVUFBQSxLQUFBLEdBTUEsRUFBQSxFQUFBLEtBQ0EsTUFBQSxFQUFBLE9BQ0EsRUFBQSxNQUFBLEVBQUEsT0FBQSxNQVJBLEtBQUEsR0FBQSxNQUFBLEdBQUEsT0FBQSxTQUFBLEVBQUEsS0FBQSxnQkFhQSxNQUFBLEVBQUEsTUFDQSxTQUFBLEVBQUEsU0FBQSxXQUZBLEtBQUEsU0FBQSxHQUtBLEVBQUEsY0FBQSxFQUNBLEVBQUEsTUFBQSxHQUdBLE1BQUEsRUFBQSxPQUNBLEVBQUEsV0FBQSxFQUFBLE9BQUEsUUFHQSxNQUFBLEVBQUEsT0FDQSxFQUFBLGNBQUEsS0ExQkEsS0FBQSxHQUFBLElBQUEsTUFBQSxNQUFBLEdBQUEsU0FBQSxFQUFBLFVBK0JBLFFBQUEsV0FBQSxHQUFBLEdBQUEsSUFDQSxNQUFBLEtBQUEsV0FBQSxLQUFBLFNBQUEsR0FDQSxNQUFBLEVBQUEsT0FDQSxFQUFBLE1BQUEsRUFBQSxPQUFBLFNBR0EsS0FBQSxPQUFBLE9BQUEsZ0JBQ0EsU0FBQSxHQUNBLE1BQUEsS0FBQSxJQUFBLCtDQUNBLFlBQUEsR0FDQSxlQUFBLHdLQTNGQSxrQkFBQSxPQUFBLFdBQUEsR0FBQSxHQUFBLEtBQUEsRUFBQSxFQUFBLGVBQUEsRUFBQSxFQUFBLE1BQUEsSUFBQSxDQUFBLE9BQUEsR0FBQSxPQUFBLEVBQUEsYUFBQSxFQUFBLE9BQUEsRUFBQSxHQUFBLFNBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSw4Q0FBQSxVQUFBLEVBQUEsT0FBQSxFQUFBLFVBQUEsT0FBQSxPQUFBLEVBQUEsT0FBQSxZQUFBLEVBQUEsU0FBQSxjQUFBLEVBQUEsY0FBQSxFQUFBLE9BQUEsT0FBQSxLQUFBLFdBQUEsS0FBQSxZQUFBLEVBQUEsVUFBQSxZQUFBLGlCQUFBLE9BQUEsU0FBQSxFQUFBLGFBQUEsS0FBQSxVQUFBLElBQUEsTUFBQSxFQUFBLFFBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsNkJBQUEsTUFBQSxpQkFBQTs7O2dQQ29CQSxFQUFBLFFBQUEsd0NBR0EsWUFDQSxTQUFBLEVBQUEsU0FFQSxLQUFBLHFCQUNBLEtBQUEsV0FDQSxPQUNBLGNBQ0EsWUFDQSxpQkFBQSxFQUNBLE1BQUEsS0FDQSxjQUFBLEVBQ0EsV0FBQSxHQUNBLGNBQUEsSUFHQSxVQUNBLGFBQUEsV0FDQSxPQUFBLEtBQUEsWUFBQSxLQUFBLGNBRUEsT0FBQSxXQUNBLFFBQ0EsS0FBQSxRQUNBLE1BQUEsR0FDQSxNQUFBLEtBQUEsV0FDQSxLQUFBLFdBRUEsS0FBQSxjQUNBLE1BQUEsR0FDQSxNQUFBLEtBQUEsSUFBQSxlQUNBLEtBQUEsc0JBRUEsS0FBQSxxQkFDQSxNQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEsb0JBQ0EsS0FBQSxlQUlBLFNBQ0EsS0FBQSxXQUFBLEdBQUEsR0FBQSxJQUFBLFFBQUEsRUFBQSxFQUFBLFNBQUEsRUFBQSxRQUFBLEtBQUEsUUFBQSxLQUFBLEdBQUEsRUFBQSxPQUFBLEdBQUEsUUFBQSxLQUFBLFNBQUEsR0FBQSxPQUFBLE9BQUEsRUFBQSxLQUFBLEVBQUEsTUFBQSxJQUFBLEdBQUEsTUFDQSxHQUFBLEVBRUEsRUFBQSxjQUFBLEVBSEEsRUFBQSxPQUFBLFNBQUEsRUFBQSxLQUFBLGdCQU1BLE1BQUEsRUFBQSxXQUNBLFlBQUEsRUFBQSxT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S0FBQSxJQUFBLG1EQUNBLFlBQUEsR0FDQSxlQUFBLEdBR0EsSUFBQSxHQUFBLFNBQUEsdUJBQUEsZUFDQSxHQUFBLFNBQ0EsRUFBQSxFQUFBLEdBQ0EsRUFBQSxVQUFBLElBQUEscUxBdkhBLGtCQUFBLE9BQUEsV0FBQSxHQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsZUFBQSxFQUFBLEVBQUEsTUFBQSxJQUFBLENBQUEsT0FBQSxHQUFBLHFCQUFBLEVBQUEsdUJBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxTQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEseUJBQUEsVUFBQSxFQUFBLFFBQUEsYUFBQSxZQUFBLE9BQUEsY0FBQSxNQUFBLE1BQUEsd0JBQUEsRUFBQSxHQUFBLFlBQUEsRUFBQSxHQUFBLEVBQUEscUJBQUEsTUFBQSxlQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSwwQkFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxLQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxvQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxxQkFBQSxlQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsb0JBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEscUJBQUEsVUFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLHdCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLHFCQUFBLHdCQUFBLEVBQUEsUUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsMkJBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsS0FBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsaUJBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEscUJBQUEsb0JBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxnQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxxQkFBQSxtQkFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxxQkFBQSxnQkFBQSxFQUFBLFFBQUEsRUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLHVCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLHFCQUFBLGtCQUFBLEVBQUEsUUFBQSxFQUFBLEtBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGFBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEscUJBQUEsZ0JBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEscUJBQUEsY0FBQSxFQUFBLFFBQUEsRUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGFBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEscUJBQUEsZ0JBQUEsRUFBQSxRQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLHFCQUFBLGdCQUFBLEVBQUEsUUFBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsZUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxxQkFBQSxrQkFBQSxFQUFBLFFBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEscUJBQUEsbUJBQUEsRUFBQSxRQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxrQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxxQkFBQSxxQkFBQSxFQUFBLFFBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEscUJBQUEsbUJBQUEsRUFBQSxRQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxrQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxxQkFBQSxxQkFBQSxFQUFBLFFBQUEsRUFBQSxPQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSx5QkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxLQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxpQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxxQkFBQSxrQkFBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxVQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGdCQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsR0FBQSxFQUFBLHFCQUFBLGlCQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsYUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxxQkFBQSxjQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsYUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxxQkFBQSxjQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLHFCQUFBLGlCQUFBLEVBQUEsUUFBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsa0JBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEscUJBQUEsbUJBQUEsRUFBQSxRQUFBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLHFCQUFBLG9CQUFBLEVBQUEsUUFBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsZUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxxQkFBQSxzQkFBQSxFQUFBLFFBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEscUJBQUEsaUJBQUEsRUFBQSxRQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxrQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxxQkFBQSxtQkFBQSxFQUFBLFFBQUEsRUFBQSxLQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEscUJBQUEsaUJBQUEsRUFBQSxRQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxrQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxxQkFBQSxtQkFBQSxFQUFBLFFBQUEsRUFBQSxPQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxpQ0FBQSxFQUFBLE1BQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxLQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSx1REFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLHFCQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsdURBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxxQkFBQSxFQUFBLFFBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxNQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsS0FBQSxFQUFBLFVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsdURBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxxQkFBQSxFQUFBLFFBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxLQUFBLEVBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxtQkFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsRUFBQSxxQkFBQSxrQkFBQSxFQUFBLFFBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxLQUFBLFlBQUEsaUJBQUEsRUFBQSxNQUFBLEVBQUEsS0FBQSxPQUFBLEtBQUEsS0FBQSxJQUFBLE1BQUEsRUFBQSxTQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLHlCQUFBLEVBQUEsTUFBQSxpQkFBQTs7O2tJQ2FBLElBQUEsR0FBQSxRQUFBLHVCQUNBLEVBQUEsUUFBQSw0Q0FDQSxFQUFBLFFBQUEsa0NBR0EsS0FBQSw0QkFDQSxZQUNBLDhCQUFBLEVBQUEsUUFDQSxTQUFBLEVBQUEsU0FFQSxLQUFBLFdBQ0EsT0FDQSxZQUNBLGNBQ0EsV0FBQSxHQUNBLGVBQUEsT0FBQSxlQUFBLFlBQUEsY0FBQSxvQkFBQSxtQkFBQSxpQkFDQSxTQUFBLE9BQUEsZUFBQSxZQUFBLGNBQUEsb0JBQUEsbUJBQUEsaUJBQ0EsVUFBQSxPQUFBLGVBQUEsWUFBQSxlQUNBLFlBQUEsT0FBQSxlQUFBLFlBQUEsaUJBR0EsVUFDQSxRQUFBLFdBQ0EsT0FDQSxZQUFBLEVBQ0EsZUFBQSxvQkFBQSxtQkFBQSxpQkFDQSxVQUNBLEtBQUEsS0FBQSxJQUFBLDBCQUNBLGFBQUEsS0FBQSxJQUFBLGdCQUNBLFVBQUEsS0FBQSxJQUFBLHdCQUNBLFlBQUEsS0FBQSxJQUFBLGlCQUVBLE9BQ0EsVUFBQSxLQUFBLElBQUEsd0JBS0Esc0JBQUEsV0FDQSxNQUFBLE1BQUEsT0FBQSxNQUFBLHNCQUFBLElBQUEsU0FBQSxHQUNBLE9BQ0EsS0FBQSxFQUFBLEtBQ0EsYUFBQSxFQUFBLGFBQ0EsVUFBQSxFQUFBLFdBQUEsRUFBQSxVQUFBLFVBQ0EsWUFBQSxFQUFBLFlBQ0Esa0JBQUEsRUFBQSxrQkFDQSxpQkFBQSxFQUFBLGlCQUNBLGNBQUEsRUFBQSxrQkFLQSxhQUFBLFdBQ0EsR0FBQSxHQUFBLEtBQ0EsRUFBQSxLQUFBLE9BQUEsTUFBQSxVQUFBLFdBQ0EsRUFBQSxLQUFBLHFCQUVBLElBQUEsRUFBQSxDQUNBLEdBQUEsR0FBQSxHQUFBLFFBQUEsRUFBQSxJQUVBLE9BQUEsR0FBQSxPQUFBLFNBQUEsR0FDQSxJQUFBLEdBQUEsR0FBQSxFQUFBLEVBQUEsRUFBQSxjQUFBLE9BQUEsRUFBQSxFQUFBLElBQUEsQ0FDQSxHQUFBLEdBQUEsRUFBQSxjQUFBLEVBRUEsSUFBQSxFQUFBLEtBQUEsRUFBQSxJQUNBLE9BQUEsRUFHQSxPQUFBLElBR0EsTUFBQSxLQUdBLFNBQ0Esd0JBQUEsV0FDQSxLQUFBLE1BQUEsNkJBQUEsU0FHQSxRQUFBLFdBQ0EsS0FBQSxPQUFBLFNBQUEsNEJBQUEsS0FBQSxZQUVBLEVBQUEsRUFBQSxTQUFBLFlBQUEsU0FHQSxLQUFBLE9BQUEsT0FBQSxnQkFDQSxTQUFBLEdBQ0EsTUFBQSxLQUFBLElBQUEsbURBQ0EsWUFBQSxHQUNBLGVBQUEsd0tBdkdBLGtCQUFBLE9BQUEsV0FBQSxHQUFBLEdBQUEsS0FBQSxFQUFBLEVBQUEsZUFBQSxFQUFBLEVBQUEsTUFBQSxJQUFBLENBQUEsT0FBQSxHQUFBLHVCQUFBLEVBQUEsT0FBQSxZQUFBLGdCQUFBLEVBQUEsVUFBQSxZQUFBLGlCQUFBLElBQUEsTUFBQSxFQUFBLDJCQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLGlDQUFBLEVBQUEsTUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLGtCQUFBLE9BQUEsUUFBQSxFQUFBLFFBQUEsS0FBQSxFQUFBLGFBQUEsUUFBQSxFQUFBLFNBQUEsWUFBQSxFQUFBLEtBQUEsSUFBQSxPQUFBLEdBQUEsU0FBQSxHQUFBLE1BQUEsR0FBQSxlQUFBLE9BQUEsSUFBQSxLQUFBLHdCQUFBLFFBQUEsR0FBQSxFQUFBLElBQUEsVUFBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxlQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsK0JBQUEsSUFBQSwrQkFBQSxPQUFBLGFBQUEsU0FBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE9BQUEsWUFBQSxnQkFBQSxF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LEVBQUksT0FBTyxPQUNaLEVBQVEsT0FBTyxXQUFZLEVBQUksT0FBTyxVQUk1QyxjQXhKTyxTQXdKTyxFQUFTLEdBQ3JCLE1BQU8sS0FBSSxjQUFjLEdBQ3hCLEtBQUssU0FBQSxHQUNELEVBQUksT0FBTyxTQUNaLEVBQVEsT0FBTyxnQkFBaUIsRUFBSSxPQUFPLFlBSWpELFFBaEtPLFNBQUEsRUFnS1csR0FBUSxHQUFqQixHQUFpQixFQUFqQixNQUNQLE9BQU8sS0FBSSxRQUFRLEdBQ2xCLEtBQUssU0FBQSxHQUNELEVBQUksT0FBTyxNQUNaLEVBQU8sVUFBVyxFQUFJLE9BQU8sVUFLckMsU0FDRSxxQkFBc0IsU0FBQSxHQUNwQixNQUFPLEdBQU0sVUFBVSxJQUFJLFNBQUEsR0FDekIsT0FDRSxNQUFPLEVBQUssWUFDWixLQUFNLEVBQUssU0FJakIsZUFBZ0IsU0FBQSxHQU1kLE1BSndDLGVBQXpCLEVBQU0sS0FBSyxLQUFLLEtBQ2pCLEVBQU0sVUFBVSxPQUFPLFNBQ3ZCLEVBQU0sVUFBVSxPQUFPLFNBQUEsR0FBYSxNQUFPLEdBQVEsU0FBVyxFQUFNLEtBQUssUUFBUSxNQUlqRyxzQkFBdUIsU0FBQSxHQUtyQixPQUpnRCxlQUF6QixFQUFNLEtBQUssS0FBSyxLQUN6QixFQUFNLFVBQVUsT0FBTyxTQUN2QixFQUFNLFVBQVUsT0FBTyxTQUFBLEdBQWEsTUFBTyxHQUFRLFNBQVcsRUFBTSxLQUFLLFFBQVEsTUFFdkUsSUFBSyxTQUFBLEdBQzNCLE9BQ0UsTUFBTyxFQUFLLEdBQ1osS0FBTSxFQUFLLFdBUXJCLGVBQUEsUUFBWSxhQUFhLHVCQUVWIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcblx0dHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuXHR0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuXHQoZ2xvYmFsLkFycmF5SW50ZXJzZWN0ID0gZmFjdG9yeSgpKTtcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW50ZXJzZWN0ID0gZnVuY3Rpb24gaW50ZXJzZWN0KGZpcnN0KSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICByZXN0W19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiByZXN0LnJlZHVjZShmdW5jdGlvbiAoYWNjdW0sIGN1cnJlbnQpIHtcbiAgICByZXR1cm4gYWNjdW0uZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gY3VycmVudC5pbmRleE9mKHgpICE9PSAtMTtcbiAgICB9KTtcbiAgfSwgZmlyc3QpO1xufTtcblxucmV0dXJuIGludGVyc2VjdDtcblxufSkpKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvYXhpb3MnKTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBzZXR0bGUgPSByZXF1aXJlKCcuLy4uL2NvcmUvc2V0dGxlJyk7XG52YXIgYnVpbGRVUkwgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvYnVpbGRVUkwnKTtcbnZhciBwYXJzZUhlYWRlcnMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvcGFyc2VIZWFkZXJzJyk7XG52YXIgaXNVUkxTYW1lT3JpZ2luID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbicpO1xudmFyIGNyZWF0ZUVycm9yID0gcmVxdWlyZSgnLi4vY29yZS9jcmVhdGVFcnJvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHhockFkYXB0ZXIoY29uZmlnKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiBkaXNwYXRjaFhoclJlcXVlc3QocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHJlcXVlc3REYXRhID0gY29uZmlnLmRhdGE7XG4gICAgdmFyIHJlcXVlc3RIZWFkZXJzID0gY29uZmlnLmhlYWRlcnM7XG5cbiAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShyZXF1ZXN0RGF0YSkpIHtcbiAgICAgIGRlbGV0ZSByZXF1ZXN0SGVhZGVyc1snQ29udGVudC1UeXBlJ107IC8vIExldCB0aGUgYnJvd3NlciBzZXQgaXRcbiAgICB9XG5cbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICAgIGlmIChjb25maWcuYXV0aCkge1xuICAgICAgdmFyIHVzZXJuYW1lID0gY29uZmlnLmF1dGgudXNlcm5hbWUgfHwgJyc7XG4gICAgICB2YXIgcGFzc3dvcmQgPSBjb25maWcuYXV0aC5wYXNzd29yZCB8fCAnJztcbiAgICAgIHJlcXVlc3RIZWFkZXJzLkF1dGhvcml6YXRpb24gPSAnQmFzaWMgJyArIGJ0b2EodXNlcm5hbWUgKyAnOicgKyBwYXNzd29yZCk7XG4gICAgfVxuXG4gICAgcmVxdWVzdC5vcGVuKGNvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSwgYnVpbGRVUkwoY29uZmlnLnVybCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQ7XG5cbiAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlXG4gICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgdmFyIHJlc3BvbnNlSGVhZGVycyA9ICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgPyBwYXJzZUhlYWRlcnMocmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkgOiBudWxsO1xuICAgICAgdmFyIHJlc3BvbnNlRGF0YSA9ICFjb25maWcucmVzcG9uc2VUeXBlIHx8IGNvbmZpZy5yZXNwb25zZVR5cGUgPT09ICd0ZXh0JyA/IHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIHZhciByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgY29uZmlnLCAnRUNPTk5BQk9SVEVEJywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChjcmVhdGVFcnJvcignTmV0d29yayBFcnJvcicsIGNvbmZpZywgbnVsbCwgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ3RpbWVvdXQgb2YgJyArIGNvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJywgY29uZmlnLCAnRUNPTk5BQk9SVEVEJyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gICAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cbiAgICBpZiAodXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSkge1xuICAgICAgdmFyIGNvb2tpZXMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvY29va2llcycpO1xuXG4gICAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAgIHZhciB4c3JmVmFsdWUgPSAoY29uZmlnLndpdGhDcmVkZW50aWFscyB8fCBpc1VSTFNhbWVPcmlnaW4oY29uZmlnLnVybCkpICYmIGNvbmZpZy54c3JmQ29va2llTmFtZSA/XG4gICAgICAgIGNvb2tpZXMucmVhZChjb25maWcueHNyZkNvb2tpZU5hbWUpIDpcbiAgICAgICAgdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoeHNyZlZhbHVlKSB7XG4gICAgICAgIHJlcXVlc3RIZWFkZXJzW2NvbmZpZy54c3JmSGVhZGVyTmFtZV0gPSB4c3JmVmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgIHV0aWxzLmZvckVhY2gocmVxdWVzdEhlYWRlcnMsIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0RGF0YSA9PT0gJ3VuZGVmaW5lZCcgJiYga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LXR5cGUnKSB7XG4gICAgICAgICAgLy8gUmVtb3ZlIENvbnRlbnQtVHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0SGVhZGVyc1trZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE90aGVyd2lzZSBhZGQgaGVhZGVyIHRvIHRoZSByZXF1ZXN0XG4gICAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChjb25maWcud2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChjb25maWcucmVzcG9uc2VUeXBlKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IGNvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIEV4cGVjdGVkIERPTUV4Y2VwdGlvbiB0aHJvd24gYnkgYnJvd3NlcnMgbm90IGNvbXBhdGlibGUgWE1MSHR0cFJlcXVlc3QgTGV2ZWwgMi5cbiAgICAgICAgLy8gQnV0LCB0aGlzIGNhbiBiZSBzdXBwcmVzc2VkIGZvciAnanNvbicgdHlwZSBhcyBpdCBjYW4gYmUgcGFyc2VkIGJ5IGRlZmF1bHQgJ3RyYW5zZm9ybVJlc3BvbnNlJyBmdW5jdGlvbi5cbiAgICAgICAgaWYgKGNvbmZpZy5yZXNwb25zZVR5cGUgIT09ICdqc29uJykge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25Eb3dubG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vblVwbG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICBjb25maWcuY2FuY2VsVG9rZW4ucHJvbWlzZS50aGVuKGZ1bmN0aW9uIG9uQ2FuY2VsZWQoY2FuY2VsKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgcmVqZWN0KGNhbmNlbCk7XG4gICAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdERhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdERhdGEgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEpO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcbnZhciBBeGlvcyA9IHJlcXVpcmUoJy4vY29yZS9BeGlvcycpO1xudmFyIG1lcmdlQ29uZmlnID0gcmVxdWlyZSgnLi9jb3JlL21lcmdlQ29uZmlnJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuL2RlZmF1bHRzJyk7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqIEByZXR1cm4ge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIHZhciBjb250ZXh0ID0gbmV3IEF4aW9zKGRlZmF1bHRDb25maWcpO1xuICB2YXIgaW5zdGFuY2UgPSBiaW5kKEF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0LCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGF4aW9zLnByb3RvdHlwZSB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIEF4aW9zLnByb3RvdHlwZSwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBjb250ZXh0IHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgY29udGV4dCk7XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyBDcmVhdGUgdGhlIGRlZmF1bHQgaW5zdGFuY2UgdG8gYmUgZXhwb3J0ZWRcbnZhciBheGlvcyA9IGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRzKTtcblxuLy8gRXhwb3NlIEF4aW9zIGNsYXNzIHRvIGFsbG93IGNsYXNzIGluaGVyaXRhbmNlXG5heGlvcy5BeGlvcyA9IEF4aW9zO1xuXG4vLyBGYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzXG5heGlvcy5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKG1lcmdlQ29uZmlnKGF4aW9zLmRlZmF1bHRzLCBpbnN0YW5jZUNvbmZpZykpO1xufTtcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWwgPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWwnKTtcbmF4aW9zLkNhbmNlbFRva2VuID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsVG9rZW4nKTtcbmF4aW9zLmlzQ2FuY2VsID0gcmVxdWlyZSgnLi9jYW5jZWwvaXNDYW5jZWwnKTtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcbmF4aW9zLnNwcmVhZCA9IHJlcXVpcmUoJy4vaGVscGVycy9zcHJlYWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBheGlvcztcblxuLy8gQWxsb3cgdXNlIG9mIGRlZmF1bHQgaW1wb3J0IHN5bnRheCBpbiBUeXBlU2NyaXB0XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gYXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQSBgQ2FuY2VsYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbChtZXNzYWdlKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG59XG5cbkNhbmNlbC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdDYW5jZWwnICsgKHRoaXMubWVzc2FnZSA/ICc6ICcgKyB0aGlzLm1lc3NhZ2UgOiAnJyk7XG59O1xuXG5DYW5jZWwucHJvdG90eXBlLl9fQ0FOQ0VMX18gPSB0cnVlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIENhbmNlbCA9IHJlcXVpcmUoJy4vQ2FuY2VsJyk7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsVG9rZW4oZXhlY3V0b3IpIHtcbiAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgfVxuXG4gIHZhciByZXNvbHZlUHJvbWlzZTtcbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gIH0pO1xuXG4gIHZhciB0b2tlbiA9IHRoaXM7XG4gIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlKSB7XG4gICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbChtZXNzYWdlKTtcbiAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZCA9IGZ1bmN0aW9uIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gIGlmICh0aGlzLnJlYXNvbikge1xuICAgIHRocm93IHRoaXMucmVhc29uO1xuICB9XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gKi9cbkNhbmNlbFRva2VuLnNvdXJjZSA9IGZ1bmN0aW9uIHNvdXJjZSgpIHtcbiAgdmFyIGNhbmNlbDtcbiAgdmFyIHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHtcbiAgICBjYW5jZWwgPSBjO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICB0b2tlbjogdG9rZW4sXG4gICAgY2FuY2VsOiBjYW5jZWxcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsVG9rZW47XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNDYW5jZWwodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIGJ1aWxkVVJMID0gcmVxdWlyZSgnLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIEludGVyY2VwdG9yTWFuYWdlciA9IHJlcXVpcmUoJy4vSW50ZXJjZXB0b3JNYW5hZ2VyJyk7XG52YXIgZGlzcGF0Y2hSZXF1ZXN0ID0gcmVxdWlyZSgnLi9kaXNwYXRjaFJlcXVlc3QnKTtcbnZhciBtZXJnZUNvbmZpZyA9IHJlcXVpcmUoJy4vbWVyZ2VDb25maWcnKTtcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gQXhpb3MoaW5zdGFuY2VDb25maWcpIHtcbiAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKVxuICB9O1xufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICovXG5BeGlvcy5wcm90b3R5cGUucmVxdWVzdCA9IGZ1bmN0aW9uIHJlcXVlc3QoY29uZmlnKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgIGNvbmZpZyA9IGFyZ3VtZW50c1sxXSB8fCB7fTtcbiAgICBjb25maWcudXJsID0gYXJndW1lbnRzWzBdO1xuICB9IGVsc2Uge1xuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgfVxuXG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gIGNvbmZpZy5tZXRob2QgPSBjb25maWcubWV0aG9kID8gY29uZmlnLm1ldGhvZC50b0xvd2VyQ2FzZSgpIDogJ2dldCc7XG5cbiAgLy8gSG9vayB1cCBpbnRlcmNlcHRvcnMgbWlkZGxld2FyZVxuICB2YXIgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LCB1bmRlZmluZWRdO1xuICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuXG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgIGNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgY2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgd2hpbGUgKGNoYWluLmxlbmd0aCkge1xuICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW4uc2hpZnQoKSwgY2hhaW4uc2hpZnQoKSk7XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5cbkF4aW9zLnByb3RvdHlwZS5nZXRVcmkgPSBmdW5jdGlvbiBnZXRVcmkoY29uZmlnKSB7XG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gIHJldHVybiBidWlsZFVSTChjb25maWcudXJsLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlxcPy8sICcnKTtcbn07XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHV0aWxzLm1lcmdlKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybFxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCh1dGlscy5tZXJnZShjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBkYXRhOiBkYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gSW50ZXJjZXB0b3JNYW5hZ2VyKCkge1xuICB0aGlzLmhhbmRsZXJzID0gW107XG59XG5cbi8qKlxuICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkKSB7XG4gIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgZnVsZmlsbGVkOiBmdWxmaWxsZWQsXG4gICAgcmVqZWN0ZWQ6IHJlamVjdGVkXG4gIH0pO1xuICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuZWplY3QgPSBmdW5jdGlvbiBlamVjdChpZCkge1xuICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gIH1cbn07XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgZm4oaCk7XG4gICAgfVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSW50ZXJjZXB0b3JNYW5hZ2VyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZW5oYW5jZUVycm9yID0gcmVxdWlyZSgnLi9lbmhhbmNlRXJyb3InKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlRXJyb3IobWVzc2FnZSwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBlbmhhbmNlRXJyb3IoZXJyb3IsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHRyYW5zZm9ybURhdGEgPSByZXF1aXJlKCcuL3RyYW5zZm9ybURhdGEnKTtcbnZhciBpc0NhbmNlbCA9IHJlcXVpcmUoJy4uL2NhbmNlbC9pc0NhbmNlbCcpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi4vZGVmYXVsdHMnKTtcbnZhciBpc0Fic29sdXRlVVJMID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwnKTtcbnZhciBjb21iaW5lVVJMcyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9jb21iaW5lVVJMcycpO1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKi9cbmZ1bmN0aW9uIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKSB7XG4gIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICBjb25maWcuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIC8vIFN1cHBvcnQgYmFzZVVSTCBjb25maWdcbiAgaWYgKGNvbmZpZy5iYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKGNvbmZpZy51cmwpKSB7XG4gICAgY29uZmlnLnVybCA9IGNvbWJpbmVVUkxzKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgfVxuXG4gIC8vIEVuc3VyZSBoZWFkZXJzIGV4aXN0XG4gIGNvbmZpZy5oZWFkZXJzID0gY29uZmlnLmhlYWRlcnMgfHwge307XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEoXG4gICAgY29uZmlnLmRhdGEsXG4gICAgY29uZmlnLmhlYWRlcnMsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgY29uZmlnLmhlYWRlcnMgPSB1dGlscy5tZXJnZShcbiAgICBjb25maWcuaGVhZGVycy5jb21tb24gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNbY29uZmlnLm1ldGhvZF0gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnMgfHwge31cbiAgKTtcblxuICB1dGlscy5mb3JFYWNoKFxuICAgIFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2NvbW1vbiddLFxuICAgIGZ1bmN0aW9uIGNsZWFuSGVhZGVyQ29uZmlnKG1ldGhvZCkge1xuICAgICAgZGVsZXRlIGNvbmZpZy5oZWFkZXJzW21ldGhvZF07XG4gICAgfVxuICApO1xuXG4gIHZhciBhZGFwdGVyID0gY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMuYWRhcHRlcjtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEoXG4gICAgICByZXNwb25zZS5kYXRhLFxuICAgICAgcmVzcG9uc2UuaGVhZGVycyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH0sIGZ1bmN0aW9uIG9uQWRhcHRlclJlamVjdGlvbihyZWFzb24pIHtcbiAgICBpZiAoIWlzQ2FuY2VsKHJlYXNvbikpIHtcbiAgICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICAgIGlmIChyZWFzb24gJiYgcmVhc29uLnJlc3BvbnNlKSB7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YShcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFVwZGF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgY29uZmlnLCBlcnJvciBjb2RlLCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtFcnJvcn0gZXJyb3IgVGhlIGVycm9yIHRvIHVwZGF0ZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgZXJyb3IuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZW5oYW5jZUVycm9yKGVycm9yLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIGVycm9yLmNvbmZpZyA9IGNvbmZpZztcbiAgaWYgKGNvZGUpIHtcbiAgICBlcnJvci5jb2RlID0gY29kZTtcbiAgfVxuXG4gIGVycm9yLnJlcXVlc3QgPSByZXF1ZXN0O1xuICBlcnJvci5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICBlcnJvci5pc0F4aW9zRXJyb3IgPSB0cnVlO1xuXG4gIGVycm9yLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBTdGFuZGFyZFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLy8gTWljcm9zb2Z0XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsXG4gICAgICAvLyBNb3ppbGxhXG4gICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcbiAgICAgIGNvbHVtbk51bWJlcjogdGhpcy5jb2x1bW5OdW1iZXIsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIC8vIEF4aW9zXG4gICAgICBjb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgY29kZTogdGhpcy5jb2RlXG4gICAgfTtcbiAgfTtcbiAgcmV0dXJuIGVycm9yO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBDb25maWctc3BlY2lmaWMgbWVyZ2UtZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG5ldyBjb25maWctb2JqZWN0XG4gKiBieSBtZXJnaW5nIHR3byBjb25maWd1cmF0aW9uIG9iamVjdHMgdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzFcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBOZXcgb2JqZWN0IHJlc3VsdGluZyBmcm9tIG1lcmdpbmcgY29uZmlnMiB0byBjb25maWcxXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbWVyZ2VDb25maWcoY29uZmlnMSwgY29uZmlnMikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307XG4gIHZhciBjb25maWcgPSB7fTtcblxuICB1dGlscy5mb3JFYWNoKFsndXJsJywgJ21ldGhvZCcsICdwYXJhbXMnLCAnZGF0YSddLCBmdW5jdGlvbiB2YWx1ZUZyb21Db25maWcyKHByb3ApIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZzJbcHJvcF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBjb25maWcyW3Byb3BdO1xuICAgIH1cbiAgfSk7XG5cbiAgdXRpbHMuZm9yRWFjaChbJ2hlYWRlcnMnLCAnYXV0aCcsICdwcm94eSddLCBmdW5jdGlvbiBtZXJnZURlZXBQcm9wZXJ0aWVzKHByb3ApIHtcbiAgICBpZiAodXRpbHMuaXNPYmplY3QoY29uZmlnMltwcm9wXSkpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IHV0aWxzLmRlZXBNZXJnZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb25maWcyW3Byb3BdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uZmlnW3Byb3BdID0gY29uZmlnMltwcm9wXTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzT2JqZWN0KGNvbmZpZzFbcHJvcF0pKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSB1dGlscy5kZWVwTWVyZ2UoY29uZmlnMVtwcm9wXSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY29uZmlnMVtwcm9wXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbmZpZ1twcm9wXSA9IGNvbmZpZzFbcHJvcF07XG4gICAgfVxuICB9KTtcblxuICB1dGlscy5mb3JFYWNoKFtcbiAgICAnYmFzZVVSTCcsICd0cmFuc2Zvcm1SZXF1ZXN0JywgJ3RyYW5zZm9ybVJlc3BvbnNlJywgJ3BhcmFtc1NlcmlhbGl6ZXInLFxuICAgICd0aW1lb3V0JywgJ3dpdGhDcmVkZW50aWFscycsICdhZGFwdGVyJywgJ3Jlc3BvbnNlVHlwZScsICd4c3JmQ29va2llTmFtZScsXG4gICAgJ3hzcmZIZWFkZXJOYW1lJywgJ29uVXBsb2FkUHJvZ3Jlc3MnLCAnb25Eb3dubG9hZFByb2dyZXNzJywgJ21heENvbnRlbnRMZW5ndGgnLFxuICAgICd2YWxpZGF0ZVN0YXR1cycsICdtYXhSZWRpcmVjdHMnLCAnaHR0cEFnZW50JywgJ2h0dHBzQWdlbnQnLCAnY2FuY2VsVG9rZW4nLFxuICAgICdzb2NrZXRQYXRoJ1xuICBdLCBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKHByb3ApIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZzJbcHJvcF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBjb25maWcyW3Byb3BdO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbmZpZzFbcHJvcF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25maWdbcHJvcF0gPSBjb25maWcxW3Byb3BdO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4vY3JlYXRlRXJyb3InKTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICB2YXIgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghdmFsaWRhdGVTdGF0dXMgfHwgdmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICB9IGVsc2Uge1xuICAgIHJlamVjdChjcmVhdGVFcnJvcihcbiAgICAgICdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsXG4gICAgICByZXNwb25zZS5jb25maWcsXG4gICAgICBudWxsLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBkYXRhIFRoZSBkYXRhIHRvIGJlIHRyYW5zZm9ybWVkXG4gKiBAcGFyYW0ge0FycmF5fSBoZWFkZXJzIFRoZSBoZWFkZXJzIGZvciB0aGUgcmVxdWVzdCBvciByZXNwb25zZVxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZGF0YSwgaGVhZGVycywgZm5zKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuKGRhdGEsIGhlYWRlcnMpO1xuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBub3JtYWxpemVIZWFkZXJOYW1lID0gcmVxdWlyZSgnLi9oZWxwZXJzL25vcm1hbGl6ZUhlYWRlck5hbWUnKTtcblxudmFyIERFRkFVTFRfQ09OVEVOVF9UWVBFID0ge1xuICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbn07XG5cbmZ1bmN0aW9uIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCB2YWx1ZSkge1xuICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnMpICYmIHV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddKSkge1xuICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gdmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdEFkYXB0ZXIoKSB7XG4gIHZhciBhZGFwdGVyO1xuICAvLyBPbmx5IE5vZGUuSlMgaGFzIGEgcHJvY2VzcyB2YXJpYWJsZSB0aGF0IGlzIG9mIFtbQ2xhc3NdXSBwcm9jZXNzXG4gIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXScpIHtcbiAgICAvLyBGb3Igbm9kZSB1c2UgSFRUUCBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4vYWRhcHRlcnMvaHR0cCcpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBGb3IgYnJvd3NlcnMgdXNlIFhIUiBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4vYWRhcHRlcnMveGhyJyk7XG4gIH1cbiAgcmV0dXJuIGFkYXB0ZXI7XG59XG5cbnZhciBkZWZhdWx0cyA9IHtcbiAgYWRhcHRlcjogZ2V0RGVmYXVsdEFkYXB0ZXIoKSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQWNjZXB0Jyk7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQ29udGVudC1UeXBlJyk7XG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0Jsb2IoZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgLyogSWdub3JlICovIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH1cbn07XG5cbmRlZmF1bHRzLmhlYWRlcnMgPSB7XG4gIGNvbW1vbjoge1xuICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJ1xuICB9XG59O1xuXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHV0aWxzLm1lcmdlKERFRkFVTFRfQ09OVEVOVF9UWVBFKTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJncyk7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyU0MC9naSwgJ0AnKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgcGFyYW1zU2VyaWFsaXplcikge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgdmFyIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIGlmIChwYXJhbXNTZXJpYWxpemVyKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtc1NlcmlhbGl6ZXIocGFyYW1zKTtcbiAgfSBlbHNlIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtcy50b1N0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHZhciBwYXJ0cyA9IFtdO1xuXG4gICAgdXRpbHMuZm9yRWFjaChwYXJhbXMsIGZ1bmN0aW9uIHNlcmlhbGl6ZSh2YWwsIGtleSkge1xuICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh1dGlscy5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAga2V5ID0ga2V5ICsgJ1tdJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCA9IFt2YWxdO1xuICAgICAgfVxuXG4gICAgICB1dGlscy5mb3JFYWNoKHZhbCwgZnVuY3Rpb24gcGFyc2VWYWx1ZSh2KSB7XG4gICAgICAgIGlmICh1dGlscy5pc0RhdGUodikpIHtcbiAgICAgICAgICB2ID0gdi50b0lTT1N0cmluZygpO1xuICAgICAgICB9IGVsc2UgaWYgKHV0aWxzLmlzT2JqZWN0KHYpKSB7XG4gICAgICAgICAgdiA9IEpTT04uc3RyaW5naWZ5KHYpO1xuICAgICAgICB9XG4gICAgICAgIHBhcnRzLnB1c2goZW5jb2RlKGtleSkgKyAnPScgKyBlbmNvZGUodikpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFydHMuam9pbignJicpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICB2YXIgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKCcjJyk7XG4gICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gICAgfVxuXG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvKyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICAgIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICAgICAgdmFyIGNvb2tpZSA9IFtdO1xuICAgICAgICAgIGNvb2tpZS5wdXNoKG5hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcblxuICAgICAgICAgIGlmICh1dGlscy5pc051bWJlcihleHBpcmVzKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhwYXRoKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1dGlscy5pc1N0cmluZyhkb21haW4pKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWN1cmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZWFkOiBmdW5jdGlvbiByZWFkKG5hbWUpIHtcbiAgICAgICAgICB2YXIgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgICAgIHJldHVybiAobWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pIDogbnVsbCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUobmFtZSkge1xuICAgICAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUoKSB7fSxcbiAgICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZCgpIHsgcmV0dXJuIG51bGw7IH0sXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge31cbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICByZXR1cm4gL14oW2Etel1bYS16XFxkXFwrXFwtXFwuXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3RcbiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCBVUkwgaXMgb2YgdGhlIHNhbWUgb3JpZ2luIGFzIGN1cnJlbnQgbG9jYXRpb24uXG4gICAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHZhciBtc2llID0gLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICAgIHZhciB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIHZhciBvcmlnaW5VUkw7XG5cbiAgICAgIC8qKlxuICAgICogUGFyc2UgYSBVUkwgdG8gZGlzY292ZXIgaXQncyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgICAgZnVuY3Rpb24gcmVzb2x2ZVVSTCh1cmwpIHtcbiAgICAgICAgdmFyIGhyZWYgPSB1cmw7XG5cbiAgICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICAgICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgICB9XG5cbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG5cbiAgICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhyZWY6IHVybFBhcnNpbmdOb2RlLmhyZWYsXG4gICAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICAgIHNlYXJjaDogdXJsUGFyc2luZ05vZGUuc2VhcmNoID8gdXJsUGFyc2luZ05vZGUuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCAnJykgOiAnJyxcbiAgICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LFxuICAgICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgICAvKipcbiAgICAqIERldGVybWluZSBpZiBhIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBjdXJyZW50IGxvY2F0aW9uXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RVUkwgVGhlIFVSTCB0byB0ZXN0XG4gICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiwgb3RoZXJ3aXNlIGZhbHNlXG4gICAgKi9cbiAgICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgICB2YXIgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgICByZXR1cm4gKHBhcnNlZC5wcm90b2NvbCA9PT0gb3JpZ2luVVJMLnByb3RvY29sICYmXG4gICAgICAgICAgICBwYXJzZWQuaG9zdCA9PT0gb3JpZ2luVVJMLmhvc3QpO1xuICAgICAgfTtcbiAgICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAgIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH07XG4gICAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsIG5vcm1hbGl6ZWROYW1lKSB7XG4gIHV0aWxzLmZvckVhY2goaGVhZGVycywgZnVuY3Rpb24gcHJvY2Vzc0hlYWRlcih2YWx1ZSwgbmFtZSkge1xuICAgIGlmIChuYW1lICE9PSBub3JtYWxpemVkTmFtZSAmJiBuYW1lLnRvVXBwZXJDYXNlKCkgPT09IG5vcm1hbGl6ZWROYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZE5hbWVdID0gdmFsdWU7XG4gICAgICBkZWxldGUgaGVhZGVyc1tuYW1lXTtcbiAgICB9XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG4vLyBIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xudmFyIGlnbm9yZUR1cGxpY2F0ZU9mID0gW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl07XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBoZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGFyc2VIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdmFyIHBhcnNlZCA9IHt9O1xuICB2YXIga2V5O1xuICB2YXIgdmFsO1xuICB2YXIgaTtcblxuICBpZiAoIWhlYWRlcnMpIHsgcmV0dXJuIHBhcnNlZDsgfVxuXG4gIHV0aWxzLmZvckVhY2goaGVhZGVycy5zcGxpdCgnXFxuJyksIGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoMCwgaSkpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gdXRpbHMudHJpbShsaW5lLnN1YnN0cihpICsgMSkpO1xuXG4gICAgaWYgKGtleSkge1xuICAgICAgaWYgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mLmluZGV4T2Yoa2V5KSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgICBwYXJzZWRba2V5XSA9IChwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldIDogW10pLmNvbmNhdChbdmFsXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcbnZhciBpc0J1ZmZlciA9IHJlcXVpcmUoJ2lzLWJ1ZmZlcicpO1xuXG4vKmdsb2JhbCB0b1N0cmluZzp0cnVlKi9cblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Zvcm1EYXRhKHZhbCkge1xuICByZXR1cm4gKHR5cGVvZiBGb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcpICYmICh2YWwgaW5zdGFuY2VvZiBGb3JtRGF0YSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKHZhbC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOdW1iZXIodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0RhdGUodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0ZpbGUodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZpbGVdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Jsb2IodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEJsb2JdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyZWFtKHZhbCkge1xuICByZXR1cm4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VSTFNlYXJjaFBhcmFtcyh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09ICd1bmRlZmluZWQnICYmIHZhbCBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcztcbn1cblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5mdW5jdGlvbiB0cmltKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMqLywgJycpLnJlcGxhY2UoL1xccyokLywgJycpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqL1xuZnVuY3Rpb24gaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAobmF2aWdhdG9yLnByb2R1Y3QgPT09ICdSZWFjdE5hdGl2ZScgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05hdGl2ZVNjcmlwdCcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ05TJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdcbiAgKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZXN1bHQgPSBtZXJnZSh7Zm9vOiAxMjN9LCB7Zm9vOiA0NTZ9KTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb28pOyAvLyBvdXRwdXRzIDQ1NlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iajEgT2JqZWN0IHRvIG1lcmdlXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAodHlwZW9mIHJlc3VsdFtrZXldID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZShyZXN1bHRba2V5XSwgdmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIGVxdWFsIHRvIG1lcmdlIHdpdGggdGhlIGRpZmZlcmVuY2UgYmVpbmcgdGhhdCBubyByZWZlcmVuY2VcbiAqIHRvIG9yaWdpbmFsIG9iamVjdHMgaXMga2VwdC5cbiAqXG4gKiBAc2VlIG1lcmdlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBkZWVwTWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAodHlwZW9mIHJlc3VsdFtrZXldID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgcmVzdWx0W2tleV0gPSBkZWVwTWVyZ2UocmVzdWx0W2tleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgcmVzdWx0W2tleV0gPSBkZWVwTWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICogQHJldHVybiB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmZ1bmN0aW9uIGV4dGVuZChhLCBiLCB0aGlzQXJnKSB7XG4gIGZvckVhY2goYiwgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAodGhpc0FyZyAmJiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFba2V5XSA9IHZhbDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQXJyYXk6IGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXI6IGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyOiBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YTogaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXc6IGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZzogaXNTdHJpbmcsXG4gIGlzTnVtYmVyOiBpc051bWJlcixcbiAgaXNPYmplY3Q6IGlzT2JqZWN0LFxuICBpc1VuZGVmaW5lZDogaXNVbmRlZmluZWQsXG4gIGlzRGF0ZTogaXNEYXRlLFxuICBpc0ZpbGU6IGlzRmlsZSxcbiAgaXNCbG9iOiBpc0Jsb2IsXG4gIGlzRnVuY3Rpb246IGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtOiBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXM6IGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1N0YW5kYXJkQnJvd3NlckVudjogaXNTdGFuZGFyZEJyb3dzZXJFbnYsXG4gIGZvckVhY2g6IGZvckVhY2gsXG4gIG1lcmdlOiBtZXJnZSxcbiAgZGVlcE1lcmdlOiBkZWVwTWVyZ2UsXG4gIGV4dGVuZDogZXh0ZW5kLFxuICB0cmltOiB0cmltXG59O1xuIiwidmFyIG5lc3RSRSA9IC9eKGF0dHJzfHByb3BzfG9ufG5hdGl2ZU9ufGNsYXNzfHN0eWxlfGhvb2spJC9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtZXJnZUpTWFByb3BzIChvYmpzKSB7XG4gIHJldHVybiBvYmpzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xuICAgIHZhciBhYSwgYmIsIGtleSwgbmVzdGVkS2V5LCB0ZW1wXG4gICAgZm9yIChrZXkgaW4gYikge1xuICAgICAgYWEgPSBhW2tleV1cbiAgICAgIGJiID0gYltrZXldXG4gICAgICBpZiAoYWEgJiYgbmVzdFJFLnRlc3Qoa2V5KSkge1xuICAgICAgICAvLyBub3JtYWxpemUgY2xhc3NcbiAgICAgICAgaWYgKGtleSA9PT0gJ2NsYXNzJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgYWEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0ZW1wID0gYWFcbiAgICAgICAgICAgIGFba2V5XSA9IGFhID0ge31cbiAgICAgICAgICAgIGFhW3RlbXBdID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZW9mIGJiID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGVtcCA9IGJiXG4gICAgICAgICAgICBiW2tleV0gPSBiYiA9IHt9XG4gICAgICAgICAgICBiYlt0ZW1wXSA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ29uJyB8fCBrZXkgPT09ICduYXRpdmVPbicgfHwga2V5ID09PSAnaG9vaycpIHtcbiAgICAgICAgICAvLyBtZXJnZSBmdW5jdGlvbnNcbiAgICAgICAgICBmb3IgKG5lc3RlZEtleSBpbiBiYikge1xuICAgICAgICAgICAgYWFbbmVzdGVkS2V5XSA9IG1lcmdlRm4oYWFbbmVzdGVkS2V5XSwgYmJbbmVzdGVkS2V5XSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhYSkpIHtcbiAgICAgICAgICBhW2tleV0gPSBhYS5jb25jYXQoYmIpXG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShiYikpIHtcbiAgICAgICAgICBhW2tleV0gPSBbYWFdLmNvbmNhdChiYilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKG5lc3RlZEtleSBpbiBiYikge1xuICAgICAgICAgICAgYWFbbmVzdGVkS2V5XSA9IGJiW25lc3RlZEtleV1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFba2V5XSA9IGJba2V5XVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYVxuICB9LCB7fSlcbn1cblxuZnVuY3Rpb24gbWVyZ2VGbiAoYSwgYikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGEgJiYgYS5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgYiAmJiBiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL2pzb24vc3RyaW5naWZ5XCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9rZXlzXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL3Byb21pc2VcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pdGVyYXRvclwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX3Byb21pc2UgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9wcm9taXNlXCIpO1xuXG52YXIgX3Byb21pc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcHJvbWlzZSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBnZW4gPSBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiBuZXcgX3Byb21pc2UyLmRlZmF1bHQoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gc3RlcChrZXksIGFyZykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBfcHJvbWlzZTIuZGVmYXVsdC5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgc3RlcChcIm5leHRcIiwgdmFsdWUpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIHN0ZXAoXCJ0aHJvd1wiLCBlcnIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdGVwKFwibmV4dFwiKTtcbiAgICB9KTtcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2l0ZXJhdG9yID0gcmVxdWlyZShcIi4uL2NvcmUtanMvc3ltYm9sL2l0ZXJhdG9yXCIpO1xuXG52YXIgX2l0ZXJhdG9yMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2l0ZXJhdG9yKTtcblxudmFyIF9zeW1ib2wgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9zeW1ib2xcIik7XG5cbnZhciBfc3ltYm9sMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3N5bWJvbCk7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIF9zeW1ib2wyLmRlZmF1bHQgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgX2l0ZXJhdG9yMi5kZWZhdWx0ID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgX3N5bWJvbDIuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gX3N5bWJvbDIuZGVmYXVsdCAmJiBvYmogIT09IF9zeW1ib2wyLmRlZmF1bHQucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IHR5cGVvZiBfc3ltYm9sMi5kZWZhdWx0ID09PSBcImZ1bmN0aW9uXCIgJiYgX3R5cGVvZihfaXRlcmF0b3IyLmRlZmF1bHQpID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKG9iaik7XG59IDogZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gb2JqICYmIHR5cGVvZiBfc3ltYm9sMi5kZWZhdWx0ID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBfc3ltYm9sMi5kZWZhdWx0ICYmIG9iaiAhPT0gX3N5bWJvbDIuZGVmYXVsdC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iaiA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKG9iaik7XG59OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWVcIik7XG4iLCIndXNlIHN0cmljdCdcblxuZXhwb3J0cy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuZXhwb3J0cy50b0J5dGVBcnJheSA9IHRvQnl0ZUFycmF5XG5leHBvcnRzLmZyb21CeXRlQXJyYXkgPSBmcm9tQnl0ZUFycmF5XG5cbnZhciBsb29rdXAgPSBbXVxudmFyIHJldkxvb2t1cCA9IFtdXG52YXIgQXJyID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnID8gVWludDhBcnJheSA6IEFycmF5XG5cbnZhciBjb2RlID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nXG5mb3IgKHZhciBpID0gMCwgbGVuID0gY29kZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICBsb29rdXBbaV0gPSBjb2RlW2ldXG4gIHJldkxvb2t1cFtjb2RlLmNoYXJDb2RlQXQoaSldID0gaVxufVxuXG4vLyBTdXBwb3J0IGRlY29kaW5nIFVSTC1zYWZlIGJhc2U2NCBzdHJpbmdzLCBhcyBOb2RlLmpzIGRvZXMuXG4vLyBTZWU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jhc2U2NCNVUkxfYXBwbGljYXRpb25zXG5yZXZMb29rdXBbJy0nLmNoYXJDb2RlQXQoMCldID0gNjJcbnJldkxvb2t1cFsnXycuY2hhckNvZGVBdCgwKV0gPSA2M1xuXG5mdW5jdGlvbiBnZXRMZW5zIChiNjQpIHtcbiAgdmFyIGxlbiA9IGI2NC5sZW5ndGhcblxuICBpZiAobGVuICUgNCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQnKVxuICB9XG5cbiAgLy8gVHJpbSBvZmYgZXh0cmEgYnl0ZXMgYWZ0ZXIgcGxhY2Vob2xkZXIgYnl0ZXMgYXJlIGZvdW5kXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2JlYXRnYW1taXQvYmFzZTY0LWpzL2lzc3Vlcy80MlxuICB2YXIgdmFsaWRMZW4gPSBiNjQuaW5kZXhPZignPScpXG4gIGlmICh2YWxpZExlbiA9PT0gLTEpIHZhbGlkTGVuID0gbGVuXG5cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IHZhbGlkTGVuID09PSBsZW5cbiAgICA/IDBcbiAgICA6IDQgLSAodmFsaWRMZW4gJSA0KVxuXG4gIHJldHVybiBbdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbl1cbn1cblxuLy8gYmFzZTY0IGlzIDQvMyArIHVwIHRvIHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBvcmlnaW5hbCBkYXRhXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChiNjQpIHtcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gX2J5dGVMZW5ndGggKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikge1xuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gdG9CeXRlQXJyYXkgKGI2NCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cblxuICB2YXIgYXJyID0gbmV3IEFycihfYnl0ZUxlbmd0aChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pKVxuXG4gIHZhciBjdXJCeXRlID0gMFxuXG4gIC8vIGlmIHRoZXJlIGFyZSBwbGFjZWhvbGRlcnMsIG9ubHkgZ2V0IHVwIHRvIHRoZSBsYXN0IGNvbXBsZXRlIDQgY2hhcnNcbiAgdmFyIGxlbiA9IHBsYWNlSG9sZGVyc0xlbiA+IDBcbiAgICA/IHZhbGlkTGVuIC0gNFxuICAgIDogdmFsaWRMZW5cblxuICB2YXIgaVxuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTgpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCAxMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildIDw8IDYpIHxcbiAgICAgIHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMyldXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDE2KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAyKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA+PiA0KVxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMSkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxMCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDQpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA+PiAyKVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0IChudW0pIHtcbiAgcmV0dXJuIGxvb2t1cFtudW0gPj4gMTggJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiAxMiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDYgJiAweDNGXSArXG4gICAgbG9va3VwW251bSAmIDB4M0ZdXG59XG5cbmZ1bmN0aW9uIGVuY29kZUNodW5rICh1aW50OCwgc3RhcnQsIGVuZCkge1xuICB2YXIgdG1wXG4gIHZhciBvdXRwdXQgPSBbXVxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gMykge1xuICAgIHRtcCA9XG4gICAgICAoKHVpbnQ4W2ldIDw8IDE2KSAmIDB4RkYwMDAwKSArXG4gICAgICAoKHVpbnQ4W2kgKyAxXSA8PCA4KSAmIDB4RkYwMCkgK1xuICAgICAgKHVpbnQ4W2kgKyAyXSAmIDB4RkYpXG4gICAgb3V0cHV0LnB1c2godHJpcGxldFRvQmFzZTY0KHRtcCkpXG4gIH1cbiAgcmV0dXJuIG91dHB1dC5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBmcm9tQnl0ZUFycmF5ICh1aW50OCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW4gPSB1aW50OC5sZW5ndGhcbiAgdmFyIGV4dHJhQnl0ZXMgPSBsZW4gJSAzIC8vIGlmIHdlIGhhdmUgMSBieXRlIGxlZnQsIHBhZCAyIGJ5dGVzXG4gIHZhciBwYXJ0cyA9IFtdXG4gIHZhciBtYXhDaHVua0xlbmd0aCA9IDE2MzgzIC8vIG11c3QgYmUgbXVsdGlwbGUgb2YgM1xuXG4gIC8vIGdvIHRocm91Z2ggdGhlIGFycmF5IGV2ZXJ5IHRocmVlIGJ5dGVzLCB3ZSdsbCBkZWFsIHdpdGggdHJhaWxpbmcgc3R1ZmYgbGF0ZXJcbiAgZm9yICh2YXIgaSA9IDAsIGxlbjIgPSBsZW4gLSBleHRyYUJ5dGVzOyBpIDwgbGVuMjsgaSArPSBtYXhDaHVua0xlbmd0aCkge1xuICAgIHBhcnRzLnB1c2goZW5jb2RlQ2h1bmsoXG4gICAgICB1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpXG4gICAgKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDJdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl0gK1xuICAgICAgJz09J1xuICAgIClcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAxMF0gK1xuICAgICAgbG9va3VwWyh0bXAgPj4gNCkgJiAweDNGXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCAyKSAmIDB4M0ZdICtcbiAgICAgICc9J1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuIiwiLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cDovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5cbid1c2Ugc3RyaWN0J1xuXG52YXIgYmFzZTY0ID0gcmVxdWlyZSgnYmFzZTY0LWpzJylcbnZhciBpZWVlNzU0ID0gcmVxdWlyZSgnaWVlZTc1NCcpXG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJ2lzYXJyYXknKVxuXG5leHBvcnRzLkJ1ZmZlciA9IEJ1ZmZlclxuZXhwb3J0cy5TbG93QnVmZmVyID0gU2xvd0J1ZmZlclxuZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFUyA9IDUwXG5cbi8qKlxuICogSWYgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYDpcbiAqICAgPT09IHRydWUgICAgVXNlIFVpbnQ4QXJyYXkgaW1wbGVtZW50YXRpb24gKGZhc3Rlc3QpXG4gKiAgID09PSBmYWxzZSAgIFVzZSBPYmplY3QgaW1wbGVtZW50YXRpb24gKG1vc3QgY29tcGF0aWJsZSwgZXZlbiBJRTYpXG4gKlxuICogQnJvd3NlcnMgdGhhdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBhcmUgSUUgMTArLCBGaXJlZm94IDQrLCBDaHJvbWUgNyssIFNhZmFyaSA1LjErLFxuICogT3BlcmEgMTEuNissIGlPUyA0LjIrLlxuICpcbiAqIER1ZSB0byB2YXJpb3VzIGJyb3dzZXIgYnVncywgc29tZXRpbWVzIHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24gd2lsbCBiZSB1c2VkIGV2ZW5cbiAqIHdoZW4gdGhlIGJyb3dzZXIgc3VwcG9ydHMgdHlwZWQgYXJyYXlzLlxuICpcbiAqIE5vdGU6XG4gKlxuICogICAtIEZpcmVmb3ggNC0yOSBsYWNrcyBzdXBwb3J0IGZvciBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gYFVpbnQ4QXJyYXlgIGluc3RhbmNlcyxcbiAqICAgICBTZWU6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTQzOC5cbiAqXG4gKiAgIC0gQ2hyb21lIDktMTAgaXMgbWlzc2luZyB0aGUgYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbi5cbiAqXG4gKiAgIC0gSUUxMCBoYXMgYSBicm9rZW4gYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFycmF5cyBvZlxuICogICAgIGluY29ycmVjdCBsZW5ndGggaW4gc29tZSBzaXR1YXRpb25zLlxuXG4gKiBXZSBkZXRlY3QgdGhlc2UgYnVnZ3kgYnJvd3NlcnMgYW5kIHNldCBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgIHRvIGBmYWxzZWAgc28gdGhleVxuICogZ2V0IHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHNsb3dlciBidXQgYmVoYXZlcyBjb3JyZWN0bHkuXG4gKi9cbkJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUID0gZ2xvYmFsLlRZUEVEX0FSUkFZX1NVUFBPUlQgIT09IHVuZGVmaW5lZFxuICA/IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gIDogdHlwZWRBcnJheVN1cHBvcnQoKVxuXG4vKlxuICogRXhwb3J0IGtNYXhMZW5ndGggYWZ0ZXIgdHlwZWQgYXJyYXkgc3VwcG9ydCBpcyBkZXRlcm1pbmVkLlxuICovXG5leHBvcnRzLmtNYXhMZW5ndGggPSBrTWF4TGVuZ3RoKClcblxuZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQgKCkge1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheSgxKVxuICAgIGFyci5fX3Byb3RvX18gPSB7X19wcm90b19fOiBVaW50OEFycmF5LnByb3RvdHlwZSwgZm9vOiBmdW5jdGlvbiAoKSB7IHJldHVybiA0MiB9fVxuICAgIHJldHVybiBhcnIuZm9vKCkgPT09IDQyICYmIC8vIHR5cGVkIGFycmF5IGluc3RhbmNlcyBjYW4gYmUgYXVnbWVudGVkXG4gICAgICAgIHR5cGVvZiBhcnIuc3ViYXJyYXkgPT09ICdmdW5jdGlvbicgJiYgLy8gY2hyb21lIDktMTAgbGFjayBgc3ViYXJyYXlgXG4gICAgICAgIGFyci5zdWJhcnJheSgxLCAxKS5ieXRlTGVuZ3RoID09PSAwIC8vIGllMTAgaGFzIGJyb2tlbiBgc3ViYXJyYXlgXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBrTWF4TGVuZ3RoICgpIHtcbiAgcmV0dXJuIEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gICAgPyAweDdmZmZmZmZmXG4gICAgOiAweDNmZmZmZmZmXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAodGhhdCwgbGVuZ3RoKSB7XG4gIGlmIChrTWF4TGVuZ3RoKCkgPCBsZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgnKVxuICB9XG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIHRoYXQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gICAgdGhhdC5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbGJhY2s6IFJldHVybiBhbiBvYmplY3QgaW5zdGFuY2Ugb2YgdGhlIEJ1ZmZlciBjbGFzc1xuICAgIGlmICh0aGF0ID09PSBudWxsKSB7XG4gICAgICB0aGF0ID0gbmV3IEJ1ZmZlcihsZW5ndGgpXG4gICAgfVxuICAgIHRoYXQubGVuZ3RoID0gbGVuZ3RoXG4gIH1cblxuICByZXR1cm4gdGhhdFxufVxuXG4vKipcbiAqIFRoZSBCdWZmZXIgY29uc3RydWN0b3IgcmV0dXJucyBpbnN0YW5jZXMgb2YgYFVpbnQ4QXJyYXlgIHRoYXQgaGF2ZSB0aGVpclxuICogcHJvdG90eXBlIGNoYW5nZWQgdG8gYEJ1ZmZlci5wcm90b3R5cGVgLiBGdXJ0aGVybW9yZSwgYEJ1ZmZlcmAgaXMgYSBzdWJjbGFzcyBvZlxuICogYFVpbnQ4QXJyYXlgLCBzbyB0aGUgcmV0dXJuZWQgaW5zdGFuY2VzIHdpbGwgaGF2ZSBhbGwgdGhlIG5vZGUgYEJ1ZmZlcmAgbWV0aG9kc1xuICogYW5kIHRoZSBgVWludDhBcnJheWAgbWV0aG9kcy4gU3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd29ya3MgYXMgZXhwZWN0ZWQgLS0gaXRcbiAqIHJldHVybnMgYSBzaW5nbGUgb2N0ZXQuXG4gKlxuICogVGhlIGBVaW50OEFycmF5YCBwcm90b3R5cGUgcmVtYWlucyB1bm1vZGlmaWVkLlxuICovXG5cbmZ1bmN0aW9uIEJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJiAhKHRoaXMgaW5zdGFuY2VvZiBCdWZmZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICAvLyBDb21tb24gY2FzZS5cbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZ09yT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhbGxvY1Vuc2FmZSh0aGlzLCBhcmcpXG4gIH1cbiAgcmV0dXJuIGZyb20odGhpcywgYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvblxuXG4vLyBUT0RPOiBMZWdhY3ksIG5vdCBuZWVkZWQgYW55bW9yZS4gUmVtb3ZlIGluIG5leHQgbWFqb3IgdmVyc2lvbi5cbkJ1ZmZlci5fYXVnbWVudCA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgYXJyLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiBmcm9tICh0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmcm9tU3RyaW5nKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0KVxuICB9XG5cbiAgcmV0dXJuIGZyb21PYmplY3QodGhhdCwgdmFsdWUpXG59XG5cbi8qKlxuICogRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gQnVmZmVyKGFyZywgZW5jb2RpbmcpIGJ1dCB0aHJvd3MgYSBUeXBlRXJyb3JcbiAqIGlmIHZhbHVlIGlzIGEgbnVtYmVyLlxuICogQnVmZmVyLmZyb20oc3RyWywgZW5jb2RpbmddKVxuICogQnVmZmVyLmZyb20oYXJyYXkpXG4gKiBCdWZmZXIuZnJvbShidWZmZXIpXG4gKiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAqKi9cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGZyb20obnVsbCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gIEJ1ZmZlci5wcm90b3R5cGUuX19wcm90b19fID0gVWludDhBcnJheS5wcm90b3R5cGVcbiAgQnVmZmVyLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXlcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5zcGVjaWVzICYmXG4gICAgICBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdID09PSBCdWZmZXIpIHtcbiAgICAvLyBGaXggc3ViYXJyYXkoKSBpbiBFUzIwMTYuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC85N1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIsIFN5bWJvbC5zcGVjaWVzLCB7XG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0U2l6ZSAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH0gZWxzZSBpZiAoc2l6ZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFsbG9jICh0aGF0LCBzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIGlmIChzaXplIDw9IDApIHtcbiAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpXG4gIH1cbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9ubHkgcGF5IGF0dGVudGlvbiB0byBlbmNvZGluZyBpZiBpdCdzIGEgc3RyaW5nLiBUaGlzXG4gICAgLy8gcHJldmVudHMgYWNjaWRlbnRhbGx5IHNlbmRpbmcgaW4gYSBudW1iZXIgdGhhdCB3b3VsZFxuICAgIC8vIGJlIGludGVycHJldHRlZCBhcyBhIHN0YXJ0IG9mZnNldC5cbiAgICByZXR1cm4gdHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJ1xuICAgICAgPyBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSkuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICAgIDogY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpLmZpbGwoZmlsbClcbiAgfVxuICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBmaWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogYWxsb2Moc2l6ZVssIGZpbGxbLCBlbmNvZGluZ11dKVxuICoqL1xuQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIHJldHVybiBhbGxvYyhudWxsLCBzaXplLCBmaWxsLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gYWxsb2NVbnNhZmUgKHRoYXQsIHNpemUpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUgPCAwID8gMCA6IGNoZWNrZWQoc2l6ZSkgfCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyArK2kpIHtcbiAgICAgIHRoYXRbaV0gPSAwXG4gICAgfVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqICovXG5CdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUobnVsbCwgc2l6ZSlcbn1cbi8qKlxuICogRXF1aXZhbGVudCB0byBTbG93QnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUobnVsbCwgc2l6ZSlcbn1cblxuZnVuY3Rpb24gZnJvbVN0cmluZyAodGhhdCwgc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJyB8fCBlbmNvZGluZyA9PT0gJycpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImVuY29kaW5nXCIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpXG4gIH1cblxuICB2YXIgbGVuZ3RoID0gYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKSB8IDBcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG5cbiAgdmFyIGFjdHVhbCA9IHRoYXQud3JpdGUoc3RyaW5nLCBlbmNvZGluZylcblxuICBpZiAoYWN0dWFsICE9PSBsZW5ndGgpIHtcbiAgICAvLyBXcml0aW5nIGEgaGV4IHN0cmluZywgZm9yIGV4YW1wbGUsIHRoYXQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIHdpbGxcbiAgICAvLyBjYXVzZSBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCBpbnZhbGlkIGNoYXJhY3RlciB0byBiZSBpZ25vcmVkLiAoZS5nLlxuICAgIC8vICdhYnh4Y2QnIHdpbGwgYmUgdHJlYXRlZCBhcyAnYWInKVxuICAgIHRoYXQgPSB0aGF0LnNsaWNlKDAsIGFjdHVhbClcbiAgfVxuXG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UgKHRoYXQsIGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGggPCAwID8gMCA6IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0aGF0W2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXIgKHRoYXQsIGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgYXJyYXkuYnl0ZUxlbmd0aCAvLyB0aGlzIHRocm93cyBpZiBgYXJyYXlgIGlzIG5vdCBhIHZhbGlkIEFycmF5QnVmZmVyXG5cbiAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ29mZnNldFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCArIChsZW5ndGggfHwgMCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnbGVuZ3RoXFwnIGlzIG91dCBvZiBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGJ5dGVPZmZzZXQgPT09IHVuZGVmaW5lZCAmJiBsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIHRoYXQgPSBhcnJheVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICB0aGF0ID0gZnJvbUFycmF5TGlrZSh0aGF0LCBhcnJheSlcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tT2JqZWN0ICh0aGF0LCBvYmopIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihvYmopKSB7XG4gICAgdmFyIGxlbiA9IGNoZWNrZWQob2JqLmxlbmd0aCkgfCAwXG4gICAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW4pXG5cbiAgICBpZiAodGhhdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGF0XG4gICAgfVxuXG4gICAgb2JqLmNvcHkodGhhdCwgMCwgMCwgbGVuKVxuICAgIHJldHVybiB0aGF0XG4gIH1cblxuICBpZiAob2JqKSB7XG4gICAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIG9iai5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgfHwgJ2xlbmd0aCcgaW4gb2JqKSB7XG4gICAgICBpZiAodHlwZW9mIG9iai5sZW5ndGggIT09ICdudW1iZXInIHx8IGlzbmFuKG9iai5sZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIodGhhdCwgMClcbiAgICAgIH1cbiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKHRoYXQsIG9iailcbiAgICB9XG5cbiAgICBpZiAob2JqLnR5cGUgPT09ICdCdWZmZXInICYmIGlzQXJyYXkob2JqLmRhdGEpKSB7XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmouZGF0YSlcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuJylcbn1cblxuZnVuY3Rpb24gY2hlY2tlZCAobGVuZ3RoKSB7XG4gIC8vIE5vdGU6IGNhbm5vdCB1c2UgYGxlbmd0aCA8IGtNYXhMZW5ndGgoKWAgaGVyZSBiZWNhdXNlIHRoYXQgZmFpbHMgd2hlblxuICAvLyBsZW5ndGggaXMgTmFOICh3aGljaCBpcyBvdGhlcndpc2UgY29lcmNlZCB0byB6ZXJvLilcbiAgaWYgKGxlbmd0aCA+PSBrTWF4TGVuZ3RoKCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZTogMHgnICsga01heExlbmd0aCgpLnRvU3RyaW5nKDE2KSArICcgYnl0ZXMnKVxuICB9XG4gIHJldHVybiBsZW5ndGggfCAwXG59XG5cbmZ1bmN0aW9uIFNsb3dCdWZmZXIgKGxlbmd0aCkge1xuICBpZiAoK2xlbmd0aCAhPSBsZW5ndGgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXFcbiAgICBsZW5ndGggPSAwXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5hbGxvYygrbGVuZ3RoKVxufVxuXG5CdWZmZXIuaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlciAoYikge1xuICByZXR1cm4gISEoYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyKVxufVxuXG5CdWZmZXIuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYSkgfHwgIUJ1ZmZlci5pc0J1ZmZlcihiKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGEgPT09IGIpIHJldHVybiAwXG5cbiAgdmFyIHggPSBhLmxlbmd0aFxuICB2YXIgeSA9IGIubGVuZ3RoXG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV1cbiAgICAgIHkgPSBiW2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICBzd2l0Y2ggKFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICd1Y3MyJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuIHRydWVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuQnVmZmVyLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdCAobGlzdCwgbGVuZ3RoKSB7XG4gIGlmICghaXNBcnJheShsaXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gIH1cblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApXG4gIH1cblxuICB2YXIgaVxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGxlbmd0aCArPSBsaXN0W2ldLmxlbmd0aFxuICAgIH1cbiAgfVxuXG4gIHZhciBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuZ3RoKVxuICB2YXIgcG9zID0gMFxuICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgIHZhciBidWYgPSBsaXN0W2ldXG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgICB9XG4gICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgcG9zICs9IGJ1Zi5sZW5ndGhcbiAgfVxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihzdHJpbmcpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5sZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3ID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAoQXJyYXlCdWZmZXIuaXNWaWV3KHN0cmluZykgfHwgc3RyaW5nIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmdcbiAgfVxuXG4gIHZhciBsZW4gPSBzdHJpbmcubGVuZ3RoXG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwXG5cbiAgLy8gVXNlIGEgZm9yIGxvb3AgdG8gYXZvaWQgcmVjdXJzaW9uXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxlblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gbGVuICogMlxuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGxlbiA+Pj4gMVxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoIC8vIGFzc3VtZSB1dGY4XG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcblxuZnVuY3Rpb24gc2xvd1RvU3RyaW5nIChlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuXG4gIC8vIE5vIG5lZWQgdG8gdmVyaWZ5IHRoYXQgXCJ0aGlzLmxlbmd0aCA8PSBNQVhfVUlOVDMyXCIgc2luY2UgaXQncyBhIHJlYWQtb25seVxuICAvLyBwcm9wZXJ0eSBvZiBhIHR5cGVkIGFycmF5LlxuXG4gIC8vIFRoaXMgYmVoYXZlcyBuZWl0aGVyIGxpa2UgU3RyaW5nIG5vciBVaW50OEFycmF5IGluIHRoYXQgd2Ugc2V0IHN0YXJ0L2VuZFxuICAvLyB0byB0aGVpciB1cHBlci9sb3dlciBib3VuZHMgaWYgdGhlIHZhbHVlIHBhc3NlZCBpcyBvdXQgb2YgcmFuZ2UuXG4gIC8vIHVuZGVmaW5lZCBpcyBoYW5kbGVkIHNwZWNpYWxseSBhcyBwZXIgRUNNQS0yNjIgNnRoIEVkaXRpb24sXG4gIC8vIFNlY3Rpb24gMTMuMy4zLjcgUnVudGltZSBTZW1hbnRpY3M6IEtleWVkQmluZGluZ0luaXRpYWxpemF0aW9uLlxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCB8fCBzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICAvLyBSZXR1cm4gZWFybHkgaWYgc3RhcnQgPiB0aGlzLmxlbmd0aC4gRG9uZSBoZXJlIHRvIHByZXZlbnQgcG90ZW50aWFsIHVpbnQzMlxuICAvLyBjb2VyY2lvbiBmYWlsIGJlbG93LlxuICBpZiAoc3RhcnQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChlbmQgPD0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gRm9yY2UgY29lcnNpb24gdG8gdWludDMyLiBUaGlzIHdpbGwgYWxzbyBjb2VyY2UgZmFsc2V5L05hTiB2YWx1ZXMgdG8gMC5cbiAgZW5kID4+Pj0gMFxuICBzdGFydCA+Pj49IDBcblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhlIHByb3BlcnR5IGlzIHVzZWQgYnkgYEJ1ZmZlci5pc0J1ZmZlcmAgYW5kIGBpcy1idWZmZXJgIChpbiBTYWZhcmkgNS03KSB0byBkZXRlY3Rcbi8vIEJ1ZmZlciBpbnN0YW5jZXMuXG5CdWZmZXIucHJvdG90eXBlLl9pc0J1ZmZlciA9IHRydWVcblxuZnVuY3Rpb24gc3dhcCAoYiwgbiwgbSkge1xuICB2YXIgaSA9IGJbbl1cbiAgYltuXSA9IGJbbV1cbiAgYlttXSA9IGlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDIgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAxKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDMyID0gZnVuY3Rpb24gc3dhcDMyICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA0ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgMilcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXA2NCA9IGZ1bmN0aW9uIHN3YXA2NCAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgOCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDcpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDYpXG4gICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpXG4gICAgc3dhcCh0aGlzLCBpICsgMywgaSArIDQpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoIHwgMFxuICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gJydcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1dGY4U2xpY2UodGhpcywgMCwgbGVuZ3RoKVxuICByZXR1cm4gc2xvd1RvU3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMgKGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICBpZiAodGhpcyA9PT0gYikgcmV0dXJuIHRydWVcbiAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKHRoaXMsIGIpID09PSAwXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICB2YXIgc3RyID0gJydcbiAgdmFyIG1heCA9IGV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVNcbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgIHN0ciA9IHRoaXMudG9TdHJpbmcoJ2hleCcsIDAsIG1heCkubWF0Y2goLy57Mn0vZykuam9pbignICcpXG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbWF4KSBzdHIgKz0gJyAuLi4gJ1xuICB9XG4gIHJldHVybiAnPEJ1ZmZlciAnICsgc3RyICsgJz4nXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKHRhcmdldCwgc3RhcnQsIGVuZCwgdGhpc1N0YXJ0LCB0aGlzRW5kKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gdGFyZ2V0ID8gdGFyZ2V0Lmxlbmd0aCA6IDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzU3RhcnQgPSAwXG4gIH1cbiAgaWYgKHRoaXNFbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPiB0YXJnZXQubGVuZ3RoIHx8IHRoaXNTdGFydCA8IDAgfHwgdGhpc0VuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQgJiYgc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQpIHtcbiAgICByZXR1cm4gLTFcbiAgfVxuICBpZiAoc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuXG4gIHN0YXJ0ID4+Pj0gMFxuICBlbmQgPj4+PSAwXG4gIHRoaXNTdGFydCA+Pj49IDBcbiAgdGhpc0VuZCA+Pj49IDBcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0KSByZXR1cm4gMFxuXG4gIHZhciB4ID0gdGhpc0VuZCAtIHRoaXNTdGFydFxuICB2YXIgeSA9IGVuZCAtIHN0YXJ0XG4gIHZhciBsZW4gPSBNYXRoLm1pbih4LCB5KVxuXG4gIHZhciB0aGlzQ29weSA9IHRoaXMuc2xpY2UodGhpc1N0YXJ0LCB0aGlzRW5kKVxuICB2YXIgdGFyZ2V0Q29weSA9IHRhcmdldC5zbGljZShzdGFydCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpc0NvcHlbaV0gIT09IHRhcmdldENvcHlbaV0pIHtcbiAgICAgIHggPSB0aGlzQ29weVtpXVxuICAgICAgeSA9IHRhcmdldENvcHlbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG4vLyBGaW5kcyBlaXRoZXIgdGhlIGZpcnN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA+PSBgYnl0ZU9mZnNldGAsXG4vLyBPUiB0aGUgbGFzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPD0gYGJ5dGVPZmZzZXRgLlxuLy9cbi8vIEFyZ3VtZW50czpcbi8vIC0gYnVmZmVyIC0gYSBCdWZmZXIgdG8gc2VhcmNoXG4vLyAtIHZhbCAtIGEgc3RyaW5nLCBCdWZmZXIsIG9yIG51bWJlclxuLy8gLSBieXRlT2Zmc2V0IC0gYW4gaW5kZXggaW50byBgYnVmZmVyYDsgd2lsbCBiZSBjbGFtcGVkIHRvIGFuIGludDMyXG4vLyAtIGVuY29kaW5nIC0gYW4gb3B0aW9uYWwgZW5jb2RpbmcsIHJlbGV2YW50IGlzIHZhbCBpcyBhIHN0cmluZ1xuLy8gLSBkaXIgLSB0cnVlIGZvciBpbmRleE9mLCBmYWxzZSBmb3IgbGFzdEluZGV4T2ZcbmZ1bmN0aW9uIGJpZGlyZWN0aW9uYWxJbmRleE9mIChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICAvLyBFbXB0eSBidWZmZXIgbWVhbnMgbm8gbWF0Y2hcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHJldHVybiAtMVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0XG4gIGlmICh0eXBlb2YgYnl0ZU9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGJ5dGVPZmZzZXRcbiAgICBieXRlT2Zmc2V0ID0gMFxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPiAweDdmZmZmZmZmKSB7XG4gICAgYnl0ZU9mZnNldCA9IDB4N2ZmZmZmZmZcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTB4ODAwMDAwMDApIHtcbiAgICBieXRlT2Zmc2V0ID0gLTB4ODAwMDAwMDBcbiAgfVxuICBieXRlT2Zmc2V0ID0gK2J5dGVPZmZzZXQgIC8vIENvZXJjZSB0byBOdW1iZXIuXG4gIGlmIChpc05hTihieXRlT2Zmc2V0KSkge1xuICAgIC8vIGJ5dGVPZmZzZXQ6IGl0IGl0J3MgdW5kZWZpbmVkLCBudWxsLCBOYU4sIFwiZm9vXCIsIGV0Yywgc2VhcmNoIHdob2xlIGJ1ZmZlclxuICAgIGJ5dGVPZmZzZXQgPSBkaXIgPyAwIDogKGJ1ZmZlci5sZW5ndGggLSAxKVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXQ6IG5lZ2F0aXZlIG9mZnNldHMgc3RhcnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBidWZmZXJcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwKSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCArIGJ5dGVPZmZzZXRcbiAgaWYgKGJ5dGVPZmZzZXQgPj0gYnVmZmVyLmxlbmd0aCkge1xuICAgIGlmIChkaXIpIHJldHVybiAtMVxuICAgIGVsc2UgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggLSAxXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IDApIHtcbiAgICBpZiAoZGlyKSBieXRlT2Zmc2V0ID0gMFxuICAgIGVsc2UgcmV0dXJuIC0xXG4gIH1cblxuICAvLyBOb3JtYWxpemUgdmFsXG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIHZhbCA9IEJ1ZmZlci5mcm9tKHZhbCwgZW5jb2RpbmcpXG4gIH1cblxuICAvLyBGaW5hbGx5LCBzZWFyY2ggZWl0aGVyIGluZGV4T2YgKGlmIGRpciBpcyB0cnVlKSBvciBsYXN0SW5kZXhPZlxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbCkpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IGxvb2tpbmcgZm9yIGVtcHR5IHN0cmluZy9idWZmZXIgYWx3YXlzIGZhaWxzXG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMHhGRiAvLyBTZWFyY2ggZm9yIGEgYnl0ZSB2YWx1ZSBbMC0yNTVdXG4gICAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmXG4gICAgICAgIHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAoZGlyKSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIFsgdmFsIF0sIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXInKVxufVxuXG5mdW5jdGlvbiBhcnJheUluZGV4T2YgKGFyciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIHZhciBpbmRleFNpemUgPSAxXG4gIHZhciBhcnJMZW5ndGggPSBhcnIubGVuZ3RoXG4gIHZhciB2YWxMZW5ndGggPSB2YWwubGVuZ3RoXG5cbiAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgIGlmIChlbmNvZGluZyA9PT0gJ3VjczInIHx8IGVuY29kaW5nID09PSAndWNzLTInIHx8XG4gICAgICAgIGVuY29kaW5nID09PSAndXRmMTZsZScgfHwgZW5jb2RpbmcgPT09ICd1dGYtMTZsZScpIHtcbiAgICAgIGlmIChhcnIubGVuZ3RoIDwgMiB8fCB2YWwubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH1cbiAgICAgIGluZGV4U2l6ZSA9IDJcbiAgICAgIGFyckxlbmd0aCAvPSAyXG4gICAgICB2YWxMZW5ndGggLz0gMlxuICAgICAgYnl0ZU9mZnNldCAvPSAyXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZCAoYnVmLCBpKSB7XG4gICAgaWYgKGluZGV4U2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIGJ1ZltpXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRShpICogaW5kZXhTaXplKVxuICAgIH1cbiAgfVxuXG4gIHZhciBpXG4gIGlmIChkaXIpIHtcbiAgICB2YXIgZm91bmRJbmRleCA9IC0xXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA8IGFyckxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVhZChhcnIsIGkpID09PSByZWFkKHZhbCwgZm91bmRJbmRleCA9PT0gLTEgPyAwIDogaSAtIGZvdW5kSW5kZXgpKSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkgZm91bmRJbmRleCA9IGlcbiAgICAgICAgaWYgKGkgLSBmb3VuZEluZGV4ICsgMSA9PT0gdmFsTGVuZ3RoKSByZXR1cm4gZm91bmRJbmRleCAqIGluZGV4U2l6ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggIT09IC0xKSBpIC09IGkgLSBmb3VuZEluZGV4XG4gICAgICAgIGZvdW5kSW5kZXggPSAtMVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYnl0ZU9mZnNldCArIHZhbExlbmd0aCA+IGFyckxlbmd0aCkgYnl0ZU9mZnNldCA9IGFyckxlbmd0aCAtIHZhbExlbmd0aFxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgZm91bmQgPSB0cnVlXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbExlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChyZWFkKGFyciwgaSArIGopICE9PSByZWFkKHZhbCwgaikpIHtcbiAgICAgICAgICBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gaVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRoaXMuaW5kZXhPZih2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSAhPT0gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgdHJ1ZSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBmYWxzZSlcbn1cblxuZnVuY3Rpb24gaGV4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwXG4gIHZhciByZW1haW5pbmcgPSBidWYubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aClcbiAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7XG4gICAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgICB9XG4gIH1cblxuICAvLyBtdXN0IGJlIGFuIGV2ZW4gbnVtYmVyIG9mIGRpZ2l0c1xuICB2YXIgc3RyTGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAoc3RyTGVuICUgMiAhPT0gMCkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBoZXggc3RyaW5nJylcblxuICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikge1xuICAgIGxlbmd0aCA9IHN0ckxlbiAvIDJcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlSW50KHN0cmluZy5zdWJzdHIoaSAqIDIsIDIpLCAxNilcbiAgICBpZiAoaXNOYU4ocGFyc2VkKSkgcmV0dXJuIGlcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSBwYXJzZWRcbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiB1dGY4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBhc2NpaVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGxhdGluMVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGFzY2lpV3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoIHwgMFxuICAgICAgaWYgKGVuY29kaW5nID09PSB1bmRlZmluZWQpIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kaW5nID0gbGVuZ3RoXG4gICAgICBsZW5ndGggPSB1bmRlZmluZWRcbiAgICB9XG4gIC8vIGxlZ2FjeSB3cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXQsIGxlbmd0aCkgLSByZW1vdmUgaW4gdjAuMTNcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQnXG4gICAgKVxuICB9XG5cbiAgdmFyIHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBsZW5ndGggPiByZW1haW5pbmcpIGxlbmd0aCA9IHJlbWFpbmluZ1xuXG4gIGlmICgoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpIHx8IG9mZnNldCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gV2FybmluZzogbWF4TGVuZ3RoIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gYmFzZTY0V3JpdGVcbiAgICAgICAgcmV0dXJuIGJhc2U2NFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1Y3MyV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OICgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQnVmZmVyJyxcbiAgICBkYXRhOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnIgfHwgdGhpcywgMClcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlNjRTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gdXRmOFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuICB2YXIgcmVzID0gW11cblxuICB2YXIgaSA9IHN0YXJ0XG4gIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgdmFyIGZpcnN0Qnl0ZSA9IGJ1ZltpXVxuICAgIHZhciBjb2RlUG9pbnQgPSBudWxsXG4gICAgdmFyIGJ5dGVzUGVyU2VxdWVuY2UgPSAoZmlyc3RCeXRlID4gMHhFRikgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKSA/IDNcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpID8gMlxuICAgICAgOiAxXG5cbiAgICBpZiAoaSArIGJ5dGVzUGVyU2VxdWVuY2UgPD0gZW5kKSB7XG4gICAgICB2YXIgc2Vjb25kQnl0ZSwgdGhpcmRCeXRlLCBmb3VydGhCeXRlLCB0ZW1wQ29kZVBvaW50XG5cbiAgICAgIHN3aXRjaCAoYnl0ZXNQZXJTZXF1ZW5jZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKGZpcnN0Qnl0ZSA8IDB4ODApIHtcbiAgICAgICAgICAgIGNvZGVQb2ludCA9IGZpcnN0Qnl0ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweDFGKSA8PCAweDYgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0YpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHhDIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAodGhpcmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3RkYgJiYgKHRlbXBDb2RlUG9pbnQgPCAweEQ4MDAgfHwgdGVtcENvZGVQb2ludCA+IDB4REZGRikpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgZm91cnRoQnl0ZSA9IGJ1ZltpICsgM11cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKGZvdXJ0aEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4MTIgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4QyB8ICh0aGlyZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAoZm91cnRoQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4RkZGRiAmJiB0ZW1wQ29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29kZVBvaW50ID09PSBudWxsKSB7XG4gICAgICAvLyB3ZSBkaWQgbm90IGdlbmVyYXRlIGEgdmFsaWQgY29kZVBvaW50IHNvIGluc2VydCBhXG4gICAgICAvLyByZXBsYWNlbWVudCBjaGFyIChVK0ZGRkQpIGFuZCBhZHZhbmNlIG9ubHkgMSBieXRlXG4gICAgICBjb2RlUG9pbnQgPSAweEZGRkRcbiAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPiAweEZGRkYpIHtcbiAgICAgIC8vIGVuY29kZSB0byB1dGYxNiAoc3Vycm9nYXRlIHBhaXIgZGFuY2UpXG4gICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMFxuICAgICAgcmVzLnB1c2goY29kZVBvaW50ID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKVxuICAgICAgY29kZVBvaW50ID0gMHhEQzAwIHwgY29kZVBvaW50ICYgMHgzRkZcbiAgICB9XG5cbiAgICByZXMucHVzaChjb2RlUG9pbnQpXG4gICAgaSArPSBieXRlc1BlclNlcXVlbmNlXG4gIH1cblxuICByZXR1cm4gZGVjb2RlQ29kZVBvaW50c0FycmF5KHJlcylcbn1cblxuLy8gQmFzZWQgb24gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjI3NDcyNzIvNjgwNzQyLCB0aGUgYnJvd3NlciB3aXRoXG4vLyB0aGUgbG93ZXN0IGxpbWl0IGlzIENocm9tZSwgd2l0aCAweDEwMDAwIGFyZ3MuXG4vLyBXZSBnbyAxIG1hZ25pdHVkZSBsZXNzLCBmb3Igc2FmZXR5XG52YXIgTUFYX0FSR1VNRU5UU19MRU5HVEggPSAweDEwMDBcblxuZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5IChjb2RlUG9pbnRzKSB7XG4gIHZhciBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aFxuICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjb2RlUG9pbnRzKSAvLyBhdm9pZCBleHRyYSBzbGljZSgpXG4gIH1cblxuICAvLyBEZWNvZGUgaW4gY2h1bmtzIHRvIGF2b2lkIFwiY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIuXG4gIHZhciByZXMgPSAnJ1xuICB2YXIgaSA9IDBcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcbiAgICAgIFN0cmluZyxcbiAgICAgIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDB4N0YpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBsYXRpbjFTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSBidWYubGVuZ3RoXG5cbiAgaWYgKCFzdGFydCB8fCBzdGFydCA8IDApIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCB8fCBlbmQgPCAwIHx8IGVuZCA+IGxlbikgZW5kID0gbGVuXG5cbiAgdmFyIG91dCA9ICcnXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgb3V0ICs9IHRvSGV4KGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICB2YXIgcmVzID0gJydcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgYnl0ZXNbaSArIDFdICogMjU2KVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlIChzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW5cbiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMCkgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIHZhciBuZXdCdWZcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgbmV3QnVmID0gdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKVxuICAgIG5ld0J1Zi5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgdmFyIHNsaWNlTGVuID0gZW5kIC0gc3RhcnRcbiAgICBuZXdCdWYgPSBuZXcgQnVmZmVyKHNsaWNlTGVuLCB1bmRlZmluZWQpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGljZUxlbjsgKytpKSB7XG4gICAgICBuZXdCdWZbaV0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3QnVmXG59XG5cbi8qXG4gKiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJ1ZmZlciBpc24ndCB0cnlpbmcgdG8gd3JpdGUgb3V0IG9mIGJvdW5kcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tPZmZzZXQgKG9mZnNldCwgZXh0LCBsZW5ndGgpIHtcbiAgaWYgKChvZmZzZXQgJSAxKSAhPT0gMCB8fCBvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb2Zmc2V0IGlzIG5vdCB1aW50JylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50TEUgPSBmdW5jdGlvbiByZWFkVUludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50QkUgPSBmdW5jdGlvbiByZWFkVUludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuICB9XG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXVxuICB2YXIgbXVsID0gMVxuICB3aGlsZSAoYnl0ZUxlbmd0aCA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4ID0gZnVuY3Rpb24gcmVhZFVJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkJFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDgpIHwgdGhpc1tvZmZzZXQgKyAxXVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSAqIDB4MTAwMDAwMCkgK1xuICAgICgodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICB0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRMRSA9IGZ1bmN0aW9uIHJlYWRJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aFxuICB2YXIgbXVsID0gMVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldXG4gIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgaWYgKCEodGhpc1tvZmZzZXRdICYgMHg4MCkpIHJldHVybiAodGhpc1tvZmZzZXRdKVxuICByZXR1cm4gKCgweGZmIC0gdGhpc1tvZmZzZXRdICsgMSkgKiAtMSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiByZWFkSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8ICh0aGlzW29mZnNldF0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDNdIDw8IDI0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCAyNCkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gcmVhZEZsb2F0QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlTEUgPSBmdW5jdGlvbiByZWFkRG91YmxlTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpXG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludExFID0gZnVuY3Rpb24gd3JpdGVVSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludEJFID0gZnVuY3Rpb24gd3JpdGVVSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4ZmYsIDApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MTYgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmICsgdmFsdWUgKyAxXG4gIGZvciAodmFyIGkgPSAwLCBqID0gTWF0aC5taW4oYnVmLmxlbmd0aCAtIG9mZnNldCwgMik7IGkgPCBqOyArK2kpIHtcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSAodmFsdWUgJiAoMHhmZiA8PCAoOCAqIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpKSkpID4+PlxuICAgICAgKGxpdHRsZUVuZGlhbiA/IGkgOiAxIC0gaSkgKiA4XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MzIgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDQpOyBpIDwgajsgKytpKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlID4+PiAobGl0dGxlRW5kaWFuID8gaSA6IDMgLSBpKSAqIDgpICYgMHhmZlxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IDBcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpIC0gMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpICsgMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiB3cml0ZUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIGNoZWNrSUVFRTc1NCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDQsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDgsIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4LCAtMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgNTIsIDgpXG4gIHJldHVybiBvZmZzZXQgKyA4XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVMRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUJFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuLy8gY29weSh0YXJnZXRCdWZmZXIsIHRhcmdldFN0YXJ0PTAsIHNvdXJjZVN0YXJ0PTAsIHNvdXJjZUVuZD1idWZmZXIubGVuZ3RoKVxuQnVmZmVyLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gY29weSAodGFyZ2V0LCB0YXJnZXRTdGFydCwgc3RhcnQsIGVuZCkge1xuICBpZiAoIXN0YXJ0KSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgJiYgZW5kICE9PSAwKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0U3RhcnQgPj0gdGFyZ2V0Lmxlbmd0aCkgdGFyZ2V0U3RhcnQgPSB0YXJnZXQubGVuZ3RoXG4gIGlmICghdGFyZ2V0U3RhcnQpIHRhcmdldFN0YXJ0ID0gMFxuICBpZiAoZW5kID4gMCAmJiBlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICAvLyBDb3B5IDAgYnl0ZXM7IHdlJ3JlIGRvbmVcbiAgaWYgKGVuZCA9PT0gc3RhcnQpIHJldHVybiAwXG4gIGlmICh0YXJnZXQubGVuZ3RoID09PSAwIHx8IHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIEZhdGFsIGVycm9yIGNvbmRpdGlvbnNcbiAgaWYgKHRhcmdldFN0YXJ0IDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgfVxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChlbmQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlRW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIC8vIEFyZSB3ZSBvb2I/XG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7XG4gICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnRcbiAgfVxuXG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydFxuICB2YXIgaVxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgc3RhcnQgPCB0YXJnZXRTdGFydCAmJiB0YXJnZXRTdGFydCA8IGVuZCkge1xuICAgIC8vIGRlc2NlbmRpbmcgY29weSBmcm9tIGVuZFxuICAgIGZvciAoaSA9IGxlbiAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIGlmIChsZW4gPCAxMDAwIHx8ICFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIGFzY2VuZGluZyBjb3B5IGZyb20gc3RhcnRcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy5zdWJhcnJheShzdGFydCwgc3RhcnQgKyBsZW4pLFxuICAgICAgdGFyZ2V0U3RhcnRcbiAgICApXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbi8vIFVzYWdlOlxuLy8gICAgYnVmZmVyLmZpbGwobnVtYmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChidWZmZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKHN0cmluZ1ssIG9mZnNldFssIGVuZF1dWywgZW5jb2RpbmddKVxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCAodmFsLCBzdGFydCwgZW5kLCBlbmNvZGluZykge1xuICAvLyBIYW5kbGUgc3RyaW5nIGNhc2VzOlxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBzdGFydFxuICAgICAgc3RhcnQgPSAwXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5kXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH1cbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdmFyIGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKVxuICAgICAgaWYgKGNvZGUgPCAyNTYpIHtcbiAgICAgICAgdmFsID0gY29kZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycgJiYgIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDI1NVxuICB9XG5cbiAgLy8gSW52YWxpZCByYW5nZXMgYXJlIG5vdCBzZXQgdG8gYSBkZWZhdWx0LCBzbyBjYW4gcmFuZ2UgY2hlY2sgZWFybHkuXG4gIGlmIChzdGFydCA8IDAgfHwgdGhpcy5sZW5ndGggPCBzdGFydCB8fCB0aGlzLmxlbmd0aCA8IGVuZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGFydCA9IHN0YXJ0ID4+PiAwXG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDBcblxuICBpZiAoIXZhbCkgdmFsID0gMFxuXG4gIHZhciBpXG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgIHRoaXNbaV0gPSB2YWxcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJ5dGVzID0gQnVmZmVyLmlzQnVmZmVyKHZhbClcbiAgICAgID8gdmFsXG4gICAgICA6IHV0ZjhUb0J5dGVzKG5ldyBCdWZmZXIodmFsLCBlbmNvZGluZykudG9TdHJpbmcoKSlcbiAgICB2YXIgbGVuID0gYnl0ZXMubGVuZ3RoXG4gICAgZm9yIChpID0gMDsgaSA8IGVuZCAtIHN0YXJ0OyArK2kpIHtcbiAgICAgIHRoaXNbaSArIHN0YXJ0XSA9IGJ5dGVzW2kgJSBsZW5dXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PVxuXG52YXIgSU5WQUxJRF9CQVNFNjRfUkUgPSAvW14rXFwvMC05QS1aYS16LV9dL2dcblxuZnVuY3Rpb24gYmFzZTY0Y2xlYW4gKHN0cikge1xuICAvLyBOb2RlIHN0cmlwcyBvdXQgaW52YWxpZCBjaGFyYWN0ZXJzIGxpa2UgXFxuIGFuZCBcXHQgZnJvbSB0aGUgc3RyaW5nLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgc3RyID0gc3RyaW5ndHJpbShzdHIpLnJlcGxhY2UoSU5WQUxJRF9CQVNFNjRfUkUsICcnKVxuICAvLyBOb2RlIGNvbnZlcnRzIHN0cmluZ3Mgd2l0aCBsZW5ndGggPCAyIHRvICcnXG4gIGlmIChzdHIubGVuZ3RoIDwgMikgcmV0dXJuICcnXG4gIC8vIE5vZGUgYWxsb3dzIGZvciBub24tcGFkZGVkIGJhc2U2NCBzdHJpbmdzIChtaXNzaW5nIHRyYWlsaW5nID09PSksIGJhc2U2NC1qcyBkb2VzIG5vdFxuICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICBzdHIgPSBzdHIgKyAnPSdcbiAgfVxuICByZXR1cm4gc3RyXG59XG5cbmZ1bmN0aW9uIHN0cmluZ3RyaW0gKHN0cikge1xuICBpZiAoc3RyLnRyaW0pIHJldHVybiBzdHIudHJpbSgpXG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpXG59XG5cbmZ1bmN0aW9uIHRvSGV4IChuKSB7XG4gIGlmIChuIDwgMTYpIHJldHVybiAnMCcgKyBuLnRvU3RyaW5nKDE2KVxuICByZXR1cm4gbi50b1N0cmluZygxNilcbn1cblxuZnVuY3Rpb24gdXRmOFRvQnl0ZXMgKHN0cmluZywgdW5pdHMpIHtcbiAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eVxuICB2YXIgY29kZVBvaW50XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICB2YXIgYnl0ZXMgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb2RlUG9pbnQgPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuXG4gICAgLy8gaXMgc3Vycm9nYXRlIGNvbXBvbmVudFxuICAgIGlmIChjb2RlUG9pbnQgPiAweEQ3RkYgJiYgY29kZVBvaW50IDwgMHhFMDAwKSB7XG4gICAgICAvLyBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCFsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAgIC8vIG5vIGxlYWQgeWV0XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPiAweERCRkYpIHtcbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHRyYWlsXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdW5wYWlyZWQgbGVhZFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyB2YWxpZCBsZWFkXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyIGxlYWRzIGluIGEgcm93XG4gICAgICBpZiAoY29kZVBvaW50IDwgMHhEQzAwKSB7XG4gICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDB4RDgwMCA8PCAxMCB8IGNvZGVQb2ludCAtIDB4REMwMCkgKyAweDEwMDAwXG4gICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAvLyB2YWxpZCBibXAgY2hhciwgYnV0IGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICB9XG5cbiAgICBsZWFkU3Vycm9nYXRlID0gbnVsbFxuXG4gICAgLy8gZW5jb2RlIHV0ZjhcbiAgICBpZiAoY29kZVBvaW50IDwgMHg4MCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4ODAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgfCAweEMwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAzKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDIHwgMHhFMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gNCkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4MTIgfCAweEYwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQnKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVRvQnl0ZXMgKHN0cikge1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyLCB1bml0cykge1xuICB2YXIgYywgaGksIGxvXG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCkgfHwgKGkgPj0gc3JjLmxlbmd0aCkpIGJyZWFrXG4gICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gaXNuYW4gKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSB2YWwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbn1cbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpO1xudmFyICRKU09OID0gY29yZS5KU09OIHx8IChjb3JlLkpTT04gPSB7IHN0cmluZ2lmeTogSlNPTi5zdHJpbmdpZnkgfSk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gIHJldHVybiAkSlNPTi5zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3VtZW50cyk7XG59O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmtleXMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdC5rZXlzO1xuIiwicmVxdWlyZSgnLi4vbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnByb21pc2UnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM3LnByb21pc2UuZmluYWxseScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczcucHJvbWlzZS50cnknKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vbW9kdWxlcy9fY29yZScpLlByb21pc2U7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5zeW1ib2wnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLlN5bWJvbDtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX3drcy1leHQnKS5mKCdpdGVyYXRvcicpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUsIGZvcmJpZGRlbkZpZWxkKSB7XG4gIGlmICghKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHx8IChmb3JiaWRkZW5GaWVsZCAhPT0gdW5kZWZpbmVkICYmIGZvcmJpZGRlbkZpZWxkIGluIGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihuYW1lICsgJzogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIGZhbHNlIC0+IEFycmF5I2luZGV4T2Zcbi8vIHRydWUgIC0+IEFycmF5I2luY2x1ZGVzXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICBpZiAoT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuIiwiLy8gZ2V0dGluZyB0YWcgZnJvbSAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQVJHID0gY29mKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCBULCBCO1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAoVCA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVEFHKSkgPT0gJ3N0cmluZycgPyBUXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBBUkcgPyBjb2YoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG59O1xuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuIiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNi4xMCcgfTtcbmlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCIvLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpO1xuIiwiLy8gYWxsIGVudW1lcmFibGUgb2JqZWN0IGtleXMsIGluY2x1ZGVzIHN5bWJvbHNcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgcmVzdWx0ID0gZ2V0S2V5cyhpdCk7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICBpZiAoZ2V0U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gZ2V0U3ltYm9scyhpdCk7XG4gICAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChzeW1ib2xzLmxlbmd0aCA+IGkpIGlmIChpc0VudW0uY2FsbChpdCwga2V5ID0gc3ltYm9sc1tpKytdKSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciAkZXhwb3J0ID0gZnVuY3Rpb24gKHR5cGUsIG5hbWUsIHNvdXJjZSkge1xuICB2YXIgSVNfRk9SQ0VEID0gdHlwZSAmICRleHBvcnQuRjtcbiAgdmFyIElTX0dMT0JBTCA9IHR5cGUgJiAkZXhwb3J0Lkc7XG4gIHZhciBJU19TVEFUSUMgPSB0eXBlICYgJGV4cG9ydC5TO1xuICB2YXIgSVNfUFJPVE8gPSB0eXBlICYgJGV4cG9ydC5QO1xuICB2YXIgSVNfQklORCA9IHR5cGUgJiAkZXhwb3J0LkI7XG4gIHZhciBJU19XUkFQID0gdHlwZSAmICRleHBvcnQuVztcbiAgdmFyIGV4cG9ydHMgPSBJU19HTE9CQUwgPyBjb3JlIDogY29yZVtuYW1lXSB8fCAoY29yZVtuYW1lXSA9IHt9KTtcbiAgdmFyIGV4cFByb3RvID0gZXhwb3J0c1tQUk9UT1RZUEVdO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIDogKGdsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXTtcbiAgdmFyIGtleSwgb3duLCBvdXQ7XG4gIGlmIChJU19HTE9CQUwpIHNvdXJjZSA9IG5hbWU7XG4gIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIG93biA9ICFJU19GT1JDRUQgJiYgdGFyZ2V0ICYmIHRhcmdldFtrZXldICE9PSB1bmRlZmluZWQ7XG4gICAgaWYgKG93biAmJiBoYXMoZXhwb3J0cywga2V5KSkgY29udGludWU7XG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBwYXNzZWRcbiAgICBvdXQgPSBvd24gPyB0YXJnZXRba2V5XSA6IHNvdXJjZVtrZXldO1xuICAgIC8vIHByZXZlbnQgZ2xvYmFsIHBvbGx1dGlvbiBmb3IgbmFtZXNwYWNlc1xuICAgIGV4cG9ydHNba2V5XSA9IElTX0dMT0JBTCAmJiB0eXBlb2YgdGFyZ2V0W2tleV0gIT0gJ2Z1bmN0aW9uJyA/IHNvdXJjZVtrZXldXG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICA6IElTX0JJTkQgJiYgb3duID8gY3R4KG91dCwgZ2xvYmFsKVxuICAgIC8vIHdyYXAgZ2xvYmFsIGNvbnN0cnVjdG9ycyBmb3IgcHJldmVudCBjaGFuZ2UgdGhlbSBpbiBsaWJyYXJ5XG4gICAgOiBJU19XUkFQICYmIHRhcmdldFtrZXldID09IG91dCA/IChmdW5jdGlvbiAoQykge1xuICAgICAgdmFyIEYgPSBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEMpIHtcbiAgICAgICAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBDKCk7XG4gICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgQyhhKTtcbiAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBDKGEsIGIpO1xuICAgICAgICAgIH0gcmV0dXJuIG5ldyBDKGEsIGIsIGMpO1xuICAgICAgICB9IHJldHVybiBDLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgICAgRltQUk9UT1RZUEVdID0gQ1tQUk9UT1RZUEVdO1xuICAgICAgcmV0dXJuIEY7XG4gICAgLy8gbWFrZSBzdGF0aWMgdmVyc2lvbnMgZm9yIHByb3RvdHlwZSBtZXRob2RzXG4gICAgfSkob3V0KSA6IElTX1BST1RPICYmIHR5cGVvZiBvdXQgPT0gJ2Z1bmN0aW9uJyA/IGN0eChGdW5jdGlvbi5jYWxsLCBvdXQpIDogb3V0O1xuICAgIC8vIGV4cG9ydCBwcm90byBtZXRob2RzIHRvIGNvcmUuJUNPTlNUUlVDVE9SJS5tZXRob2RzLiVOQU1FJVxuICAgIGlmIChJU19QUk9UTykge1xuICAgICAgKGV4cG9ydHMudmlydHVhbCB8fCAoZXhwb3J0cy52aXJ0dWFsID0ge30pKVtrZXldID0gb3V0O1xuICAgICAgLy8gZXhwb3J0IHByb3RvIG1ldGhvZHMgdG8gY29yZS4lQ09OU1RSVUNUT1IlLnByb3RvdHlwZS4lTkFNRSVcbiAgICAgIGlmICh0eXBlICYgJGV4cG9ydC5SICYmIGV4cFByb3RvICYmICFleHBQcm90b1trZXldKSBoaWRlKGV4cFByb3RvLCBrZXksIG91dCk7XG4gICAgfVxuICB9XG59O1xuLy8gdHlwZSBiaXRtYXBcbiRleHBvcnQuRiA9IDE7ICAgLy8gZm9yY2VkXG4kZXhwb3J0LkcgPSAyOyAgIC8vIGdsb2JhbFxuJGV4cG9ydC5TID0gNDsgICAvLyBzdGF0aWNcbiRleHBvcnQuUCA9IDg7ICAgLy8gcHJvdG9cbiRleHBvcnQuQiA9IDE2OyAgLy8gYmluZFxuJGV4cG9ydC5XID0gMzI7ICAvLyB3cmFwXG4kZXhwb3J0LlUgPSA2NDsgIC8vIHNhZmVcbiRleHBvcnQuUiA9IDEyODsgLy8gcmVhbCBwcm90byBtZXRob2QgZm9yIGBsaWJyYXJ5YFxubW9kdWxlLmV4cG9ydHMgPSAkZXhwb3J0O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBCUkVBSyA9IHt9O1xudmFyIFJFVFVSTiA9IHt9O1xudmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgZW50cmllcywgZm4sIHRoYXQsIElURVJBVE9SKSB7XG4gIHZhciBpdGVyRm4gPSBJVEVSQVRPUiA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXJhYmxlOyB9IDogZ2V0SXRlckZuKGl0ZXJhYmxlKTtcbiAgdmFyIGYgPSBjdHgoZm4sIHRoYXQsIGVudHJpZXMgPyAyIDogMSk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHN0ZXAsIGl0ZXJhdG9yLCByZXN1bHQ7XG4gIGlmICh0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdGVyYWJsZSArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuICAvLyBmYXN0IGNhc2UgZm9yIGFycmF5cyB3aXRoIGRlZmF1bHQgaXRlcmF0b3JcbiAgaWYgKGlzQXJyYXlJdGVyKGl0ZXJGbikpIGZvciAobGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICByZXN1bHQgPSBlbnRyaWVzID8gZihhbk9iamVjdChzdGVwID0gaXRlcmFibGVbaW5kZXhdKVswXSwgc3RlcFsxXSkgOiBmKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoaXRlcmFibGUpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7KSB7XG4gICAgcmVzdWx0ID0gY2FsbChpdGVyYXRvciwgZiwgc3RlcC52YWx1ZSwgZW50cmllcyk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5leHBvcnRzLkJSRUFLID0gQlJFQUs7XG5leHBvcnRzLlJFVFVSTiA9IFJFVFVSTjtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmICh0eXBlb2YgX19nID09ICdudW1iZXInKSBfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZFAuZihvYmplY3QsIGtleSwgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbm1vZHVsZS5leHBvcnRzID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuIiwibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsIi8vIGZhc3QgYXBwbHksIGh0dHA6Ly9qc3BlcmYubG5raXQuY29tL2Zhc3QtYXBwbHkvNVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIGFyZ3MsIHRoYXQpIHtcbiAgdmFyIHVuID0gdGhhdCA9PT0gdW5kZWZpbmVkO1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gdW4gPyBmbigpXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQpO1xuICAgIGNhc2UgMTogcmV0dXJuIHVuID8gZm4oYXJnc1swXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgIGNhc2UgNDogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gIH0gcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3MpO1xufTtcbiIsIi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApID8gT2JqZWN0IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07XG4iLCIvLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiIsIi8vIDcuMi4yIElzQXJyYXkoYXJndW1lbnQpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgcmV0dXJuIGNvZihhcmcpID09ICdBcnJheSc7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCIvLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIGVudHJpZXMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZW50cmllcyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICB9IGNhdGNoIChlKSB7XG4gICAgdmFyIHJldCA9IGl0ZXJhdG9yWydyZXR1cm4nXTtcbiAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIGFuT2JqZWN0KHJldC5jYWxsKGl0ZXJhdG9yKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2hpZGUnKShJdGVyYXRvclByb3RvdHlwZSwgcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyksIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCkge1xuICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogZGVzY3JpcHRvcigxLCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIE5BTUUgKyAnIEl0ZXJhdG9yJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyICRpdGVyQ3JlYXRlID0gcmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBCVUdHWSA9ICEoW10ua2V5cyAmJiAnbmV4dCcgaW4gW10ua2V5cygpKTsgLy8gU2FmYXJpIGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxudmFyIEZGX0lURVJBVE9SID0gJ0BAaXRlcmF0b3InO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQmFzZSwgTkFNRSwgQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gICRpdGVyQ3JlYXRlKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcbiAgdmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChraW5kKSB7XG4gICAgaWYgKCFCVUdHWSAmJiBraW5kIGluIHByb3RvKSByZXR1cm4gcHJvdG9ba2luZF07XG4gICAgc3dpdGNoIChraW5kKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgfTtcbiAgdmFyIFRBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIERFRl9WQUxVRVMgPSBERUZBVUxUID09IFZBTFVFUztcbiAgdmFyIFZBTFVFU19CVUcgPSBmYWxzZTtcbiAgdmFyIHByb3RvID0gQmFzZS5wcm90b3R5cGU7XG4gIHZhciAkbmF0aXZlID0gcHJvdG9bSVRFUkFUT1JdIHx8IHByb3RvW0ZGX0lURVJBVE9SXSB8fCBERUZBVUxUICYmIHByb3RvW0RFRkFVTFRdO1xuICB2YXIgJGRlZmF1bHQgPSAkbmF0aXZlIHx8IGdldE1ldGhvZChERUZBVUxUKTtcbiAgdmFyICRlbnRyaWVzID0gREVGQVVMVCA/ICFERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoJ2VudHJpZXMnKSA6IHVuZGVmaW5lZDtcbiAgdmFyICRhbnlOYXRpdmUgPSBOQU1FID09ICdBcnJheScgPyBwcm90by5lbnRyaWVzIHx8ICRuYXRpdmUgOiAkbmF0aXZlO1xuICB2YXIgbWV0aG9kcywga2V5LCBJdGVyYXRvclByb3RvdHlwZTtcbiAgLy8gRml4IG5hdGl2ZVxuICBpZiAoJGFueU5hdGl2ZSkge1xuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoJGFueU5hdGl2ZS5jYWxsKG5ldyBCYXNlKCkpKTtcbiAgICBpZiAoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgSXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JQcm90b3R5cGUsIFRBRywgdHJ1ZSk7XG4gICAgICAvLyBmaXggZm9yIHNvbWUgb2xkIGVuZ2luZXNcbiAgICAgIGlmICghTElCUkFSWSAmJiB0eXBlb2YgSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIGhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICB9XG4gIH1cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoREVGX1ZBTFVFUyAmJiAkbmF0aXZlICYmICRuYXRpdmUubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgVkFMVUVTX0JVRyA9IHRydWU7XG4gICAgJGRlZmF1bHQgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiAkbmF0aXZlLmNhbGwodGhpcyk7IH07XG4gIH1cbiAgLy8gRGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUxJQlJBUlkgfHwgRk9SQ0VEKSAmJiAoQlVHR1kgfHwgVkFMVUVTX0JVRyB8fCAhcHJvdG9bSVRFUkFUT1JdKSkge1xuICAgIGhpZGUocHJvdG8sIElURVJBVE9SLCAkZGVmYXVsdCk7XG4gIH1cbiAgLy8gUGx1ZyBmb3IgbGlicmFyeVxuICBJdGVyYXRvcnNbTkFNRV0gPSAkZGVmYXVsdDtcbiAgSXRlcmF0b3JzW1RBR10gPSByZXR1cm5UaGlzO1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IERFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiAkZW50cmllc1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChrZXkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKCEoa2V5IGluIHByb3RvKSkgcmVkZWZpbmUocHJvdG8sIGtleSwgbWV0aG9kc1trZXldKTtcbiAgICB9IGVsc2UgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoQlVHR1kgfHwgVkFMVUVTX0JVRyksIE5BTUUsIG1ldGhvZHMpO1xuICB9XG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsInZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgcml0ZXIgPSBbN11bSVRFUkFUT1JdKCk7XG4gIHJpdGVyWydyZXR1cm4nXSA9IGZ1bmN0aW9uICgpIHsgU0FGRV9DTE9TSU5HID0gdHJ1ZTsgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgQXJyYXkuZnJvbShyaXRlciwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBza2lwQ2xvc2luZykge1xuICBpZiAoIXNraXBDbG9zaW5nICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgdmFyIHNhZmUgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gWzddO1xuICAgIHZhciBpdGVyID0gYXJyW0lURVJBVE9SXSgpO1xuICAgIGl0ZXIubmV4dCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHsgZG9uZTogc2FmZSA9IHRydWUgfTsgfTtcbiAgICBhcnJbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcjsgfTtcbiAgICBleGVjKGFycik7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gc2FmZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkb25lLCB2YWx1ZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6ICEhZG9uZSB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHRydWU7XG4iLCJ2YXIgTUVUQSA9IHJlcXVpcmUoJy4vX3VpZCcpKCdtZXRhJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBzZXREZXNjID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBpZCA9IDA7XG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZSB8fCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBGUkVFWkUgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBpc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbnZhciBzZXRNZXRhID0gZnVuY3Rpb24gKGl0KSB7XG4gIHNldERlc2MoaXQsIE1FVEEsIHsgdmFsdWU6IHtcbiAgICBpOiAnTycgKyArK2lkLCAvLyBvYmplY3QgSURcbiAgICB3OiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IH0pO1xufTtcbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgLy8gcmV0dXJuIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFdLmk7XG59O1xudmFyIGdldFdlYWsgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBoYXNoIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFdLnc7XG59O1xuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKEZSRUVaRSAmJiBtZXRhLk5FRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzKGl0LCBNRVRBKSkgc2V0TWV0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBLRVk6IE1FVEEsXG4gIE5FRUQ6IGZhbHNlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrOiBnZXRXZWFrLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldDtcbnZhciBPYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhlYWQsIGxhc3QsIG5vdGlmeTtcblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYgKGlzTm9kZSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChoZWFkKSB7XG4gICAgICBmbiA9IGhlYWQuZm47XG4gICAgICBoZWFkID0gaGVhZC5uZXh0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIE5vZGUuanNcbiAgaWYgKGlzTm9kZSkge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyBTYWZhcmkgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzM5XG4gIH0gZWxzZSBpZiAoT2JzZXJ2ZXIgJiYgIShnbG9iYWwubmF2aWdhdG9yICYmIGdsb2JhbC5uYXZpZ2F0b3Iuc3RhbmRhbG9uZSkpIHtcbiAgICB2YXIgdG9nZ2xlID0gdHJ1ZTtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgfTtcbiAgLy8gZW52aXJvbm1lbnRzIHdpdGggbWF5YmUgbm9uLWNvbXBsZXRlbHkgY29ycmVjdCwgYnV0IGV4aXN0ZW50IFByb21pc2VcbiAgfSBlbHNlIGlmIChQcm9taXNlICYmIFByb21pc2UucmVzb2x2ZSkge1xuICAgIC8vIFByb21pc2UucmVzb2x2ZSB3aXRob3V0IGFuIGFyZ3VtZW50IHRocm93cyBhbiBlcnJvciBpbiBMRyBXZWJPUyAyXG4gICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9taXNlLnRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ1xuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgIHZhciB0YXNrID0geyBmbjogZm4sIG5leHQ6IHVuZGVmaW5lZCB9O1xuICAgIGlmIChsYXN0KSBsYXN0Lm5leHQgPSB0YXNrO1xuICAgIGlmICghaGVhZCkge1xuICAgICAgaGVhZCA9IHRhc2s7XG4gICAgICBub3RpZnkoKTtcbiAgICB9IGxhc3QgPSB0YXNrO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDI1LjQuMS41IE5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xuXG5mdW5jdGlvbiBQcm9taXNlQ2FwYWJpbGl0eShDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUZ1bmN0aW9uKHJlamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbiIsIi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZFBzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIEVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgY3JlYXRlRGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnaWZyYW1lJyk7XG4gIHZhciBpID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB2YXIgbHQgPSAnPCc7XG4gIHZhciBndCA9ICc+JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVxdWlyZSgnLi9faHRtbCcpLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDonOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNjcmlwdC11cmxcbiAgLy8gY3JlYXRlRGljdCA9IGlmcmFtZS5jb250ZW50V2luZG93Lk9iamVjdDtcbiAgLy8gaHRtbC5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgJ3NjcmlwdCcgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvc2NyaXB0JyArIGd0KTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgY3JlYXRlRGljdCA9IGlmcmFtZURvY3VtZW50LkY7XG4gIHdoaWxlIChpLS0pIGRlbGV0ZSBjcmVhdGVEaWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbaV1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eSgpO1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IGNyZWF0ZURpY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRQcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGRQID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBkUChPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgPSBnZXRLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpID0gMDtcbiAgdmFyIFA7XG4gIHdoaWxlIChsZW5ndGggPiBpKSBkUC5mKE8sIFAgPSBrZXlzW2krK10sIFByb3BlcnRpZXNbUF0pO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QRCA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0lPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBnT1BEKE8sIFApO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZURlc2MoIXBJRS5mLmNhbGwoTywgUCksIE9bUF0pO1xufTtcbiIsIi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGdPUE4oaXQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHdpbmRvd05hbWVzLnNsaWNlKCk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiB0b1N0cmluZy5jYWxsKGl0KSA9PSAnW29iamVjdCBXaW5kb3ddJyA/IGdldFdpbmRvd05hbWVzKGl0KSA6IGdPUE4odG9JT2JqZWN0KGl0KSk7XG59O1xuIiwiLy8gMTkuMS4yLjcgLyAxNS4yLjMuNCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsImV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCIvLyAxOS4xLjIuOSAvIDE1LjIuMy4yIE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgT2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoTykge1xuICBPID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXMoTywgSUVfUFJPVE8pKSByZXR1cm4gT1tJRV9QUk9UT107XG4gIGlmICh0eXBlb2YgTy5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmIE8gaW5zdGFuY2VvZiBPLmNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIE8uY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBPIGluc3RhbmNlb2YgT2JqZWN0ID8gT2JqZWN0UHJvdG8gOiBudWxsO1xufTtcbiIsInZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgYXJyYXlJbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pIGlmIChrZXkgIT0gSUVfUFJPVE8pIGhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+YXJyYXlJbmRleE9mKHJlc3VsdCwga2V5KSB8fCByZXN1bHQucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gJGtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiIsImV4cG9ydHMuZiA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwiLy8gbW9zdCBPYmplY3QgbWV0aG9kcyBieSBFUzYgc2hvdWxkIGFjY2VwdCBwcmltaXRpdmVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBleGVjKSB7XG4gIHZhciBmbiA9IChjb3JlLk9iamVjdCB8fCB7fSlbS0VZXSB8fCBPYmplY3RbS0VZXTtcbiAgdmFyIGV4cCA9IHt9O1xuICBleHBbS0VZXSA9IGV4ZWMoZm4pO1xuICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHsgZm4oMSk7IH0pLCAnT2JqZWN0JywgZXhwKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZTogZmFsc2UsIHY6IGV4ZWMoKSB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHsgZTogdHJ1ZSwgdjogZSB9O1xuICB9XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc3JjLCBzYWZlKSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIHtcbiAgICBpZiAoc2FmZSAmJiB0YXJnZXRba2V5XSkgdGFyZ2V0W2tleV0gPSBzcmNba2V5XTtcbiAgICBlbHNlIGhpZGUodGFyZ2V0LCBrZXksIHNyY1trZXldKTtcbiAgfSByZXR1cm4gdGFyZ2V0O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faGlkZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgQyA9IHR5cGVvZiBjb3JlW0tFWV0gPT0gJ2Z1bmN0aW9uJyA/IGNvcmVbS0VZXSA6IGdsb2JhbFtLRVldO1xuICBpZiAoREVTQ1JJUFRPUlMgJiYgQyAmJiAhQ1tTUEVDSUVTXSkgZFAuZihDLCBTUEVDSUVTLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICB9KTtcbn07XG4iLCJ2YXIgZGVmID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIHRhZywgc3RhdCkge1xuICBpZiAoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSkgZGVmKGl0LCBUQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogdGFnIH0pO1xufTtcbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiBjb3JlLnZlcnNpb24sXG4gIG1vZGU6IHJlcXVpcmUoJy4vX2xpYnJhcnknKSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE5IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xufSk7XG4iLCIvLyA3LjMuMjAgU3BlY2llc0NvbnN0cnVjdG9yKE8sIGRlZmF1bHRDb25zdHJ1Y3RvcilcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIEQpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgKFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXSkgPT0gdW5kZWZpbmVkID8gRCA6IGFGdW5jdGlvbihTKTtcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG4vLyB0cnVlICAtPiBTdHJpbmcjYXRcbi8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgcG9zKSB7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgdmFyIGkgPSB0b0ludGVnZXIocG9zKTtcbiAgICB2YXIgbCA9IHMubGVuZ3RoO1xuICAgIHZhciBhLCBiO1xuICAgIGlmIChpIDwgMCB8fCBpID49IGwpIHJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG4gICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuIiwidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGludm9rZSA9IHJlcXVpcmUoJy4vX2ludm9rZScpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuL19odG1sJyk7XG52YXIgY2VsID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBzZXRUYXNrID0gZ2xvYmFsLnNldEltbWVkaWF0ZTtcbnZhciBjbGVhclRhc2sgPSBnbG9iYWwuY2xlYXJJbW1lZGlhdGU7XG52YXIgTWVzc2FnZUNoYW5uZWwgPSBnbG9iYWwuTWVzc2FnZUNoYW5uZWw7XG52YXIgRGlzcGF0Y2ggPSBnbG9iYWwuRGlzcGF0Y2g7XG52YXIgY291bnRlciA9IDA7XG52YXIgcXVldWUgPSB7fTtcbnZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbnZhciBkZWZlciwgY2hhbm5lbCwgcG9ydDtcbnZhciBydW4gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBpZCA9ICt0aGlzO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gIGlmIChxdWV1ZS5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xudmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHJ1bi5jYWxsKGV2ZW50LmRhdGEpO1xufTtcbi8vIE5vZGUuanMgMC45KyAmIElFMTArIGhhcyBzZXRJbW1lZGlhdGUsIG90aGVyd2lzZTpcbmlmICghc2V0VGFzayB8fCAhY2xlYXJUYXNrKSB7XG4gIHNldFRhc2sgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoZm4pIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIHZhciBpID0gMTtcbiAgICB3aGlsZSAoYXJndW1lbnRzLmxlbmd0aCA+IGkpIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgICAgaW52b2tlKHR5cGVvZiBmbiA9PSAnZnVuY3Rpb24nID8gZm4gOiBGdW5jdGlvbihmbiksIGFyZ3MpO1xuICAgIH07XG4gICAgZGVmZXIoY291bnRlcik7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH07XG4gIGNsZWFyVGFzayA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKSB7XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgfTtcbiAgLy8gTm9kZS5qcyAwLjgtXG4gIGlmIChyZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2VzcycpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIFNwaGVyZSAoSlMgZ2FtZSBlbmdpbmUpIERpc3BhdGNoIEFQSVxuICB9IGVsc2UgaWYgKERpc3BhdGNoICYmIERpc3BhdGNoLm5vdykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBEaXNwYXRjaC5ub3coY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBCcm93c2VycyB3aXRoIE1lc3NhZ2VDaGFubmVsLCBpbmNsdWRlcyBXZWJXb3JrZXJzXG4gIH0gZWxzZSBpZiAoTWVzc2FnZUNoYW5uZWwpIHtcbiAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBsaXN0ZW5lcjtcbiAgICBkZWZlciA9IGN0eChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0LCAxKTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG4gIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG4gIH0gZWxzZSBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgJiYgdHlwZW9mIHBvc3RNZXNzYWdlID09ICdmdW5jdGlvbicgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShpZCArICcnLCAnKicpO1xuICAgIH07XG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAvLyBJRTgtXG4gIH0gZWxzZSBpZiAoT05SRUFEWVNUQVRFQ0hBTkdFIGluIGNlbCgnc2NyaXB0JykpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgaHRtbC5hcHBlbmRDaGlsZChjZWwoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4uY2FsbChpZCk7XG4gICAgICB9O1xuICAgIH07XG4gIC8vIFJlc3Qgb2xkIGJyb3dzZXJzXG4gIH0gZWxzZSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHNldFRpbWVvdXQoY3R4KHJ1biwgaWQsIDEpLCAwKTtcbiAgICB9O1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXRUYXNrLFxuICBjbGVhcjogY2xlYXJUYXNrXG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgaW5kZXggPSB0b0ludGVnZXIoaW5kZXgpO1xuICByZXR1cm4gaW5kZXggPCAwID8gbWF4KGluZGV4ICsgbGVuZ3RoLCAwKSA6IG1pbihpbmRleCwgbGVuZ3RoKTtcbn07XG4iLCIvLyA3LjEuNCBUb0ludGVnZXJcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpc05hTihpdCA9ICtpdCkgPyAwIDogKGl0ID4gMCA/IGZsb29yIDogY2VpbCkoaXQpO1xufTtcbiIsIi8vIHRvIGluZGV4ZWQgb2JqZWN0LCB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMTUgVG9MZW5ndGhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwiLy8gNy4xLjEgVG9QcmltaXRpdmUoaW5wdXQgWywgUHJlZmVycmVkVHlwZV0pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFMpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBpdDtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAodHlwZW9mIChmbiA9IGl0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwidmFyIGlkID0gMDtcbnZhciBweCA9IE1hdGgucmFuZG9tKCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsLm5hdmlnYXRvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCB8fCAnJztcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyICRTeW1ib2wgPSBjb3JlLlN5bWJvbCB8fCAoY29yZS5TeW1ib2wgPSBMSUJSQVJZID8ge30gOiBnbG9iYWwuU3ltYm9sIHx8IHt9KTtcbiAgaWYgKG5hbWUuY2hhckF0KDApICE9ICdfJyAmJiAhKG5hbWUgaW4gJFN5bWJvbCkpIGRlZmluZVByb3BlcnR5KCRTeW1ib2wsIG5hbWUsIHsgdmFsdWU6IHdrc0V4dC5mKG5hbWUpIH0pO1xufTtcbiIsImV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX3drcycpO1xuIiwidmFyIHN0b3JlID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ3drcycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xudmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLlN5bWJvbDtcbnZhciBVU0VfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PSAnZnVuY3Rpb24nO1xuXG52YXIgJGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBzdG9yZVtuYW1lXSB8fCAoc3RvcmVbbmFtZV0gPVxuICAgIFVTRV9TWU1CT0wgJiYgU3ltYm9sW25hbWVdIHx8IChVU0VfU1lNQk9MID8gU3ltYm9sIDogdWlkKSgnU3ltYm9sLicgKyBuYW1lKSk7XG59O1xuXG4kZXhwb3J0cy5zdG9yZSA9IHN0b3JlO1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29yZScpLmdldEl0ZXJhdG9yTWV0aG9kID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCAhPSB1bmRlZmluZWQpIHJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIiwiLy8gMTkuMS4yLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgna2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gJGtleXModG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIiwiXG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbVZ6Tmk1dlltcGxZM1F1ZEc4dGMzUnlhVzVuTG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJaUxDSm1hV3hsSWpvaWIzVjBMbXB6SWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUlsMTkiLCIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciB0YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldDtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuL19taWNyb3Rhc2snKSgpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuL19wZXJmb3JtJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi9fcHJvbWlzZS1yZXNvbHZlJyk7XG52YXIgUFJPTUlTRSA9ICdQcm9taXNlJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucztcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4IHx8ICcnO1xudmFyICRQcm9taXNlID0gZ2xvYmFsW1BST01JU0VdO1xudmFyIGlzTm9kZSA9IGNsYXNzb2YocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xudmFyIGVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIEludGVybmFsLCBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHksIE93blByb21pc2VDYXBhYmlsaXR5LCBXcmFwcGVyO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZjtcblxudmFyIFVTRV9OQVRJVkUgPSAhIWZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvLyBjb3JyZWN0IHN1YmNsYXNzaW5nIHdpdGggQEBzcGVjaWVzIHN1cHBvcnRcbiAgICB2YXIgcHJvbWlzZSA9ICRQcm9taXNlLnJlc29sdmUoMSk7XG4gICAgdmFyIEZha2VQcm9taXNlID0gKHByb21pc2UuY29uc3RydWN0b3IgPSB7fSlbcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKV0gPSBmdW5jdGlvbiAoZXhlYykge1xuICAgICAgZXhlYyhlbXB0eSwgZW1wdHkpO1xuICAgIH07XG4gICAgLy8gdW5oYW5kbGVkIHJlamVjdGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBAQHNwZWNpZXMgdGVzdFxuICAgIHJldHVybiAoaXNOb2RlIHx8IHR5cGVvZiBQcm9taXNlUmVqZWN0aW9uRXZlbnQgPT0gJ2Z1bmN0aW9uJylcbiAgICAgICYmIHByb21pc2UudGhlbihlbXB0eSkgaW5zdGFuY2VvZiBGYWtlUHJvbWlzZVxuICAgICAgLy8gdjggNi42IChOb2RlIDEwIGFuZCBDaHJvbWUgNjYpIGhhdmUgYSBidWcgd2l0aCByZXNvbHZpbmcgY3VzdG9tIHRoZW5hYmxlc1xuICAgICAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODMwNTY1XG4gICAgICAvLyB3ZSBjYW4ndCBkZXRlY3QgaXQgc3luY2hyb25vdXNseSwgc28ganVzdCBjaGVjayB2ZXJzaW9uc1xuICAgICAgJiYgdjguaW5kZXhPZignNi42JykgIT09IDBcbiAgICAgICYmIHVzZXJBZ2VudC5pbmRleE9mKCdDaHJvbWUvNjYnKSA9PT0gLTE7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufSgpO1xuXG4vLyBoZWxwZXJzXG52YXIgaXNUaGVuYWJsZSA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgdGhlbjtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiB0eXBlb2YgKHRoZW4gPSBpdC50aGVuKSA9PSAnZnVuY3Rpb24nID8gdGhlbiA6IGZhbHNlO1xufTtcbnZhciBub3RpZnkgPSBmdW5jdGlvbiAocHJvbWlzZSwgaXNSZWplY3QpIHtcbiAgaWYgKHByb21pc2UuX24pIHJldHVybjtcbiAgcHJvbWlzZS5fbiA9IHRydWU7XG4gIHZhciBjaGFpbiA9IHByb21pc2UuX2M7XG4gIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlID0gcHJvbWlzZS5fdjtcbiAgICB2YXIgb2sgPSBwcm9taXNlLl9zID09IDE7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBydW4gPSBmdW5jdGlvbiAocmVhY3Rpb24pIHtcbiAgICAgIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWw7XG4gICAgICB2YXIgcmVzb2x2ZSA9IHJlYWN0aW9uLnJlc29sdmU7XG4gICAgICB2YXIgcmVqZWN0ID0gcmVhY3Rpb24ucmVqZWN0O1xuICAgICAgdmFyIGRvbWFpbiA9IHJlYWN0aW9uLmRvbWFpbjtcbiAgICAgIHZhciByZXN1bHQsIHRoZW4sIGV4aXRlZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICAgICAgaWYgKCFvaykge1xuICAgICAgICAgICAgaWYgKHByb21pc2UuX2ggPT0gMikgb25IYW5kbGVVbmhhbmRsZWQocHJvbWlzZSk7XG4gICAgICAgICAgICBwcm9taXNlLl9oID0gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGhhbmRsZXIgPT09IHRydWUpIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGRvbWFpbikgZG9tYWluLmVudGVyKCk7XG4gICAgICAgICAgICByZXN1bHQgPSBoYW5kbGVyKHZhbHVlKTsgLy8gbWF5IHRocm93XG4gICAgICAgICAgICBpZiAoZG9tYWluKSB7XG4gICAgICAgICAgICAgIGRvbWFpbi5leGl0KCk7XG4gICAgICAgICAgICAgIGV4aXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHJlYWN0aW9uLnByb21pc2UpIHtcbiAgICAgICAgICAgIHJlamVjdChUeXBlRXJyb3IoJ1Byb21pc2UtY2hhaW4gY3ljbGUnKSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGVuID0gaXNUaGVuYWJsZShyZXN1bHQpKSB7XG4gICAgICAgICAgICB0aGVuLmNhbGwocmVzdWx0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0gZWxzZSByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSByZWplY3QodmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoZG9tYWluICYmICFleGl0ZWQpIGRvbWFpbi5leGl0KCk7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdoaWxlIChjaGFpbi5sZW5ndGggPiBpKSBydW4oY2hhaW5baSsrXSk7IC8vIHZhcmlhYmxlIGxlbmd0aCAtIGNhbid0IHVzZSBmb3JFYWNoXG4gICAgcHJvbWlzZS5fYyA9IFtdO1xuICAgIHByb21pc2UuX24gPSBmYWxzZTtcbiAgICBpZiAoaXNSZWplY3QgJiYgIXByb21pc2UuX2gpIG9uVW5oYW5kbGVkKHByb21pc2UpO1xuICB9KTtcbn07XG52YXIgb25VbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlID0gcHJvbWlzZS5fdjtcbiAgICB2YXIgdW5oYW5kbGVkID0gaXNVbmhhbmRsZWQocHJvbWlzZSk7XG4gICAgdmFyIHJlc3VsdCwgaGFuZGxlciwgY29uc29sZTtcbiAgICBpZiAodW5oYW5kbGVkKSB7XG4gICAgICByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGlzTm9kZSkge1xuICAgICAgICAgIHByb2Nlc3MuZW1pdCgndW5oYW5kbGVkUmVqZWN0aW9uJywgdmFsdWUsIHByb21pc2UpO1xuICAgICAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub251bmhhbmRsZWRyZWplY3Rpb24pIHtcbiAgICAgICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiB2YWx1ZSB9KTtcbiAgICAgICAgfSBlbHNlIGlmICgoY29uc29sZSA9IGdsb2JhbC5jb25zb2xlKSAmJiBjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uJywgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8vIEJyb3dzZXJzIHNob3VsZCBub3QgdHJpZ2dlciBgcmVqZWN0aW9uSGFuZGxlZGAgZXZlbnQgaWYgaXQgd2FzIGhhbmRsZWQgaGVyZSwgTm9kZUpTIC0gc2hvdWxkXG4gICAgICBwcm9taXNlLl9oID0gaXNOb2RlIHx8IGlzVW5oYW5kbGVkKHByb21pc2UpID8gMiA6IDE7XG4gICAgfSBwcm9taXNlLl9hID0gdW5kZWZpbmVkO1xuICAgIGlmICh1bmhhbmRsZWQgJiYgcmVzdWx0LmUpIHRocm93IHJlc3VsdC52O1xuICB9KTtcbn07XG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICByZXR1cm4gcHJvbWlzZS5faCAhPT0gMSAmJiAocHJvbWlzZS5fYSB8fCBwcm9taXNlLl9jKS5sZW5ndGggPT09IDA7XG59O1xudmFyIG9uSGFuZGxlVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBoYW5kbGVyO1xuICAgIGlmIChpc05vZGUpIHtcbiAgICAgIHByb2Nlc3MuZW1pdCgncmVqZWN0aW9uSGFuZGxlZCcsIHByb21pc2UpO1xuICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGdsb2JhbC5vbnJlamVjdGlvbmhhbmRsZWQpIHtcbiAgICAgIGhhbmRsZXIoeyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHByb21pc2UuX3YgfSk7XG4gICAgfVxuICB9KTtcbn07XG52YXIgJHJlamVjdCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIGlmIChwcm9taXNlLl9kKSByZXR1cm47XG4gIHByb21pc2UuX2QgPSB0cnVlO1xuICBwcm9taXNlID0gcHJvbWlzZS5fdyB8fCBwcm9taXNlOyAvLyB1bndyYXBcbiAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICBwcm9taXNlLl9zID0gMjtcbiAgaWYgKCFwcm9taXNlLl9hKSBwcm9taXNlLl9hID0gcHJvbWlzZS5fYy5zbGljZSgpO1xuICBub3RpZnkocHJvbWlzZSwgdHJ1ZSk7XG59O1xudmFyICRyZXNvbHZlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcztcbiAgdmFyIHRoZW47XG4gIGlmIChwcm9taXNlLl9kKSByZXR1cm47XG4gIHByb21pc2UuX2QgPSB0cnVlO1xuICBwcm9taXNlID0gcHJvbWlzZS5fdyB8fCBwcm9taXNlOyAvLyB1bndyYXBcbiAgdHJ5IHtcbiAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHRocm93IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIGlmICh0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSkpIHtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0geyBfdzogcHJvbWlzZSwgX2Q6IGZhbHNlIH07IC8vIHdyYXBcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGVuLmNhbGwodmFsdWUsIGN0eCgkcmVzb2x2ZSwgd3JhcHBlciwgMSksIGN0eCgkcmVqZWN0LCB3cmFwcGVyLCAxKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAkcmVqZWN0LmNhbGwod3JhcHBlciwgZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9taXNlLl92ID0gdmFsdWU7XG4gICAgICBwcm9taXNlLl9zID0gMTtcbiAgICAgIG5vdGlmeShwcm9taXNlLCBmYWxzZSk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgJHJlamVjdC5jYWxsKHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9LCBlKTsgLy8gd3JhcFxuICB9XG59O1xuXG4vLyBjb25zdHJ1Y3RvciBwb2x5ZmlsbFxuaWYgKCFVU0VfTkFUSVZFKSB7XG4gIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG4gICRQcm9taXNlID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJFByb21pc2UsIFBST01JU0UsICdfaCcpO1xuICAgIGFGdW5jdGlvbihleGVjdXRvcik7XG4gICAgSW50ZXJuYWwuY2FsbCh0aGlzKTtcbiAgICB0cnkge1xuICAgICAgZXhlY3V0b3IoY3R4KCRyZXNvbHZlLCB0aGlzLCAxKSwgY3R4KCRyZWplY3QsIHRoaXMsIDEpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICRyZWplY3QuY2FsbCh0aGlzLCBlcnIpO1xuICAgIH1cbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIEludGVybmFsID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIHRoaXMuX2MgPSBbXTsgICAgICAgICAgICAgLy8gPC0gYXdhaXRpbmcgcmVhY3Rpb25zXG4gICAgdGhpcy5fYSA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSBjaGVja2VkIGluIGlzVW5oYW5kbGVkIHJlYWN0aW9uc1xuICAgIHRoaXMuX3MgPSAwOyAgICAgICAgICAgICAgLy8gPC0gc3RhdGVcbiAgICB0aGlzLl9kID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIGRvbmVcbiAgICB0aGlzLl92ID0gdW5kZWZpbmVkOyAgICAgIC8vIDwtIHZhbHVlXG4gICAgdGhpcy5faCA9IDA7ICAgICAgICAgICAgICAvLyA8LSByZWplY3Rpb24gc3RhdGUsIDAgLSBkZWZhdWx0LCAxIC0gaGFuZGxlZCwgMiAtIHVuaGFuZGxlZFxuICAgIHRoaXMuX24gPSBmYWxzZTsgICAgICAgICAgLy8gPC0gbm90aWZ5XG4gIH07XG4gIEludGVybmFsLnByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpKCRQcm9taXNlLnByb3RvdHlwZSwge1xuICAgIC8vIDI1LjQuNS4zIFByb21pc2UucHJvdG90eXBlLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpXG4gICAgdGhlbjogZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgdmFyIHJlYWN0aW9uID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsICRQcm9taXNlKSk7XG4gICAgICByZWFjdGlvbi5vayA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiB0cnVlO1xuICAgICAgcmVhY3Rpb24uZmFpbCA9IHR5cGVvZiBvblJlamVjdGVkID09ICdmdW5jdGlvbicgJiYgb25SZWplY3RlZDtcbiAgICAgIHJlYWN0aW9uLmRvbWFpbiA9IGlzTm9kZSA/IHByb2Nlc3MuZG9tYWluIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fYy5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9hKSB0aGlzLl9hLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHRoaXMuX3MpIG5vdGlmeSh0aGlzLCBmYWxzZSk7XG4gICAgICByZXR1cm4gcmVhY3Rpb24ucHJvbWlzZTtcbiAgICB9LFxuICAgIC8vIDI1LjQuNS4xIFByb21pc2UucHJvdG90eXBlLmNhdGNoKG9uUmVqZWN0ZWQpXG4gICAgJ2NhdGNoJzogZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgICB9XG4gIH0pO1xuICBPd25Qcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBJbnRlcm5hbCgpO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gICAgdGhpcy5yZXNvbHZlID0gY3R4KCRyZXNvbHZlLCBwcm9taXNlLCAxKTtcbiAgICB0aGlzLnJlamVjdCA9IGN0eCgkcmVqZWN0LCBwcm9taXNlLCAxKTtcbiAgfTtcbiAgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgICByZXR1cm4gQyA9PT0gJFByb21pc2UgfHwgQyA9PT0gV3JhcHBlclxuICAgICAgPyBuZXcgT3duUHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgIDogbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFByb21pc2U6ICRQcm9taXNlIH0pO1xucmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKSgkUHJvbWlzZSwgUFJPTUlTRSk7XG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKFBST01JU0UpO1xuV3JhcHBlciA9IHJlcXVpcmUoJy4vX2NvcmUnKVtQUk9NSVNFXTtcblxuLy8gc3RhdGljc1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNSBQcm9taXNlLnJlamVjdChyKVxuICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKSB7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSh0aGlzKTtcbiAgICB2YXIgJCRyZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICAkJHJlamVjdChyKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKExJQlJBUlkgfHwgIVVTRV9OQVRJVkUpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC42IFByb21pc2UucmVzb2x2ZSh4KVxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpIHtcbiAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoTElCUkFSWSAmJiB0aGlzID09PSBXcmFwcGVyID8gJFByb21pc2UgOiB0aGlzLCB4KTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoVVNFX05BVElWRSAmJiByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpKGZ1bmN0aW9uIChpdGVyKSB7XG4gICRQcm9taXNlLmFsbChpdGVyKVsnY2F0Y2gnXShlbXB0eSk7XG59KSksIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjEgUHJvbWlzZS5hbGwoaXRlcmFibGUpXG4gIGFsbDogZnVuY3Rpb24gYWxsKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyICRpbmRleCA9IGluZGV4Kys7XG4gICAgICAgIHZhciBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHZhbHVlcy5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1skaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH0sXG4gIC8vIDI1LjQuNC40IFByb21pc2UucmFjZShpdGVyYWJsZSlcbiAgcmFjZTogZnVuY3Rpb24gcmFjZShpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGNhcGFiaWxpdHkucmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuLy8gMjEuMS4zLjI3IFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IFN0cmluZyhpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuLy8gMjEuMS41LjIuMSAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBpbmRleCA9IHRoaXMuX2k7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IE8ubGVuZ3RoKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIHBvaW50ID0gJGF0KE8sIGluZGV4KTtcbiAgdGhpcy5faSArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiB7IHZhbHVlOiBwb2ludCwgZG9uZTogZmFsc2UgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gRUNNQVNjcmlwdCA2IHN5bWJvbHMgc2hpbVxudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIE1FVEEgPSByZXF1aXJlKCcuL19tZXRhJykuS0VZO1xudmFyICRmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIHdrc0V4dCA9IHJlcXVpcmUoJy4vX3drcy1leHQnKTtcbnZhciB3a3NEZWZpbmUgPSByZXF1aXJlKCcuL193a3MtZGVmaW5lJyk7XG52YXIgZW51bUtleXMgPSByZXF1aXJlKCcuL19lbnVtLWtleXMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIF9jcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgZ09QTkV4dCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuLWV4dCcpO1xudmFyICRHT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciAkR09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgJERQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUEQgPSAkR09QRC5mO1xudmFyIGRQID0gJERQLmY7XG52YXIgZ09QTiA9IGdPUE5FeHQuZjtcbnZhciAkU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciAkSlNPTiA9IGdsb2JhbC5KU09OO1xudmFyIF9zdHJpbmdpZnkgPSAkSlNPTiAmJiAkSlNPTi5zdHJpbmdpZnk7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgSElEREVOID0gd2tzKCdfaGlkZGVuJyk7XG52YXIgVE9fUFJJTUlUSVZFID0gd2tzKCd0b1ByaW1pdGl2ZScpO1xudmFyIGlzRW51bSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIFN5bWJvbFJlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtcmVnaXN0cnknKTtcbnZhciBBbGxTeW1ib2xzID0gc2hhcmVkKCdzeW1ib2xzJyk7XG52YXIgT1BTeW1ib2xzID0gc2hhcmVkKCdvcC1zeW1ib2xzJyk7XG52YXIgT2JqZWN0UHJvdG8gPSBPYmplY3RbUFJPVE9UWVBFXTtcbnZhciBVU0VfTkFUSVZFID0gdHlwZW9mICRTeW1ib2wgPT0gJ2Z1bmN0aW9uJyAmJiAhISRHT1BTLmY7XG52YXIgUU9iamVjdCA9IGdsb2JhbC5RT2JqZWN0O1xuLy8gRG9uJ3QgdXNlIHNldHRlcnMgaW4gUXQgU2NyaXB0LCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTczXG52YXIgc2V0dGVyID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgc2V0U3ltYm9sRGVzYyA9IERFU0NSSVBUT1JTICYmICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBfY3JlYXRlKGRQKHt9LCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRQKHRoaXMsICdhJywgeyB2YWx1ZTogNyB9KS5hOyB9XG4gIH0pKS5hICE9IDc7XG59KSA/IGZ1bmN0aW9uIChpdCwga2V5LCBEKSB7XG4gIHZhciBwcm90b0Rlc2MgPSBnT1BEKE9iamVjdFByb3RvLCBrZXkpO1xuICBpZiAocHJvdG9EZXNjKSBkZWxldGUgT2JqZWN0UHJvdG9ba2V5XTtcbiAgZFAoaXQsIGtleSwgRCk7XG4gIGlmIChwcm90b0Rlc2MgJiYgaXQgIT09IE9iamVjdFByb3RvKSBkUChPYmplY3RQcm90bywga2V5LCBwcm90b0Rlc2MpO1xufSA6IGRQO1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgdmFyIHN5bSA9IEFsbFN5bWJvbHNbdGFnXSA9IF9jcmVhdGUoJFN5bWJvbFtQUk9UT1RZUEVdKTtcbiAgc3ltLl9rID0gdGFnO1xuICByZXR1cm4gc3ltO1xufTtcblxudmFyIGlzU3ltYm9sID0gVVNFX05BVElWRSAmJiB0eXBlb2YgJFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJyA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgaW5zdGFuY2VvZiAkU3ltYm9sO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIEQpIHtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90bykgJGRlZmluZVByb3BlcnR5KE9QU3ltYm9scywga2V5LCBEKTtcbiAgYW5PYmplY3QoaXQpO1xuICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICBhbk9iamVjdChEKTtcbiAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkpKSB7XG4gICAgaWYgKCFELmVudW1lcmFibGUpIHtcbiAgICAgIGlmICghaGFzKGl0LCBISURERU4pKSBkUChpdCwgSElEREVOLCBjcmVhdGVEZXNjKDEsIHt9KSk7XG4gICAgICBpdFtISURERU5dW2tleV0gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkgaXRbSElEREVOXVtrZXldID0gZmFsc2U7XG4gICAgICBEID0gX2NyZWF0ZShELCB7IGVudW1lcmFibGU6IGNyZWF0ZURlc2MoMCwgZmFsc2UpIH0pO1xuICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2MoaXQsIGtleSwgRCk7XG4gIH0gcmV0dXJuIGRQKGl0LCBrZXksIEQpO1xufTtcbnZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoaXQsIFApIHtcbiAgYW5PYmplY3QoaXQpO1xuICB2YXIga2V5cyA9IGVudW1LZXlzKFAgPSB0b0lPYmplY3QoUCkpO1xuICB2YXIgaSA9IDA7XG4gIHZhciBsID0ga2V5cy5sZW5ndGg7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChsID4gaSkgJGRlZmluZVByb3BlcnR5KGl0LCBrZXkgPSBrZXlzW2krK10sIFBba2V5XSk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpdCwgUCkge1xuICByZXR1cm4gUCA9PT0gdW5kZWZpbmVkID8gX2NyZWF0ZShpdCkgOiAkZGVmaW5lUHJvcGVydGllcyhfY3JlYXRlKGl0KSwgUCk7XG59O1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKGtleSkge1xuICB2YXIgRSA9IGlzRW51bS5jYWxsKHRoaXMsIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSkpO1xuICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIEUgfHwgIWhhcyh0aGlzLCBrZXkpIHx8ICFoYXMoQWxsU3ltYm9scywga2V5KSB8fCBoYXModGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1ba2V5XSA/IEUgOiB0cnVlO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgaXQgPSB0b0lPYmplY3QoaXQpO1xuICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm47XG4gIHZhciBEID0gZ09QRChpdCwga2V5KTtcbiAgaWYgKEQgJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkgRC5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgcmV0dXJuIEQ7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICB2YXIgbmFtZXMgPSBnT1BOKHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoIWhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiBrZXkgIT0gSElEREVOICYmIGtleSAhPSBNRVRBKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpIHtcbiAgdmFyIElTX09QID0gaXQgPT09IE9iamVjdFByb3RvO1xuICB2YXIgbmFtZXMgPSBnT1BOKElTX09QID8gT1BTeW1ib2xzIDogdG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmIChoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYgKElTX09QID8gaGFzKE9iamVjdFByb3RvLCBrZXkpIDogdHJ1ZSkpIHJlc3VsdC5wdXNoKEFsbFN5bWJvbHNba2V5XSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIDE5LjQuMS4xIFN5bWJvbChbZGVzY3JpcHRpb25dKVxuaWYgKCFVU0VfTkFUSVZFKSB7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiAkU3ltYm9sKSB0aHJvdyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciEnKTtcbiAgICB2YXIgdGFnID0gdWlkKGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgICB2YXIgJHNldCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvKSAkc2V0LmNhbGwoT1BTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZiAoaGFzKHRoaXMsIEhJRERFTikgJiYgaGFzKHRoaXNbSElEREVOXSwgdGFnKSkgdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHNldFN5bWJvbERlc2ModGhpcywgdGFnLCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG4gICAgfTtcbiAgICBpZiAoREVTQ1JJUFRPUlMgJiYgc2V0dGVyKSBzZXRTeW1ib2xEZXNjKE9iamVjdFByb3RvLCB0YWcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCBzZXQ6ICRzZXQgfSk7XG4gICAgcmV0dXJuIHdyYXAodGFnKTtcbiAgfTtcbiAgcmVkZWZpbmUoJFN5bWJvbFtQUk9UT1RZUEVdLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5faztcbiAgfSk7XG5cbiAgJEdPUEQuZiA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gICREUC5mID0gJGRlZmluZVByb3BlcnR5O1xuICByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmYgPSBnT1BORXh0LmYgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpLmYgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gICRHT1BTLmYgPSAkZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiAhcmVxdWlyZSgnLi9fbGlicmFyeScpKSB7XG4gICAgcmVkZWZpbmUoT2JqZWN0UHJvdG8sICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgdHJ1ZSk7XG4gIH1cblxuICB3a3NFeHQuZiA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHdyYXAod2tzKG5hbWUpKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBTeW1ib2w6ICRTeW1ib2wgfSk7XG5cbmZvciAodmFyIGVzNlN5bWJvbHMgPSAoXG4gIC8vIDE5LjQuMi4yLCAxOS40LjIuMywgMTkuNC4yLjQsIDE5LjQuMi42LCAxOS40LjIuOCwgMTkuNC4yLjksIDE5LjQuMi4xMCwgMTkuNC4yLjExLCAxOS40LjIuMTIsIDE5LjQuMi4xMywgMTkuNC4yLjE0XG4gICdoYXNJbnN0YW5jZSxpc0NvbmNhdFNwcmVhZGFibGUsaXRlcmF0b3IsbWF0Y2gscmVwbGFjZSxzZWFyY2gsc3BlY2llcyxzcGxpdCx0b1ByaW1pdGl2ZSx0b1N0cmluZ1RhZyx1bnNjb3BhYmxlcydcbikuc3BsaXQoJywnKSwgaiA9IDA7IGVzNlN5bWJvbHMubGVuZ3RoID4gajspd2tzKGVzNlN5bWJvbHNbaisrXSk7XG5cbmZvciAodmFyIHdlbGxLbm93blN5bWJvbHMgPSAka2V5cyh3a3Muc3RvcmUpLCBrID0gMDsgd2VsbEtub3duU3ltYm9scy5sZW5ndGggPiBrOykgd2tzRGVmaW5lKHdlbGxLbm93blN5bWJvbHNbaysrXSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdTeW1ib2wnLCB7XG4gIC8vIDE5LjQuMi4xIFN5bWJvbC5mb3Ioa2V5KVxuICAnZm9yJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBoYXMoU3ltYm9sUmVnaXN0cnksIGtleSArPSAnJylcbiAgICAgID8gU3ltYm9sUmVnaXN0cnlba2V5XVxuICAgICAgOiBTeW1ib2xSZWdpc3RyeVtrZXldID0gJFN5bWJvbChrZXkpO1xuICB9LFxuICAvLyAxOS40LjIuNSBTeW1ib2wua2V5Rm9yKHN5bSlcbiAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioc3ltKSB7XG4gICAgaWYgKCFpc1N5bWJvbChzeW0pKSB0aHJvdyBUeXBlRXJyb3Ioc3ltICsgJyBpcyBub3QgYSBzeW1ib2whJyk7XG4gICAgZm9yICh2YXIga2V5IGluIFN5bWJvbFJlZ2lzdHJ5KSBpZiAoU3ltYm9sUmVnaXN0cnlba2V5XSA9PT0gc3ltKSByZXR1cm4ga2V5O1xuICB9LFxuICB1c2VTZXR0ZXI6IGZ1bmN0aW9uICgpIHsgc2V0dGVyID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IGZhbHNlOyB9XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ09iamVjdCcsIHtcbiAgLy8gMTkuMS4yLjIgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuICBjcmVhdGU6ICRjcmVhdGUsXG4gIC8vIDE5LjEuMi40IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAvLyAxOS4xLjIuMyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKVxuICBkZWZpbmVQcm9wZXJ0aWVzOiAkZGVmaW5lUHJvcGVydGllcyxcbiAgLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG4gIC8vIDE5LjEuMi43IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG4gIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzLFxuICAvLyAxOS4xLjIuOCBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKE8pXG4gIGdldE93blByb3BlcnR5U3ltYm9sczogJGdldE93blByb3BlcnR5U3ltYm9sc1xufSk7XG5cbi8vIENocm9tZSAzOCBhbmQgMzkgYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIGZhaWxzIG9uIHByaW1pdGl2ZXNcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM0NDNcbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gJGZhaWxzKGZ1bmN0aW9uICgpIHsgJEdPUFMuZigxKTsgfSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogRkFJTFNfT05fUFJJTUlUSVZFUywgJ09iamVjdCcsIHtcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpIHtcbiAgICByZXR1cm4gJEdPUFMuZih0b09iamVjdChpdCkpO1xuICB9XG59KTtcblxuLy8gMjQuMy4yIEpTT04uc3RyaW5naWZ5KHZhbHVlIFssIHJlcGxhY2VyIFssIHNwYWNlXV0pXG4kSlNPTiAmJiAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghVVNFX05BVElWRSB8fCAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgUyA9ICRTeW1ib2woKTtcbiAgLy8gTVMgRWRnZSBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMge31cbiAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gIHJldHVybiBfc3RyaW5naWZ5KFtTXSkgIT0gJ1tudWxsXScgfHwgX3N0cmluZ2lmeSh7IGE6IFMgfSkgIT0gJ3t9JyB8fCBfc3RyaW5naWZ5KE9iamVjdChTKSkgIT0gJ3t9Jztcbn0pKSwgJ0pTT04nLCB7XG4gIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0KSB7XG4gICAgdmFyIGFyZ3MgPSBbaXRdO1xuICAgIHZhciBpID0gMTtcbiAgICB2YXIgcmVwbGFjZXIsICRyZXBsYWNlcjtcbiAgICB3aGlsZSAoYXJndW1lbnRzLmxlbmd0aCA+IGkpIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgJHJlcGxhY2VyID0gcmVwbGFjZXIgPSBhcmdzWzFdO1xuICAgIGlmICghaXNPYmplY3QocmVwbGFjZXIpICYmIGl0ID09PSB1bmRlZmluZWQgfHwgaXNTeW1ib2woaXQpKSByZXR1cm47IC8vIElFOCByZXR1cm5zIHN0cmluZyBvbiB1bmRlZmluZWRcbiAgICBpZiAoIWlzQXJyYXkocmVwbGFjZXIpKSByZXBsYWNlciA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mICRyZXBsYWNlciA9PSAnZnVuY3Rpb24nKSB2YWx1ZSA9ICRyZXBsYWNlci5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgaWYgKCFpc1N5bWJvbCh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICAgIGFyZ3NbMV0gPSByZXBsYWNlcjtcbiAgICByZXR1cm4gX3N0cmluZ2lmeS5hcHBseSgkSlNPTiwgYXJncyk7XG4gIH1cbn0pO1xuXG4vLyAxOS40LjMuNCBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdKGhpbnQpXG4kU3ltYm9sW1BST1RPVFlQRV1bVE9fUFJJTUlUSVZFXSB8fCByZXF1aXJlKCcuL19oaWRlJykoJFN5bWJvbFtQUk9UT1RZUEVdLCBUT19QUklNSVRJVkUsICRTeW1ib2xbUFJPVE9UWVBFXS52YWx1ZU9mKTtcbi8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsICdTeW1ib2wnKTtcbi8vIDIwLjIuMS45IE1hdGhbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKE1hdGgsICdNYXRoJywgdHJ1ZSk7XG4vLyAyNC4zLjMgSlNPTltAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoZ2xvYmFsLkpTT04sICdKU09OJywgdHJ1ZSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLWZpbmFsbHlcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuL19wcm9taXNlLXJlc29sdmUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdQcm9taXNlJywgeyAnZmluYWxseSc6IGZ1bmN0aW9uIChvbkZpbmFsbHkpIHtcbiAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgY29yZS5Qcm9taXNlIHx8IGdsb2JhbC5Qcm9taXNlKTtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2Ygb25GaW5hbGx5ID09ICdmdW5jdGlvbic7XG4gIHJldHVybiB0aGlzLnRoZW4oXG4gICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4geDsgfSk7XG4gICAgfSA6IG9uRmluYWxseSxcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKGUpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHRocm93IGU7IH0pO1xuICAgIH0gOiBvbkZpbmFsbHlcbiAgKTtcbn0gfSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLXRyeVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1Byb21pc2UnLCB7ICd0cnknOiBmdW5jdGlvbiAoY2FsbGJhY2tmbikge1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgKHJlc3VsdC5lID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnYpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn0gfSk7XG4iLCJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ2FzeW5jSXRlcmF0b3InKTtcbiIsInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnb2JzZXJ2YWJsZScpO1xuIiwicmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIFRPX1NUUklOR19UQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxudmFyIERPTUl0ZXJhYmxlcyA9ICgnQ1NTUnVsZUxpc3QsQ1NTU3R5bGVEZWNsYXJhdGlvbixDU1NWYWx1ZUxpc3QsQ2xpZW50UmVjdExpc3QsRE9NUmVjdExpc3QsRE9NU3RyaW5nTGlzdCwnICtcbiAgJ0RPTVRva2VuTGlzdCxEYXRhVHJhbnNmZXJJdGVtTGlzdCxGaWxlTGlzdCxIVE1MQWxsQ29sbGVjdGlvbixIVE1MQ29sbGVjdGlvbixIVE1MRm9ybUVsZW1lbnQsSFRNTFNlbGVjdEVsZW1lbnQsJyArXG4gICdNZWRpYUxpc3QsTWltZVR5cGVBcnJheSxOYW1lZE5vZGVNYXAsTm9kZUxpc3QsUGFpbnRSZXF1ZXN0TGlzdCxQbHVnaW4sUGx1Z2luQXJyYXksU1ZHTGVuZ3RoTGlzdCxTVkdOdW1iZXJMaXN0LCcgK1xuICAnU1ZHUGF0aFNlZ0xpc3QsU1ZHUG9pbnRMaXN0LFNWR1N0cmluZ0xpc3QsU1ZHVHJhbnNmb3JtTGlzdCxTb3VyY2VCdWZmZXJMaXN0LFN0eWxlU2hlZXRMaXN0LFRleHRUcmFja0N1ZUxpc3QsJyArXG4gICdUZXh0VHJhY2tMaXN0LFRvdWNoTGlzdCcpLnNwbGl0KCcsJyk7XG5cbmZvciAodmFyIGkgPSAwOyBpIDwgRE9NSXRlcmFibGVzLmxlbmd0aDsgaSsrKSB7XG4gIHZhciBOQU1FID0gRE9NSXRlcmFibGVzW2ldO1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgaWYgKHByb3RvICYmICFwcm90b1tUT19TVFJJTkdfVEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IEl0ZXJhdG9ycy5BcnJheTtcbn1cbiIsIi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uLCB0aGF0LCBhcyBsb25nIGFzIGl0IGNvbnRpbnVlcyB0byBiZSBpbnZva2VkLCB3aWxsIG5vdFxuICogYmUgdHJpZ2dlcmVkLiBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgaXQgc3RvcHMgYmVpbmcgY2FsbGVkIGZvclxuICogTiBtaWxsaXNlY29uZHMuIElmIGBpbW1lZGlhdGVgIGlzIHBhc3NlZCwgdHJpZ2dlciB0aGUgZnVuY3Rpb24gb24gdGhlXG4gKiBsZWFkaW5nIGVkZ2UsIGluc3RlYWQgb2YgdGhlIHRyYWlsaW5nLiBUaGUgZnVuY3Rpb24gYWxzbyBoYXMgYSBwcm9wZXJ0eSAnY2xlYXInIFxuICogdGhhdCBpcyBhIGZ1bmN0aW9uIHdoaWNoIHdpbGwgY2xlYXIgdGhlIHRpbWVyIHRvIHByZXZlbnQgcHJldmlvdXNseSBzY2hlZHVsZWQgZXhlY3V0aW9ucy4gXG4gKlxuICogQHNvdXJjZSB1bmRlcnNjb3JlLmpzXG4gKiBAc2VlIGh0dHA6Ly91bnNjcmlwdGFibGUuY29tLzIwMDkvMDMvMjAvZGVib3VuY2luZy1qYXZhc2NyaXB0LW1ldGhvZHMvXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jdGlvbiB0byB3cmFwXG4gKiBAcGFyYW0ge051bWJlcn0gdGltZW91dCBpbiBtcyAoYDEwMGApXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHdoZXRoZXIgdG8gZXhlY3V0ZSBhdCB0aGUgYmVnaW5uaW5nIChgZmFsc2VgKVxuICogQGFwaSBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgaW1tZWRpYXRlKXtcbiAgdmFyIHRpbWVvdXQsIGFyZ3MsIGNvbnRleHQsIHRpbWVzdGFtcCwgcmVzdWx0O1xuICBpZiAobnVsbCA9PSB3YWl0KSB3YWl0ID0gMTAwO1xuXG4gIGZ1bmN0aW9uIGxhdGVyKCkge1xuICAgIHZhciBsYXN0ID0gRGF0ZS5ub3coKSAtIHRpbWVzdGFtcDtcblxuICAgIGlmIChsYXN0IDwgd2FpdCAmJiBsYXN0ID49IDApIHtcbiAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0IC0gbGFzdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgaWYgKCFpbW1lZGlhdGUpIHtcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB2YXIgZGVib3VuY2VkID0gZnVuY3Rpb24oKXtcbiAgICBjb250ZXh0ID0gdGhpcztcbiAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgIHRpbWVzdGFtcCA9IERhdGUubm93KCk7XG4gICAgdmFyIGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7XG4gICAgaWYgKCF0aW1lb3V0KSB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7XG4gICAgaWYgKGNhbGxOb3cpIHtcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBkZWJvdW5jZWQuY2xlYXIgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgfVxuICB9O1xuICBcbiAgZGVib3VuY2VkLmZsdXNoID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICBcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gZGVib3VuY2VkO1xufTtcblxuLy8gQWRkcyBjb21wYXRpYmlsaXR5IGZvciBFUyBtb2R1bGVzXG5kZWJvdW5jZS5kZWJvdW5jZSA9IGRlYm91bmNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlYm91bmNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRva2VuID0gJyVbYS1mMC05XXsyfSc7XG52YXIgc2luZ2xlTWF0Y2hlciA9IG5ldyBSZWdFeHAodG9rZW4sICdnaScpO1xudmFyIG11bHRpTWF0Y2hlciA9IG5ldyBSZWdFeHAoJygnICsgdG9rZW4gKyAnKSsnLCAnZ2knKTtcblxuZnVuY3Rpb24gZGVjb2RlQ29tcG9uZW50cyhjb21wb25lbnRzLCBzcGxpdCkge1xuXHR0cnkge1xuXHRcdC8vIFRyeSB0byBkZWNvZGUgdGhlIGVudGlyZSBzdHJpbmcgZmlyc3Rcblx0XHRyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGNvbXBvbmVudHMuam9pbignJykpO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBEbyBub3RoaW5nXG5cdH1cblxuXHRpZiAoY29tcG9uZW50cy5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gY29tcG9uZW50cztcblx0fVxuXG5cdHNwbGl0ID0gc3BsaXQgfHwgMTtcblxuXHQvLyBTcGxpdCB0aGUgYXJyYXkgaW4gMiBwYXJ0c1xuXHR2YXIgbGVmdCA9IGNvbXBvbmVudHMuc2xpY2UoMCwgc3BsaXQpO1xuXHR2YXIgcmlnaHQgPSBjb21wb25lbnRzLnNsaWNlKHNwbGl0KTtcblxuXHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5jYWxsKFtdLCBkZWNvZGVDb21wb25lbnRzKGxlZnQpLCBkZWNvZGVDb21wb25lbnRzKHJpZ2h0KSk7XG59XG5cbmZ1bmN0aW9uIGRlY29kZShpbnB1dCkge1xuXHR0cnkge1xuXHRcdHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoaW5wdXQpO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHR2YXIgdG9rZW5zID0gaW5wdXQubWF0Y2goc2luZ2xlTWF0Y2hlcik7XG5cblx0XHRmb3IgKHZhciBpID0gMTsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aW5wdXQgPSBkZWNvZGVDb21wb25lbnRzKHRva2VucywgaSkuam9pbignJyk7XG5cblx0XHRcdHRva2VucyA9IGlucHV0Lm1hdGNoKHNpbmdsZU1hdGNoZXIpO1xuXHRcdH1cblxuXHRcdHJldHVybiBpbnB1dDtcblx0fVxufVxuXG5mdW5jdGlvbiBjdXN0b21EZWNvZGVVUklDb21wb25lbnQoaW5wdXQpIHtcblx0Ly8gS2VlcCB0cmFjayBvZiBhbGwgdGhlIHJlcGxhY2VtZW50cyBhbmQgcHJlZmlsbCB0aGUgbWFwIHdpdGggdGhlIGBCT01gXG5cdHZhciByZXBsYWNlTWFwID0ge1xuXHRcdCclRkUlRkYnOiAnXFx1RkZGRFxcdUZGRkQnLFxuXHRcdCclRkYlRkUnOiAnXFx1RkZGRFxcdUZGRkQnXG5cdH07XG5cblx0dmFyIG1hdGNoID0gbXVsdGlNYXRjaGVyLmV4ZWMoaW5wdXQpO1xuXHR3aGlsZSAobWF0Y2gpIHtcblx0XHR0cnkge1xuXHRcdFx0Ly8gRGVjb2RlIGFzIGJpZyBjaHVua3MgYXMgcG9zc2libGVcblx0XHRcdHJlcGxhY2VNYXBbbWF0Y2hbMF1dID0gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzBdKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdHZhciByZXN1bHQgPSBkZWNvZGUobWF0Y2hbMF0pO1xuXG5cdFx0XHRpZiAocmVzdWx0ICE9PSBtYXRjaFswXSkge1xuXHRcdFx0XHRyZXBsYWNlTWFwW21hdGNoWzBdXSA9IHJlc3VsdDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRtYXRjaCA9IG11bHRpTWF0Y2hlci5leGVjKGlucHV0KTtcblx0fVxuXG5cdC8vIEFkZCBgJUMyYCBhdCB0aGUgZW5kIG9mIHRoZSBtYXAgdG8gbWFrZSBzdXJlIGl0IGRvZXMgbm90IHJlcGxhY2UgdGhlIGNvbWJpbmF0b3IgYmVmb3JlIGV2ZXJ5dGhpbmcgZWxzZVxuXHRyZXBsYWNlTWFwWyclQzInXSA9ICdcXHVGRkZEJztcblxuXHR2YXIgZW50cmllcyA9IE9iamVjdC5rZXlzKHJlcGxhY2VNYXApO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7IGkrKykge1xuXHRcdC8vIFJlcGxhY2UgYWxsIGRlY29kZWQgY29tcG9uZW50c1xuXHRcdHZhciBrZXkgPSBlbnRyaWVzW2ldO1xuXHRcdGlucHV0ID0gaW5wdXQucmVwbGFjZShuZXcgUmVnRXhwKGtleSwgJ2cnKSwgcmVwbGFjZU1hcFtrZXldKTtcblx0fVxuXG5cdHJldHVybiBpbnB1dDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZW5jb2RlZFVSSSkge1xuXHRpZiAodHlwZW9mIGVuY29kZWRVUkkgIT09ICdzdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYGVuY29kZWRVUklgIHRvIGJlIG9mIHR5cGUgYHN0cmluZ2AsIGdvdCBgJyArIHR5cGVvZiBlbmNvZGVkVVJJICsgJ2AnKTtcblx0fVxuXG5cdHRyeSB7XG5cdFx0ZW5jb2RlZFVSSSA9IGVuY29kZWRVUkkucmVwbGFjZSgvXFwrL2csICcgJyk7XG5cblx0XHQvLyBUcnkgdGhlIGJ1aWx0IGluIGRlY29kZXIgZmlyc3Rcblx0XHRyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVuY29kZWRVUkkpO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBGYWxsYmFjayB0byBhIG1vcmUgYWR2YW5jZWQgZGVjb2RlclxuXHRcdHJldHVybiBjdXN0b21EZWNvZGVVUklDb21wb25lbnQoZW5jb2RlZFVSSSk7XG5cdH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnJlcXVpcmUoJy4vaW5kZXgnKS5wb2x5ZmlsbCgpO1xuIiwiLyoqXG4gKiBDb2RlIHJlZmFjdG9yZWQgZnJvbSBNb3ppbGxhIERldmVsb3BlciBOZXR3b3JrOlxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnblxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgZmlyc3RTb3VyY2UpIHtcbiAgaWYgKHRhcmdldCA9PT0gdW5kZWZpbmVkIHx8IHRhcmdldCA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGZpcnN0IGFyZ3VtZW50IHRvIG9iamVjdCcpO1xuICB9XG5cbiAgdmFyIHRvID0gT2JqZWN0KHRhcmdldCk7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG5leHRTb3VyY2UgPSBhcmd1bWVudHNbaV07XG4gICAgaWYgKG5leHRTb3VyY2UgPT09IHVuZGVmaW5lZCB8fCBuZXh0U291cmNlID09PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIga2V5c0FycmF5ID0gT2JqZWN0LmtleXMoT2JqZWN0KG5leHRTb3VyY2UpKTtcbiAgICBmb3IgKHZhciBuZXh0SW5kZXggPSAwLCBsZW4gPSBrZXlzQXJyYXkubGVuZ3RoOyBuZXh0SW5kZXggPCBsZW47IG5leHRJbmRleCsrKSB7XG4gICAgICB2YXIgbmV4dEtleSA9IGtleXNBcnJheVtuZXh0SW5kZXhdO1xuICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5leHRTb3VyY2UsIG5leHRLZXkpO1xuICAgICAgaWYgKGRlc2MgIT09IHVuZGVmaW5lZCAmJiBkZXNjLmVudW1lcmFibGUpIHtcbiAgICAgICAgdG9bbmV4dEtleV0gPSBuZXh0U291cmNlW25leHRLZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdG87XG59XG5cbmZ1bmN0aW9uIHBvbHlmaWxsKCkge1xuICBpZiAoIU9iamVjdC5hc3NpZ24pIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0LCAnYXNzaWduJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBhc3NpZ25cbiAgICB9KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYXNzaWduOiBhc3NpZ24sXG4gIHBvbHlmaWxsOiBwb2x5ZmlsbFxufTtcbiIsIi8vIFRoaXMgZmlsZSBjYW4gYmUgcmVxdWlyZWQgaW4gQnJvd3NlcmlmeSBhbmQgTm9kZS5qcyBmb3IgYXV0b21hdGljIHBvbHlmaWxsXG4vLyBUbyB1c2UgaXQ6ICByZXF1aXJlKCdlczYtcHJvbWlzZS9hdXRvJyk7XG4ndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vJykucG9seWZpbGwoKTtcbiIsIi8qIVxuICogQG92ZXJ2aWV3IGVzNi1wcm9taXNlIC0gYSB0aW55IGltcGxlbWVudGF0aW9uIG9mIFByb21pc2VzL0ErLlxuICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMTQgWWVodWRhIEthdHosIFRvbSBEYWxlLCBTdGVmYW4gUGVubmVyIGFuZCBjb250cmlidXRvcnMgKENvbnZlcnNpb24gdG8gRVM2IEFQSSBieSBKYWtlIEFyY2hpYmFsZClcbiAqIEBsaWNlbnNlICAgTGljZW5zZWQgdW5kZXIgTUlUIGxpY2Vuc2VcbiAqICAgICAgICAgICAgU2VlIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9zdGVmYW5wZW5uZXIvZXM2LXByb21pc2UvbWFzdGVyL0xJQ0VOU0VcbiAqIEB2ZXJzaW9uICAgdjQuMi44KzFlNjhkY2U2XG4gKi9cblxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcblx0dHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuXHR0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuXHQoZ2xvYmFsLkVTNlByb21pc2UgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIG9iamVjdE9yRnVuY3Rpb24oeCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB4O1xuICByZXR1cm4geCAhPT0gbnVsbCAmJiAodHlwZSA9PT0gJ29iamVjdCcgfHwgdHlwZSA9PT0gJ2Z1bmN0aW9uJyk7XG59XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbic7XG59XG5cblxuXG52YXIgX2lzQXJyYXkgPSB2b2lkIDA7XG5pZiAoQXJyYXkuaXNBcnJheSkge1xuICBfaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG59IGVsc2Uge1xuICBfaXNBcnJheSA9IGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4KSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcbn1cblxudmFyIGlzQXJyYXkgPSBfaXNBcnJheTtcblxudmFyIGxlbiA9IDA7XG52YXIgdmVydHhOZXh0ID0gdm9pZCAwO1xudmFyIGN1c3RvbVNjaGVkdWxlckZuID0gdm9pZCAwO1xuXG52YXIgYXNhcCA9IGZ1bmN0aW9uIGFzYXAoY2FsbGJhY2ssIGFyZykge1xuICBxdWV1ZVtsZW5dID0gY2FsbGJhY2s7XG4gIHF1ZXVlW2xlbiArIDFdID0gYXJnO1xuICBsZW4gKz0gMjtcbiAgaWYgKGxlbiA9PT0gMikge1xuICAgIC8vIElmIGxlbiBpcyAyLCB0aGF0IG1lYW5zIHRoYXQgd2UgbmVlZCB0byBzY2hlZHVsZSBhbiBhc3luYyBmbHVzaC5cbiAgICAvLyBJZiBhZGRpdGlvbmFsIGNhbGxiYWNrcyBhcmUgcXVldWVkIGJlZm9yZSB0aGUgcXVldWUgaXMgZmx1c2hlZCwgdGhleVxuICAgIC8vIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IHRoaXMgZmx1c2ggdGhhdCB3ZSBhcmUgc2NoZWR1bGluZy5cbiAgICBpZiAoY3VzdG9tU2NoZWR1bGVyRm4pIHtcbiAgICAgIGN1c3RvbVNjaGVkdWxlckZuKGZsdXNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2NoZWR1bGVGbHVzaCgpO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gc2V0U2NoZWR1bGVyKHNjaGVkdWxlRm4pIHtcbiAgY3VzdG9tU2NoZWR1bGVyRm4gPSBzY2hlZHVsZUZuO1xufVxuXG5mdW5jdGlvbiBzZXRBc2FwKGFzYXBGbikge1xuICBhc2FwID0gYXNhcEZuO1xufVxuXG52YXIgYnJvd3NlcldpbmRvdyA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdW5kZWZpbmVkO1xudmFyIGJyb3dzZXJHbG9iYWwgPSBicm93c2VyV2luZG93IHx8IHt9O1xudmFyIEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyID0gYnJvd3Nlckdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGJyb3dzZXJHbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBpc05vZGUgPSB0eXBlb2Ygc2VsZiA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHt9LnRvU3RyaW5nLmNhbGwocHJvY2VzcykgPT09ICdbb2JqZWN0IHByb2Nlc3NdJztcblxuLy8gdGVzdCBmb3Igd2ViIHdvcmtlciBidXQgbm90IGluIElFMTBcbnZhciBpc1dvcmtlciA9IHR5cGVvZiBVaW50OENsYW1wZWRBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGltcG9ydFNjcmlwdHMgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBNZXNzYWdlQ2hhbm5lbCAhPT0gJ3VuZGVmaW5lZCc7XG5cbi8vIG5vZGVcbmZ1bmN0aW9uIHVzZU5leHRUaWNrKCkge1xuICAvLyBub2RlIHZlcnNpb24gMC4xMC54IGRpc3BsYXlzIGEgZGVwcmVjYXRpb24gd2FybmluZyB3aGVuIG5leHRUaWNrIGlzIHVzZWQgcmVjdXJzaXZlbHlcbiAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jdWpvanMvd2hlbi9pc3N1ZXMvNDEwIGZvciBkZXRhaWxzXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICB9O1xufVxuXG4vLyB2ZXJ0eFxuZnVuY3Rpb24gdXNlVmVydHhUaW1lcigpIHtcbiAgaWYgKHR5cGVvZiB2ZXJ0eE5leHQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZlcnR4TmV4dChmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB1c2VTZXRUaW1lb3V0KCk7XG59XG5cbmZ1bmN0aW9uIHVzZU11dGF0aW9uT2JzZXJ2ZXIoKSB7XG4gIHZhciBpdGVyYXRpb25zID0gMDtcbiAgdmFyIG9ic2VydmVyID0gbmV3IEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyKGZsdXNoKTtcbiAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gIG9ic2VydmVyLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgbm9kZS5kYXRhID0gaXRlcmF0aW9ucyA9ICsraXRlcmF0aW9ucyAlIDI7XG4gIH07XG59XG5cbi8vIHdlYiB3b3JrZXJcbmZ1bmN0aW9uIHVzZU1lc3NhZ2VDaGFubmVsKCkge1xuICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGZsdXNoO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKDApO1xuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VTZXRUaW1lb3V0KCkge1xuICAvLyBTdG9yZSBzZXRUaW1lb3V0IHJlZmVyZW5jZSBzbyBlczYtcHJvbWlzZSB3aWxsIGJlIHVuYWZmZWN0ZWQgYnlcbiAgLy8gb3RoZXIgY29kZSBtb2RpZnlpbmcgc2V0VGltZW91dCAobGlrZSBzaW5vbi51c2VGYWtlVGltZXJzKCkpXG4gIHZhciBnbG9iYWxTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2xvYmFsU2V0VGltZW91dChmbHVzaCwgMSk7XG4gIH07XG59XG5cbnZhciBxdWV1ZSA9IG5ldyBBcnJheSgxMDAwKTtcbmZ1bmN0aW9uIGZsdXNoKCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgdmFyIGNhbGxiYWNrID0gcXVldWVbaV07XG4gICAgdmFyIGFyZyA9IHF1ZXVlW2kgKyAxXTtcblxuICAgIGNhbGxiYWNrKGFyZyk7XG5cbiAgICBxdWV1ZVtpXSA9IHVuZGVmaW5lZDtcbiAgICBxdWV1ZVtpICsgMV0gPSB1bmRlZmluZWQ7XG4gIH1cblxuICBsZW4gPSAwO1xufVxuXG5mdW5jdGlvbiBhdHRlbXB0VmVydHgoKSB7XG4gIHRyeSB7XG4gICAgdmFyIHZlcnR4ID0gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKS5yZXF1aXJlKCd2ZXJ0eCcpO1xuICAgIHZlcnR4TmV4dCA9IHZlcnR4LnJ1bk9uTG9vcCB8fCB2ZXJ0eC5ydW5PbkNvbnRleHQ7XG4gICAgcmV0dXJuIHVzZVZlcnR4VGltZXIoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB1c2VTZXRUaW1lb3V0KCk7XG4gIH1cbn1cblxudmFyIHNjaGVkdWxlRmx1c2ggPSB2b2lkIDA7XG4vLyBEZWNpZGUgd2hhdCBhc3luYyBtZXRob2QgdG8gdXNlIHRvIHRyaWdnZXJpbmcgcHJvY2Vzc2luZyBvZiBxdWV1ZWQgY2FsbGJhY2tzOlxuaWYgKGlzTm9kZSkge1xuICBzY2hlZHVsZUZsdXNoID0gdXNlTmV4dFRpY2soKTtcbn0gZWxzZSBpZiAoQnJvd3Nlck11dGF0aW9uT2JzZXJ2ZXIpIHtcbiAgc2NoZWR1bGVGbHVzaCA9IHVzZU11dGF0aW9uT2JzZXJ2ZXIoKTtcbn0gZWxzZSBpZiAoaXNXb3JrZXIpIHtcbiAgc2NoZWR1bGVGbHVzaCA9IHVzZU1lc3NhZ2VDaGFubmVsKCk7XG59IGVsc2UgaWYgKGJyb3dzZXJXaW5kb3cgPT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJykge1xuICBzY2hlZHVsZUZsdXNoID0gYXR0ZW1wdFZlcnR4KCk7XG59IGVsc2Uge1xuICBzY2hlZHVsZUZsdXNoID0gdXNlU2V0VGltZW91dCgpO1xufVxuXG5mdW5jdGlvbiB0aGVuKG9uRnVsZmlsbG1lbnQsIG9uUmVqZWN0aW9uKSB7XG4gIHZhciBwYXJlbnQgPSB0aGlzO1xuXG4gIHZhciBjaGlsZCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKG5vb3ApO1xuXG4gIGlmIChjaGlsZFtQUk9NSVNFX0lEXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbWFrZVByb21pc2UoY2hpbGQpO1xuICB9XG5cbiAgdmFyIF9zdGF0ZSA9IHBhcmVudC5fc3RhdGU7XG5cblxuICBpZiAoX3N0YXRlKSB7XG4gICAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzW19zdGF0ZSAtIDFdO1xuICAgIGFzYXAoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGludm9rZUNhbGxiYWNrKF9zdGF0ZSwgY2hpbGQsIGNhbGxiYWNrLCBwYXJlbnQuX3Jlc3VsdCk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgc3Vic2NyaWJlKHBhcmVudCwgY2hpbGQsIG9uRnVsZmlsbG1lbnQsIG9uUmVqZWN0aW9uKTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZDtcbn1cblxuLyoqXG4gIGBQcm9taXNlLnJlc29sdmVgIHJldHVybnMgYSBwcm9taXNlIHRoYXQgd2lsbCBiZWNvbWUgcmVzb2x2ZWQgd2l0aCB0aGVcbiAgcGFzc2VkIGB2YWx1ZWAuIEl0IGlzIHNob3J0aGFuZCBmb3IgdGhlIGZvbGxvd2luZzpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICByZXNvbHZlKDEpO1xuICB9KTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIHZhbHVlID09PSAxXG4gIH0pO1xuICBgYGBcblxuICBJbnN0ZWFkIG9mIHdyaXRpbmcgdGhlIGFib3ZlLCB5b3VyIGNvZGUgbm93IHNpbXBseSBiZWNvbWVzIHRoZSBmb2xsb3dpbmc6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgxKTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIHZhbHVlID09PSAxXG4gIH0pO1xuICBgYGBcblxuICBAbWV0aG9kIHJlc29sdmVcbiAgQHN0YXRpY1xuICBAcGFyYW0ge0FueX0gdmFsdWUgdmFsdWUgdGhhdCB0aGUgcmV0dXJuZWQgcHJvbWlzZSB3aWxsIGJlIHJlc29sdmVkIHdpdGhcbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UgdGhhdCB3aWxsIGJlY29tZSBmdWxmaWxsZWQgd2l0aCB0aGUgZ2l2ZW5cbiAgYHZhbHVlYFxuKi9cbmZ1bmN0aW9uIHJlc29sdmUkMShvYmplY3QpIHtcbiAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgdmFyIENvbnN0cnVjdG9yID0gdGhpcztcblxuICBpZiAob2JqZWN0ICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdC5jb25zdHJ1Y3RvciA9PT0gQ29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gb2JqZWN0O1xuICB9XG5cbiAgdmFyIHByb21pc2UgPSBuZXcgQ29uc3RydWN0b3Iobm9vcCk7XG4gIHJlc29sdmUocHJvbWlzZSwgb2JqZWN0KTtcbiAgcmV0dXJuIHByb21pc2U7XG59XG5cbnZhciBQUk9NSVNFX0lEID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIpO1xuXG5mdW5jdGlvbiBub29wKCkge31cblxudmFyIFBFTkRJTkcgPSB2b2lkIDA7XG52YXIgRlVMRklMTEVEID0gMTtcbnZhciBSRUpFQ1RFRCA9IDI7XG5cbmZ1bmN0aW9uIHNlbGZGdWxmaWxsbWVudCgpIHtcbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJZb3UgY2Fubm90IHJlc29sdmUgYSBwcm9taXNlIHdpdGggaXRzZWxmXCIpO1xufVxuXG5mdW5jdGlvbiBjYW5ub3RSZXR1cm5Pd24oKSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKCdBIHByb21pc2VzIGNhbGxiYWNrIGNhbm5vdCByZXR1cm4gdGhhdCBzYW1lIHByb21pc2UuJyk7XG59XG5cbmZ1bmN0aW9uIHRyeVRoZW4odGhlbiQkMSwgdmFsdWUsIGZ1bGZpbGxtZW50SGFuZGxlciwgcmVqZWN0aW9uSGFuZGxlcikge1xuICB0cnkge1xuICAgIHRoZW4kJDEuY2FsbCh2YWx1ZSwgZnVsZmlsbG1lbnRIYW5kbGVyLCByZWplY3Rpb25IYW5kbGVyKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUZvcmVpZ25UaGVuYWJsZShwcm9taXNlLCB0aGVuYWJsZSwgdGhlbiQkMSkge1xuICBhc2FwKGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgdmFyIHNlYWxlZCA9IGZhbHNlO1xuICAgIHZhciBlcnJvciA9IHRyeVRoZW4odGhlbiQkMSwgdGhlbmFibGUsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKHNlYWxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZWFsZWQgPSB0cnVlO1xuICAgICAgaWYgKHRoZW5hYmxlICE9PSB2YWx1ZSkge1xuICAgICAgICByZXNvbHZlKHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIGlmIChzZWFsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2VhbGVkID0gdHJ1ZTtcblxuICAgICAgcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgfSwgJ1NldHRsZTogJyArIChwcm9taXNlLl9sYWJlbCB8fCAnIHVua25vd24gcHJvbWlzZScpKTtcblxuICAgIGlmICghc2VhbGVkICYmIGVycm9yKSB7XG4gICAgICBzZWFsZWQgPSB0cnVlO1xuICAgICAgcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICB9XG4gIH0sIHByb21pc2UpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVPd25UaGVuYWJsZShwcm9taXNlLCB0aGVuYWJsZSkge1xuICBpZiAodGhlbmFibGUuX3N0YXRlID09PSBGVUxGSUxMRUQpIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHRoZW5hYmxlLl9yZXN1bHQpO1xuICB9IGVsc2UgaWYgKHRoZW5hYmxlLl9zdGF0ZSA9PT0gUkVKRUNURUQpIHtcbiAgICByZWplY3QocHJvbWlzZSwgdGhlbmFibGUuX3Jlc3VsdCk7XG4gIH0gZWxzZSB7XG4gICAgc3Vic2NyaWJlKHRoZW5hYmxlLCB1bmRlZmluZWQsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHJlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIHJldHVybiByZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIG1heWJlVGhlbmFibGUsIHRoZW4kJDEpIHtcbiAgaWYgKG1heWJlVGhlbmFibGUuY29uc3RydWN0b3IgPT09IHByb21pc2UuY29uc3RydWN0b3IgJiYgdGhlbiQkMSA9PT0gdGhlbiAmJiBtYXliZVRoZW5hYmxlLmNvbnN0cnVjdG9yLnJlc29sdmUgPT09IHJlc29sdmUkMSkge1xuICAgIGhhbmRsZU93blRoZW5hYmxlKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICB9IGVsc2Uge1xuICAgIGlmICh0aGVuJCQxID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZ1bGZpbGwocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7XG4gICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKHRoZW4kJDEpKSB7XG4gICAgICBoYW5kbGVGb3JlaWduVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSwgdGhlbiQkMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZ1bGZpbGwocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmUocHJvbWlzZSwgdmFsdWUpIHtcbiAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB7XG4gICAgcmVqZWN0KHByb21pc2UsIHNlbGZGdWxmaWxsbWVudCgpKTtcbiAgfSBlbHNlIGlmIChvYmplY3RPckZ1bmN0aW9uKHZhbHVlKSkge1xuICAgIHZhciB0aGVuJCQxID0gdm9pZCAwO1xuICAgIHRyeSB7XG4gICAgICB0aGVuJCQxID0gdmFsdWUudGhlbjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaGFuZGxlTWF5YmVUaGVuYWJsZShwcm9taXNlLCB2YWx1ZSwgdGhlbiQkMSk7XG4gIH0gZWxzZSB7XG4gICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHVibGlzaFJlamVjdGlvbihwcm9taXNlKSB7XG4gIGlmIChwcm9taXNlLl9vbmVycm9yKSB7XG4gICAgcHJvbWlzZS5fb25lcnJvcihwcm9taXNlLl9yZXN1bHQpO1xuICB9XG5cbiAgcHVibGlzaChwcm9taXNlKTtcbn1cblxuZnVuY3Rpb24gZnVsZmlsbChwcm9taXNlLCB2YWx1ZSkge1xuICBpZiAocHJvbWlzZS5fc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBwcm9taXNlLl9yZXN1bHQgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fc3RhdGUgPSBGVUxGSUxMRUQ7XG5cbiAgaWYgKHByb21pc2UuX3N1YnNjcmliZXJzLmxlbmd0aCAhPT0gMCkge1xuICAgIGFzYXAocHVibGlzaCwgcHJvbWlzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVqZWN0KHByb21pc2UsIHJlYXNvbikge1xuICBpZiAocHJvbWlzZS5fc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJvbWlzZS5fc3RhdGUgPSBSRUpFQ1RFRDtcbiAgcHJvbWlzZS5fcmVzdWx0ID0gcmVhc29uO1xuXG4gIGFzYXAocHVibGlzaFJlamVjdGlvbiwgcHJvbWlzZSk7XG59XG5cbmZ1bmN0aW9uIHN1YnNjcmliZShwYXJlbnQsIGNoaWxkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICB2YXIgX3N1YnNjcmliZXJzID0gcGFyZW50Ll9zdWJzY3JpYmVycztcbiAgdmFyIGxlbmd0aCA9IF9zdWJzY3JpYmVycy5sZW5ndGg7XG5cblxuICBwYXJlbnQuX29uZXJyb3IgPSBudWxsO1xuXG4gIF9zdWJzY3JpYmVyc1tsZW5ndGhdID0gY2hpbGQ7XG4gIF9zdWJzY3JpYmVyc1tsZW5ndGggKyBGVUxGSUxMRURdID0gb25GdWxmaWxsbWVudDtcbiAgX3N1YnNjcmliZXJzW2xlbmd0aCArIFJFSkVDVEVEXSA9IG9uUmVqZWN0aW9uO1xuXG4gIGlmIChsZW5ndGggPT09IDAgJiYgcGFyZW50Ll9zdGF0ZSkge1xuICAgIGFzYXAocHVibGlzaCwgcGFyZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwdWJsaXNoKHByb21pc2UpIHtcbiAgdmFyIHN1YnNjcmliZXJzID0gcHJvbWlzZS5fc3Vic2NyaWJlcnM7XG4gIHZhciBzZXR0bGVkID0gcHJvbWlzZS5fc3RhdGU7XG5cbiAgaWYgKHN1YnNjcmliZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBjaGlsZCA9IHZvaWQgMCxcbiAgICAgIGNhbGxiYWNrID0gdm9pZCAwLFxuICAgICAgZGV0YWlsID0gcHJvbWlzZS5fcmVzdWx0O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3Vic2NyaWJlcnMubGVuZ3RoOyBpICs9IDMpIHtcbiAgICBjaGlsZCA9IHN1YnNjcmliZXJzW2ldO1xuICAgIGNhbGxiYWNrID0gc3Vic2NyaWJlcnNbaSArIHNldHRsZWRdO1xuXG4gICAgaWYgKGNoaWxkKSB7XG4gICAgICBpbnZva2VDYWxsYmFjayhzZXR0bGVkLCBjaGlsZCwgY2FsbGJhY2ssIGRldGFpbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKGRldGFpbCk7XG4gICAgfVxuICB9XG5cbiAgcHJvbWlzZS5fc3Vic2NyaWJlcnMubGVuZ3RoID0gMDtcbn1cblxuZnVuY3Rpb24gaW52b2tlQ2FsbGJhY2soc2V0dGxlZCwgcHJvbWlzZSwgY2FsbGJhY2ssIGRldGFpbCkge1xuICB2YXIgaGFzQ2FsbGJhY2sgPSBpc0Z1bmN0aW9uKGNhbGxiYWNrKSxcbiAgICAgIHZhbHVlID0gdm9pZCAwLFxuICAgICAgZXJyb3IgPSB2b2lkIDAsXG4gICAgICBzdWNjZWVkZWQgPSB0cnVlO1xuXG4gIGlmIChoYXNDYWxsYmFjaykge1xuICAgIHRyeSB7XG4gICAgICB2YWx1ZSA9IGNhbGxiYWNrKGRldGFpbCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc3VjY2VlZGVkID0gZmFsc2U7XG4gICAgICBlcnJvciA9IGU7XG4gICAgfVxuXG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB7XG4gICAgICByZWplY3QocHJvbWlzZSwgY2Fubm90UmV0dXJuT3duKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IGRldGFpbDtcbiAgfVxuXG4gIGlmIChwcm9taXNlLl9zdGF0ZSAhPT0gUEVORElORykge1xuICAgIC8vIG5vb3BcbiAgfSBlbHNlIGlmIChoYXNDYWxsYmFjayAmJiBzdWNjZWVkZWQpIHtcbiAgICByZXNvbHZlKHByb21pc2UsIHZhbHVlKTtcbiAgfSBlbHNlIGlmIChzdWNjZWVkZWQgPT09IGZhbHNlKSB7XG4gICAgcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgfSBlbHNlIGlmIChzZXR0bGVkID09PSBGVUxGSUxMRUQpIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHZhbHVlKTtcbiAgfSBlbHNlIGlmIChzZXR0bGVkID09PSBSRUpFQ1RFRCkge1xuICAgIHJlamVjdChwcm9taXNlLCB2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdGlhbGl6ZVByb21pc2UocHJvbWlzZSwgcmVzb2x2ZXIpIHtcbiAgdHJ5IHtcbiAgICByZXNvbHZlcihmdW5jdGlvbiByZXNvbHZlUHJvbWlzZSh2YWx1ZSkge1xuICAgICAgcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSwgZnVuY3Rpb24gcmVqZWN0UHJvbWlzZShyZWFzb24pIHtcbiAgICAgIHJlamVjdChwcm9taXNlLCByZWFzb24pO1xuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmVqZWN0KHByb21pc2UsIGUpO1xuICB9XG59XG5cbnZhciBpZCA9IDA7XG5mdW5jdGlvbiBuZXh0SWQoKSB7XG4gIHJldHVybiBpZCsrO1xufVxuXG5mdW5jdGlvbiBtYWtlUHJvbWlzZShwcm9taXNlKSB7XG4gIHByb21pc2VbUFJPTUlTRV9JRF0gPSBpZCsrO1xuICBwcm9taXNlLl9zdGF0ZSA9IHVuZGVmaW5lZDtcbiAgcHJvbWlzZS5fcmVzdWx0ID0gdW5kZWZpbmVkO1xuICBwcm9taXNlLl9zdWJzY3JpYmVycyA9IFtdO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0aW9uRXJyb3IoKSB7XG4gIHJldHVybiBuZXcgRXJyb3IoJ0FycmF5IE1ldGhvZHMgbXVzdCBiZSBwcm92aWRlZCBhbiBBcnJheScpO1xufVxuXG52YXIgRW51bWVyYXRvciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRW51bWVyYXRvcihDb25zdHJ1Y3RvciwgaW5wdXQpIHtcbiAgICB0aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3I7XG4gICAgdGhpcy5wcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuXG4gICAgaWYgKCF0aGlzLnByb21pc2VbUFJPTUlTRV9JRF0pIHtcbiAgICAgIG1ha2VQcm9taXNlKHRoaXMucHJvbWlzZSk7XG4gICAgfVxuXG4gICAgaWYgKGlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICB0aGlzLmxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcbiAgICAgIHRoaXMuX3JlbWFpbmluZyA9IGlucHV0Lmxlbmd0aDtcblxuICAgICAgdGhpcy5fcmVzdWx0ID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcblxuICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGZ1bGZpbGwodGhpcy5wcm9taXNlLCB0aGlzLl9yZXN1bHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLmxlbmd0aCB8fCAwO1xuICAgICAgICB0aGlzLl9lbnVtZXJhdGUoaW5wdXQpO1xuICAgICAgICBpZiAodGhpcy5fcmVtYWluaW5nID09PSAwKSB7XG4gICAgICAgICAgZnVsZmlsbCh0aGlzLnByb21pc2UsIHRoaXMuX3Jlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVqZWN0KHRoaXMucHJvbWlzZSwgdmFsaWRhdGlvbkVycm9yKCkpO1xuICAgIH1cbiAgfVxuXG4gIEVudW1lcmF0b3IucHJvdG90eXBlLl9lbnVtZXJhdGUgPSBmdW5jdGlvbiBfZW51bWVyYXRlKGlucHV0KSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IHRoaXMuX3N0YXRlID09PSBQRU5ESU5HICYmIGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5fZWFjaEVudHJ5KGlucHV0W2ldLCBpKTtcbiAgICB9XG4gIH07XG5cbiAgRW51bWVyYXRvci5wcm90b3R5cGUuX2VhY2hFbnRyeSA9IGZ1bmN0aW9uIF9lYWNoRW50cnkoZW50cnksIGkpIHtcbiAgICB2YXIgYyA9IHRoaXMuX2luc3RhbmNlQ29uc3RydWN0b3I7XG4gICAgdmFyIHJlc29sdmUkJDEgPSBjLnJlc29sdmU7XG5cblxuICAgIGlmIChyZXNvbHZlJCQxID09PSByZXNvbHZlJDEpIHtcbiAgICAgIHZhciBfdGhlbiA9IHZvaWQgMDtcbiAgICAgIHZhciBlcnJvciA9IHZvaWQgMDtcbiAgICAgIHZhciBkaWRFcnJvciA9IGZhbHNlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgX3RoZW4gPSBlbnRyeS50aGVuO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBkaWRFcnJvciA9IHRydWU7XG4gICAgICAgIGVycm9yID0gZTtcbiAgICAgIH1cblxuICAgICAgaWYgKF90aGVuID09PSB0aGVuICYmIGVudHJ5Ll9zdGF0ZSAhPT0gUEVORElORykge1xuICAgICAgICB0aGlzLl9zZXR0bGVkQXQoZW50cnkuX3N0YXRlLCBpLCBlbnRyeS5fcmVzdWx0KTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIF90aGVuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuX3JlbWFpbmluZy0tO1xuICAgICAgICB0aGlzLl9yZXN1bHRbaV0gPSBlbnRyeTtcbiAgICAgIH0gZWxzZSBpZiAoYyA9PT0gUHJvbWlzZSQxKSB7XG4gICAgICAgIHZhciBwcm9taXNlID0gbmV3IGMobm9vcCk7XG4gICAgICAgIGlmIChkaWRFcnJvcikge1xuICAgICAgICAgIHJlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGFuZGxlTWF5YmVUaGVuYWJsZShwcm9taXNlLCBlbnRyeSwgX3RoZW4pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3dpbGxTZXR0bGVBdChwcm9taXNlLCBpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3dpbGxTZXR0bGVBdChuZXcgYyhmdW5jdGlvbiAocmVzb2x2ZSQkMSkge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlJCQxKGVudHJ5KTtcbiAgICAgICAgfSksIGkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl93aWxsU2V0dGxlQXQocmVzb2x2ZSQkMShlbnRyeSksIGkpO1xuICAgIH1cbiAgfTtcblxuICBFbnVtZXJhdG9yLnByb3RvdHlwZS5fc2V0dGxlZEF0ID0gZnVuY3Rpb24gX3NldHRsZWRBdChzdGF0ZSwgaSwgdmFsdWUpIHtcbiAgICB2YXIgcHJvbWlzZSA9IHRoaXMucHJvbWlzZTtcblxuXG4gICAgaWYgKHByb21pc2UuX3N0YXRlID09PSBQRU5ESU5HKSB7XG4gICAgICB0aGlzLl9yZW1haW5pbmctLTtcblxuICAgICAgaWYgKHN0YXRlID09PSBSRUpFQ1RFRCkge1xuICAgICAgICByZWplY3QocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fcmVzdWx0W2ldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3JlbWFpbmluZyA9PT0gMCkge1xuICAgICAgZnVsZmlsbChwcm9taXNlLCB0aGlzLl9yZXN1bHQpO1xuICAgIH1cbiAgfTtcblxuICBFbnVtZXJhdG9yLnByb3RvdHlwZS5fd2lsbFNldHRsZUF0ID0gZnVuY3Rpb24gX3dpbGxTZXR0bGVBdChwcm9taXNlLCBpKSB7XG4gICAgdmFyIGVudW1lcmF0b3IgPSB0aGlzO1xuXG4gICAgc3Vic2NyaWJlKHByb21pc2UsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZW51bWVyYXRvci5fc2V0dGxlZEF0KEZVTEZJTExFRCwgaSwgdmFsdWUpO1xuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIHJldHVybiBlbnVtZXJhdG9yLl9zZXR0bGVkQXQoUkVKRUNURUQsIGksIHJlYXNvbik7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIEVudW1lcmF0b3I7XG59KCk7XG5cbi8qKlxuICBgUHJvbWlzZS5hbGxgIGFjY2VwdHMgYW4gYXJyYXkgb2YgcHJvbWlzZXMsIGFuZCByZXR1cm5zIGEgbmV3IHByb21pc2Ugd2hpY2hcbiAgaXMgZnVsZmlsbGVkIHdpdGggYW4gYXJyYXkgb2YgZnVsZmlsbG1lbnQgdmFsdWVzIGZvciB0aGUgcGFzc2VkIHByb21pc2VzLCBvclxuICByZWplY3RlZCB3aXRoIHRoZSByZWFzb24gb2YgdGhlIGZpcnN0IHBhc3NlZCBwcm9taXNlIHRvIGJlIHJlamVjdGVkLiBJdCBjYXN0cyBhbGxcbiAgZWxlbWVudHMgb2YgdGhlIHBhc3NlZCBpdGVyYWJsZSB0byBwcm9taXNlcyBhcyBpdCBydW5zIHRoaXMgYWxnb3JpdGhtLlxuXG4gIEV4YW1wbGU6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZTEgPSByZXNvbHZlKDEpO1xuICBsZXQgcHJvbWlzZTIgPSByZXNvbHZlKDIpO1xuICBsZXQgcHJvbWlzZTMgPSByZXNvbHZlKDMpO1xuICBsZXQgcHJvbWlzZXMgPSBbIHByb21pc2UxLCBwcm9taXNlMiwgcHJvbWlzZTMgXTtcblxuICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihmdW5jdGlvbihhcnJheSl7XG4gICAgLy8gVGhlIGFycmF5IGhlcmUgd291bGQgYmUgWyAxLCAyLCAzIF07XG4gIH0pO1xuICBgYGBcblxuICBJZiBhbnkgb2YgdGhlIGBwcm9taXNlc2AgZ2l2ZW4gdG8gYGFsbGAgYXJlIHJlamVjdGVkLCB0aGUgZmlyc3QgcHJvbWlzZVxuICB0aGF0IGlzIHJlamVjdGVkIHdpbGwgYmUgZ2l2ZW4gYXMgYW4gYXJndW1lbnQgdG8gdGhlIHJldHVybmVkIHByb21pc2VzJ3NcbiAgcmVqZWN0aW9uIGhhbmRsZXIuIEZvciBleGFtcGxlOlxuXG4gIEV4YW1wbGU6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZTEgPSByZXNvbHZlKDEpO1xuICBsZXQgcHJvbWlzZTIgPSByZWplY3QobmV3IEVycm9yKFwiMlwiKSk7XG4gIGxldCBwcm9taXNlMyA9IHJlamVjdChuZXcgRXJyb3IoXCIzXCIpKTtcbiAgbGV0IHByb21pc2VzID0gWyBwcm9taXNlMSwgcHJvbWlzZTIsIHByb21pc2UzIF07XG5cbiAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24oYXJyYXkpe1xuICAgIC8vIENvZGUgaGVyZSBuZXZlciBydW5zIGJlY2F1c2UgdGhlcmUgYXJlIHJlamVjdGVkIHByb21pc2VzIVxuICB9LCBmdW5jdGlvbihlcnJvcikge1xuICAgIC8vIGVycm9yLm1lc3NhZ2UgPT09IFwiMlwiXG4gIH0pO1xuICBgYGBcblxuICBAbWV0aG9kIGFsbFxuICBAc3RhdGljXG4gIEBwYXJhbSB7QXJyYXl9IGVudHJpZXMgYXJyYXkgb2YgcHJvbWlzZXNcbiAgQHBhcmFtIHtTdHJpbmd9IGxhYmVsIG9wdGlvbmFsIHN0cmluZyBmb3IgbGFiZWxpbmcgdGhlIHByb21pc2UuXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQHJldHVybiB7UHJvbWlzZX0gcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aGVuIGFsbCBgcHJvbWlzZXNgIGhhdmUgYmVlblxuICBmdWxmaWxsZWQsIG9yIHJlamVjdGVkIGlmIGFueSBvZiB0aGVtIGJlY29tZSByZWplY3RlZC5cbiAgQHN0YXRpY1xuKi9cbmZ1bmN0aW9uIGFsbChlbnRyaWVzKSB7XG4gIHJldHVybiBuZXcgRW51bWVyYXRvcih0aGlzLCBlbnRyaWVzKS5wcm9taXNlO1xufVxuXG4vKipcbiAgYFByb21pc2UucmFjZWAgcmV0dXJucyBhIG5ldyBwcm9taXNlIHdoaWNoIGlzIHNldHRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZVxuICBmaXJzdCBwYXNzZWQgcHJvbWlzZSB0byBzZXR0bGUuXG5cbiAgRXhhbXBsZTpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlMSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgcmVzb2x2ZSgncHJvbWlzZSAxJyk7XG4gICAgfSwgMjAwKTtcbiAgfSk7XG5cbiAgbGV0IHByb21pc2UyID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXNvbHZlKCdwcm9taXNlIDInKTtcbiAgICB9LCAxMDApO1xuICB9KTtcblxuICBQcm9taXNlLnJhY2UoW3Byb21pc2UxLCBwcm9taXNlMl0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcbiAgICAvLyByZXN1bHQgPT09ICdwcm9taXNlIDInIGJlY2F1c2UgaXQgd2FzIHJlc29sdmVkIGJlZm9yZSBwcm9taXNlMVxuICAgIC8vIHdhcyByZXNvbHZlZC5cbiAgfSk7XG4gIGBgYFxuXG4gIGBQcm9taXNlLnJhY2VgIGlzIGRldGVybWluaXN0aWMgaW4gdGhhdCBvbmx5IHRoZSBzdGF0ZSBvZiB0aGUgZmlyc3RcbiAgc2V0dGxlZCBwcm9taXNlIG1hdHRlcnMuIEZvciBleGFtcGxlLCBldmVuIGlmIG90aGVyIHByb21pc2VzIGdpdmVuIHRvIHRoZVxuICBgcHJvbWlzZXNgIGFycmF5IGFyZ3VtZW50IGFyZSByZXNvbHZlZCwgYnV0IHRoZSBmaXJzdCBzZXR0bGVkIHByb21pc2UgaGFzXG4gIGJlY29tZSByZWplY3RlZCBiZWZvcmUgdGhlIG90aGVyIHByb21pc2VzIGJlY2FtZSBmdWxmaWxsZWQsIHRoZSByZXR1cm5lZFxuICBwcm9taXNlIHdpbGwgYmVjb21lIHJlamVjdGVkOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UxID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXNvbHZlKCdwcm9taXNlIDEnKTtcbiAgICB9LCAyMDApO1xuICB9KTtcblxuICBsZXQgcHJvbWlzZTIgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoJ3Byb21pc2UgMicpKTtcbiAgICB9LCAxMDApO1xuICB9KTtcblxuICBQcm9taXNlLnJhY2UoW3Byb21pc2UxLCBwcm9taXNlMl0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcbiAgICAvLyBDb2RlIGhlcmUgbmV2ZXIgcnVuc1xuICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAncHJvbWlzZSAyJyBiZWNhdXNlIHByb21pc2UgMiBiZWNhbWUgcmVqZWN0ZWQgYmVmb3JlXG4gICAgLy8gcHJvbWlzZSAxIGJlY2FtZSBmdWxmaWxsZWRcbiAgfSk7XG4gIGBgYFxuXG4gIEFuIGV4YW1wbGUgcmVhbC13b3JsZCB1c2UgY2FzZSBpcyBpbXBsZW1lbnRpbmcgdGltZW91dHM6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBQcm9taXNlLnJhY2UoW2FqYXgoJ2Zvby5qc29uJyksIHRpbWVvdXQoNTAwMCldKVxuICBgYGBcblxuICBAbWV0aG9kIHJhY2VcbiAgQHN0YXRpY1xuICBAcGFyYW0ge0FycmF5fSBwcm9taXNlcyBhcnJheSBvZiBwcm9taXNlcyB0byBvYnNlcnZlXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNlIHdoaWNoIHNldHRsZXMgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBmaXJzdCBwYXNzZWRcbiAgcHJvbWlzZSB0byBzZXR0bGUuXG4qL1xuZnVuY3Rpb24gcmFjZShlbnRyaWVzKSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgaWYgKCFpc0FycmF5KGVudHJpZXMpKSB7XG4gICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RvcihmdW5jdGlvbiAoXywgcmVqZWN0KSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1lvdSBtdXN0IHBhc3MgYW4gYXJyYXkgdG8gcmFjZS4nKSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gZW50cmllcy5sZW5ndGg7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIENvbnN0cnVjdG9yLnJlc29sdmUoZW50cmllc1tpXSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICBgUHJvbWlzZS5yZWplY3RgIHJldHVybnMgYSBwcm9taXNlIHJlamVjdGVkIHdpdGggdGhlIHBhc3NlZCBgcmVhc29uYC5cbiAgSXQgaXMgc2hvcnRoYW5kIGZvciB0aGUgZm9sbG93aW5nOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHJlamVjdChuZXcgRXJyb3IoJ1dIT09QUycpKTtcbiAgfSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAvLyBDb2RlIGhlcmUgZG9lc24ndCBydW4gYmVjYXVzZSB0aGUgcHJvbWlzZSBpcyByZWplY3RlZCFcbiAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAvLyByZWFzb24ubWVzc2FnZSA9PT0gJ1dIT09QUydcbiAgfSk7XG4gIGBgYFxuXG4gIEluc3RlYWQgb2Ygd3JpdGluZyB0aGUgYWJvdmUsIHlvdXIgY29kZSBub3cgc2ltcGx5IGJlY29tZXMgdGhlIGZvbGxvd2luZzpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlID0gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdXSE9PUFMnKSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAvLyBDb2RlIGhlcmUgZG9lc24ndCBydW4gYmVjYXVzZSB0aGUgcHJvbWlzZSBpcyByZWplY3RlZCFcbiAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAvLyByZWFzb24ubWVzc2FnZSA9PT0gJ1dIT09QUydcbiAgfSk7XG4gIGBgYFxuXG4gIEBtZXRob2QgcmVqZWN0XG4gIEBzdGF0aWNcbiAgQHBhcmFtIHtBbnl9IHJlYXNvbiB2YWx1ZSB0aGF0IHRoZSByZXR1cm5lZCBwcm9taXNlIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aC5cbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UgcmVqZWN0ZWQgd2l0aCB0aGUgZ2l2ZW4gYHJlYXNvbmAuXG4qL1xuZnVuY3Rpb24gcmVqZWN0JDEocmVhc29uKSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG4gIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuICByZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIG5lZWRzUmVzb2x2ZXIoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ1lvdSBtdXN0IHBhc3MgYSByZXNvbHZlciBmdW5jdGlvbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIHByb21pc2UgY29uc3RydWN0b3InKTtcbn1cblxuZnVuY3Rpb24gbmVlZHNOZXcoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdQcm9taXNlJzogUGxlYXNlIHVzZSB0aGUgJ25ldycgb3BlcmF0b3IsIHRoaXMgb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG59XG5cbi8qKlxuICBQcm9taXNlIG9iamVjdHMgcmVwcmVzZW50IHRoZSBldmVudHVhbCByZXN1bHQgb2YgYW4gYXN5bmNocm9ub3VzIG9wZXJhdGlvbi4gVGhlXG4gIHByaW1hcnkgd2F5IG9mIGludGVyYWN0aW5nIHdpdGggYSBwcm9taXNlIGlzIHRocm91Z2ggaXRzIGB0aGVuYCBtZXRob2QsIHdoaWNoXG4gIHJlZ2lzdGVycyBjYWxsYmFja3MgdG8gcmVjZWl2ZSBlaXRoZXIgYSBwcm9taXNlJ3MgZXZlbnR1YWwgdmFsdWUgb3IgdGhlIHJlYXNvblxuICB3aHkgdGhlIHByb21pc2UgY2Fubm90IGJlIGZ1bGZpbGxlZC5cblxuICBUZXJtaW5vbG9neVxuICAtLS0tLS0tLS0tLVxuXG4gIC0gYHByb21pc2VgIGlzIGFuIG9iamVjdCBvciBmdW5jdGlvbiB3aXRoIGEgYHRoZW5gIG1ldGhvZCB3aG9zZSBiZWhhdmlvciBjb25mb3JtcyB0byB0aGlzIHNwZWNpZmljYXRpb24uXG4gIC0gYHRoZW5hYmxlYCBpcyBhbiBvYmplY3Qgb3IgZnVuY3Rpb24gdGhhdCBkZWZpbmVzIGEgYHRoZW5gIG1ldGhvZC5cbiAgLSBgdmFsdWVgIGlzIGFueSBsZWdhbCBKYXZhU2NyaXB0IHZhbHVlIChpbmNsdWRpbmcgdW5kZWZpbmVkLCBhIHRoZW5hYmxlLCBvciBhIHByb21pc2UpLlxuICAtIGBleGNlcHRpb25gIGlzIGEgdmFsdWUgdGhhdCBpcyB0aHJvd24gdXNpbmcgdGhlIHRocm93IHN0YXRlbWVudC5cbiAgLSBgcmVhc29uYCBpcyBhIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHdoeSBhIHByb21pc2Ugd2FzIHJlamVjdGVkLlxuICAtIGBzZXR0bGVkYCB0aGUgZmluYWwgcmVzdGluZyBzdGF0ZSBvZiBhIHByb21pc2UsIGZ1bGZpbGxlZCBvciByZWplY3RlZC5cblxuICBBIHByb21pc2UgY2FuIGJlIGluIG9uZSBvZiB0aHJlZSBzdGF0ZXM6IHBlbmRpbmcsIGZ1bGZpbGxlZCwgb3IgcmVqZWN0ZWQuXG5cbiAgUHJvbWlzZXMgdGhhdCBhcmUgZnVsZmlsbGVkIGhhdmUgYSBmdWxmaWxsbWVudCB2YWx1ZSBhbmQgYXJlIGluIHRoZSBmdWxmaWxsZWRcbiAgc3RhdGUuICBQcm9taXNlcyB0aGF0IGFyZSByZWplY3RlZCBoYXZlIGEgcmVqZWN0aW9uIHJlYXNvbiBhbmQgYXJlIGluIHRoZVxuICByZWplY3RlZCBzdGF0ZS4gIEEgZnVsZmlsbG1lbnQgdmFsdWUgaXMgbmV2ZXIgYSB0aGVuYWJsZS5cblxuICBQcm9taXNlcyBjYW4gYWxzbyBiZSBzYWlkIHRvICpyZXNvbHZlKiBhIHZhbHVlLiAgSWYgdGhpcyB2YWx1ZSBpcyBhbHNvIGFcbiAgcHJvbWlzZSwgdGhlbiB0aGUgb3JpZ2luYWwgcHJvbWlzZSdzIHNldHRsZWQgc3RhdGUgd2lsbCBtYXRjaCB0aGUgdmFsdWUnc1xuICBzZXR0bGVkIHN0YXRlLiAgU28gYSBwcm9taXNlIHRoYXQgKnJlc29sdmVzKiBhIHByb21pc2UgdGhhdCByZWplY3RzIHdpbGxcbiAgaXRzZWxmIHJlamVjdCwgYW5kIGEgcHJvbWlzZSB0aGF0ICpyZXNvbHZlcyogYSBwcm9taXNlIHRoYXQgZnVsZmlsbHMgd2lsbFxuICBpdHNlbGYgZnVsZmlsbC5cblxuXG4gIEJhc2ljIFVzYWdlOlxuICAtLS0tLS0tLS0tLS1cblxuICBgYGBqc1xuICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIC8vIG9uIHN1Y2Nlc3NcbiAgICByZXNvbHZlKHZhbHVlKTtcblxuICAgIC8vIG9uIGZhaWx1cmVcbiAgICByZWplY3QocmVhc29uKTtcbiAgfSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgLy8gb24gZnVsZmlsbG1lbnRcbiAgfSwgZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgLy8gb24gcmVqZWN0aW9uXG4gIH0pO1xuICBgYGBcblxuICBBZHZhbmNlZCBVc2FnZTpcbiAgLS0tLS0tLS0tLS0tLS0tXG5cbiAgUHJvbWlzZXMgc2hpbmUgd2hlbiBhYnN0cmFjdGluZyBhd2F5IGFzeW5jaHJvbm91cyBpbnRlcmFjdGlvbnMgc3VjaCBhc1xuICBgWE1MSHR0cFJlcXVlc3Rgcy5cblxuICBgYGBqc1xuICBmdW5jdGlvbiBnZXRKU09OKHVybCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgICAgbGV0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgICB4aHIub3BlbignR0VUJywgdXJsKTtcbiAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBoYW5kbGVyO1xuICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdqc29uJztcbiAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdBY2NlcHQnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgICAgeGhyLnNlbmQoKTtcblxuICAgICAgZnVuY3Rpb24gaGFuZGxlcigpIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PT0gdGhpcy5ET05FKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgIHJlc29sdmUodGhpcy5yZXNwb25zZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ2dldEpTT046IGAnICsgdXJsICsgJ2AgZmFpbGVkIHdpdGggc3RhdHVzOiBbJyArIHRoaXMuc3RhdHVzICsgJ10nKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0SlNPTignL3Bvc3RzLmpzb24nKS50aGVuKGZ1bmN0aW9uKGpzb24pIHtcbiAgICAvLyBvbiBmdWxmaWxsbWVudFxuICB9LCBmdW5jdGlvbihyZWFzb24pIHtcbiAgICAvLyBvbiByZWplY3Rpb25cbiAgfSk7XG4gIGBgYFxuXG4gIFVubGlrZSBjYWxsYmFja3MsIHByb21pc2VzIGFyZSBncmVhdCBjb21wb3NhYmxlIHByaW1pdGl2ZXMuXG5cbiAgYGBganNcbiAgUHJvbWlzZS5hbGwoW1xuICAgIGdldEpTT04oJy9wb3N0cycpLFxuICAgIGdldEpTT04oJy9jb21tZW50cycpXG4gIF0pLnRoZW4oZnVuY3Rpb24odmFsdWVzKXtcbiAgICB2YWx1ZXNbMF0gLy8gPT4gcG9zdHNKU09OXG4gICAgdmFsdWVzWzFdIC8vID0+IGNvbW1lbnRzSlNPTlxuXG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfSk7XG4gIGBgYFxuXG4gIEBjbGFzcyBQcm9taXNlXG4gIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmVyXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQGNvbnN0cnVjdG9yXG4qL1xuXG52YXIgUHJvbWlzZSQxID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBQcm9taXNlKHJlc29sdmVyKSB7XG4gICAgdGhpc1tQUk9NSVNFX0lEXSA9IG5leHRJZCgpO1xuICAgIHRoaXMuX3Jlc3VsdCA9IHRoaXMuX3N0YXRlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3N1YnNjcmliZXJzID0gW107XG5cbiAgICBpZiAobm9vcCAhPT0gcmVzb2x2ZXIpIHtcbiAgICAgIHR5cGVvZiByZXNvbHZlciAhPT0gJ2Z1bmN0aW9uJyAmJiBuZWVkc1Jlc29sdmVyKCk7XG4gICAgICB0aGlzIGluc3RhbmNlb2YgUHJvbWlzZSA/IGluaXRpYWxpemVQcm9taXNlKHRoaXMsIHJlc29sdmVyKSA6IG5lZWRzTmV3KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gIFRoZSBwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9kLFxuICB3aGljaCByZWdpc3RlcnMgY2FsbGJhY2tzIHRvIHJlY2VpdmUgZWl0aGVyIGEgcHJvbWlzZSdzIGV2ZW50dWFsIHZhbHVlIG9yIHRoZVxuICByZWFzb24gd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuXG4gICBgYGBqc1xuICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24odXNlcil7XG4gICAgLy8gdXNlciBpcyBhdmFpbGFibGVcbiAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAvLyB1c2VyIGlzIHVuYXZhaWxhYmxlLCBhbmQgeW91IGFyZSBnaXZlbiB0aGUgcmVhc29uIHdoeVxuICB9KTtcbiAgYGBgXG4gICBDaGFpbmluZ1xuICAtLS0tLS0tLVxuICAgVGhlIHJldHVybiB2YWx1ZSBvZiBgdGhlbmAgaXMgaXRzZWxmIGEgcHJvbWlzZS4gIFRoaXMgc2Vjb25kLCAnZG93bnN0cmVhbSdcbiAgcHJvbWlzZSBpcyByZXNvbHZlZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZpcnN0IHByb21pc2UncyBmdWxmaWxsbWVudFxuICBvciByZWplY3Rpb24gaGFuZGxlciwgb3IgcmVqZWN0ZWQgaWYgdGhlIGhhbmRsZXIgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cbiAgIGBgYGpzXG4gIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgIHJldHVybiB1c2VyLm5hbWU7XG4gIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICByZXR1cm4gJ2RlZmF1bHQgbmFtZSc7XG4gIH0pLnRoZW4oZnVuY3Rpb24gKHVzZXJOYW1lKSB7XG4gICAgLy8gSWYgYGZpbmRVc2VyYCBmdWxmaWxsZWQsIGB1c2VyTmFtZWAgd2lsbCBiZSB0aGUgdXNlcidzIG5hbWUsIG90aGVyd2lzZSBpdFxuICAgIC8vIHdpbGwgYmUgYCdkZWZhdWx0IG5hbWUnYFxuICB9KTtcbiAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgIHRocm93IG5ldyBFcnJvcignRm91bmQgdXNlciwgYnV0IHN0aWxsIHVuaGFwcHknKTtcbiAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignYGZpbmRVc2VyYCByZWplY3RlZCBhbmQgd2UncmUgdW5oYXBweScpO1xuICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgIC8vIGlmIGBmaW5kVXNlcmAgZnVsZmlsbGVkLCBgcmVhc29uYCB3aWxsIGJlICdGb3VuZCB1c2VyLCBidXQgc3RpbGwgdW5oYXBweScuXG4gICAgLy8gSWYgYGZpbmRVc2VyYCByZWplY3RlZCwgYHJlYXNvbmAgd2lsbCBiZSAnYGZpbmRVc2VyYCByZWplY3RlZCBhbmQgd2UncmUgdW5oYXBweScuXG4gIH0pO1xuICBgYGBcbiAgSWYgdGhlIGRvd25zdHJlYW0gcHJvbWlzZSBkb2VzIG5vdCBzcGVjaWZ5IGEgcmVqZWN0aW9uIGhhbmRsZXIsIHJlamVjdGlvbiByZWFzb25zIHdpbGwgYmUgcHJvcGFnYXRlZCBmdXJ0aGVyIGRvd25zdHJlYW0uXG4gICBgYGBqc1xuICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICB0aHJvdyBuZXcgUGVkYWdvZ2ljYWxFeGNlcHRpb24oJ1Vwc3RyZWFtIGVycm9yJyk7XG4gIH0pLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgLy8gbmV2ZXIgcmVhY2hlZFxuICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgIC8vIFRoZSBgUGVkZ2Fnb2NpYWxFeGNlcHRpb25gIGlzIHByb3BhZ2F0ZWQgYWxsIHRoZSB3YXkgZG93biB0byBoZXJlXG4gIH0pO1xuICBgYGBcbiAgIEFzc2ltaWxhdGlvblxuICAtLS0tLS0tLS0tLS1cbiAgIFNvbWV0aW1lcyB0aGUgdmFsdWUgeW91IHdhbnQgdG8gcHJvcGFnYXRlIHRvIGEgZG93bnN0cmVhbSBwcm9taXNlIGNhbiBvbmx5IGJlXG4gIHJldHJpZXZlZCBhc3luY2hyb25vdXNseS4gVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgcmV0dXJuaW5nIGEgcHJvbWlzZSBpbiB0aGVcbiAgZnVsZmlsbG1lbnQgb3IgcmVqZWN0aW9uIGhhbmRsZXIuIFRoZSBkb3duc3RyZWFtIHByb21pc2Ugd2lsbCB0aGVuIGJlIHBlbmRpbmdcbiAgdW50aWwgdGhlIHJldHVybmVkIHByb21pc2UgaXMgc2V0dGxlZC4gVGhpcyBpcyBjYWxsZWQgKmFzc2ltaWxhdGlvbiouXG4gICBgYGBqc1xuICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICByZXR1cm4gZmluZENvbW1lbnRzQnlBdXRob3IodXNlcik7XG4gIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgLy8gVGhlIHVzZXIncyBjb21tZW50cyBhcmUgbm93IGF2YWlsYWJsZVxuICB9KTtcbiAgYGBgXG4gICBJZiB0aGUgYXNzaW1saWF0ZWQgcHJvbWlzZSByZWplY3RzLCB0aGVuIHRoZSBkb3duc3RyZWFtIHByb21pc2Ugd2lsbCBhbHNvIHJlamVjdC5cbiAgIGBgYGpzXG4gIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgIHJldHVybiBmaW5kQ29tbWVudHNCeUF1dGhvcih1c2VyKTtcbiAgfSkudGhlbihmdW5jdGlvbiAoY29tbWVudHMpIHtcbiAgICAvLyBJZiBgZmluZENvbW1lbnRzQnlBdXRob3JgIGZ1bGZpbGxzLCB3ZSdsbCBoYXZlIHRoZSB2YWx1ZSBoZXJlXG4gIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAvLyBJZiBgZmluZENvbW1lbnRzQnlBdXRob3JgIHJlamVjdHMsIHdlJ2xsIGhhdmUgdGhlIHJlYXNvbiBoZXJlXG4gIH0pO1xuICBgYGBcbiAgIFNpbXBsZSBFeGFtcGxlXG4gIC0tLS0tLS0tLS0tLS0tXG4gICBTeW5jaHJvbm91cyBFeGFtcGxlXG4gICBgYGBqYXZhc2NyaXB0XG4gIGxldCByZXN1bHQ7XG4gICB0cnkge1xuICAgIHJlc3VsdCA9IGZpbmRSZXN1bHQoKTtcbiAgICAvLyBzdWNjZXNzXG4gIH0gY2F0Y2gocmVhc29uKSB7XG4gICAgLy8gZmFpbHVyZVxuICB9XG4gIGBgYFxuICAgRXJyYmFjayBFeGFtcGxlXG4gICBgYGBqc1xuICBmaW5kUmVzdWx0KGZ1bmN0aW9uKHJlc3VsdCwgZXJyKXtcbiAgICBpZiAoZXJyKSB7XG4gICAgICAvLyBmYWlsdXJlXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHN1Y2Nlc3NcbiAgICB9XG4gIH0pO1xuICBgYGBcbiAgIFByb21pc2UgRXhhbXBsZTtcbiAgIGBgYGphdmFzY3JpcHRcbiAgZmluZFJlc3VsdCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcbiAgICAvLyBzdWNjZXNzXG4gIH0sIGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgLy8gZmFpbHVyZVxuICB9KTtcbiAgYGBgXG4gICBBZHZhbmNlZCBFeGFtcGxlXG4gIC0tLS0tLS0tLS0tLS0tXG4gICBTeW5jaHJvbm91cyBFeGFtcGxlXG4gICBgYGBqYXZhc2NyaXB0XG4gIGxldCBhdXRob3IsIGJvb2tzO1xuICAgdHJ5IHtcbiAgICBhdXRob3IgPSBmaW5kQXV0aG9yKCk7XG4gICAgYm9va3MgID0gZmluZEJvb2tzQnlBdXRob3IoYXV0aG9yKTtcbiAgICAvLyBzdWNjZXNzXG4gIH0gY2F0Y2gocmVhc29uKSB7XG4gICAgLy8gZmFpbHVyZVxuICB9XG4gIGBgYFxuICAgRXJyYmFjayBFeGFtcGxlXG4gICBgYGBqc1xuICAgZnVuY3Rpb24gZm91bmRCb29rcyhib29rcykge1xuICAgfVxuICAgZnVuY3Rpb24gZmFpbHVyZShyZWFzb24pIHtcbiAgIH1cbiAgIGZpbmRBdXRob3IoZnVuY3Rpb24oYXV0aG9yLCBlcnIpe1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGZhaWx1cmUoZXJyKTtcbiAgICAgIC8vIGZhaWx1cmVcbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZmluZEJvb29rc0J5QXV0aG9yKGF1dGhvciwgZnVuY3Rpb24oYm9va3MsIGVycikge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIGZhaWx1cmUoZXJyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZm91bmRCb29rcyhib29rcyk7XG4gICAgICAgICAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgICAgICAgICBmYWlsdXJlKHJlYXNvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgfVxuICAgICAgLy8gc3VjY2Vzc1xuICAgIH1cbiAgfSk7XG4gIGBgYFxuICAgUHJvbWlzZSBFeGFtcGxlO1xuICAgYGBgamF2YXNjcmlwdFxuICBmaW5kQXV0aG9yKCkuXG4gICAgdGhlbihmaW5kQm9va3NCeUF1dGhvcikuXG4gICAgdGhlbihmdW5jdGlvbihib29rcyl7XG4gICAgICAvLyBmb3VuZCBib29rc1xuICB9KS5jYXRjaChmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gIH0pO1xuICBgYGBcbiAgIEBtZXRob2QgdGhlblxuICBAcGFyYW0ge0Z1bmN0aW9ufSBvbkZ1bGZpbGxlZFxuICBAcGFyYW0ge0Z1bmN0aW9ufSBvblJlamVjdGVkXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQHJldHVybiB7UHJvbWlzZX1cbiAgKi9cblxuICAvKipcbiAgYGNhdGNoYCBpcyBzaW1wbHkgc3VnYXIgZm9yIGB0aGVuKHVuZGVmaW5lZCwgb25SZWplY3Rpb24pYCB3aGljaCBtYWtlcyBpdCB0aGUgc2FtZVxuICBhcyB0aGUgY2F0Y2ggYmxvY2sgb2YgYSB0cnkvY2F0Y2ggc3RhdGVtZW50LlxuICBgYGBqc1xuICBmdW5jdGlvbiBmaW5kQXV0aG9yKCl7XG4gIHRocm93IG5ldyBFcnJvcignY291bGRuJ3QgZmluZCB0aGF0IGF1dGhvcicpO1xuICB9XG4gIC8vIHN5bmNocm9ub3VzXG4gIHRyeSB7XG4gIGZpbmRBdXRob3IoKTtcbiAgfSBjYXRjaChyZWFzb24pIHtcbiAgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmdcbiAgfVxuICAvLyBhc3luYyB3aXRoIHByb21pc2VzXG4gIGZpbmRBdXRob3IoKS5jYXRjaChmdW5jdGlvbihyZWFzb24pe1xuICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICB9KTtcbiAgYGBgXG4gIEBtZXRob2QgY2F0Y2hcbiAgQHBhcmFtIHtGdW5jdGlvbn0gb25SZWplY3Rpb25cbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfVxuICAqL1xuXG5cbiAgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2ggPSBmdW5jdGlvbiBfY2F0Y2gob25SZWplY3Rpb24pIHtcbiAgICByZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uUmVqZWN0aW9uKTtcbiAgfTtcblxuICAvKipcbiAgICBgZmluYWxseWAgd2lsbCBiZSBpbnZva2VkIHJlZ2FyZGxlc3Mgb2YgdGhlIHByb21pc2UncyBmYXRlIGp1c3QgYXMgbmF0aXZlXG4gICAgdHJ5L2NhdGNoL2ZpbmFsbHkgYmVoYXZlc1xuICBcbiAgICBTeW5jaHJvbm91cyBleGFtcGxlOlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRBdXRob3IoKSB7XG4gICAgICBpZiAoTWF0aC5yYW5kb20oKSA+IDAuNSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgQXV0aG9yKCk7XG4gICAgfVxuICBcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZpbmRBdXRob3IoKTsgLy8gc3VjY2VlZCBvciBmYWlsXG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgcmV0dXJuIGZpbmRPdGhlckF1dGhlcigpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBhbHdheXMgcnVuc1xuICAgICAgLy8gZG9lc24ndCBhZmZlY3QgdGhlIHJldHVybiB2YWx1ZVxuICAgIH1cbiAgICBgYGBcbiAgXG4gICAgQXN5bmNocm9ub3VzIGV4YW1wbGU6XG4gIFxuICAgIGBgYGpzXG4gICAgZmluZEF1dGhvcigpLmNhdGNoKGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgICByZXR1cm4gZmluZE90aGVyQXV0aGVyKCk7XG4gICAgfSkuZmluYWxseShmdW5jdGlvbigpe1xuICAgICAgLy8gYXV0aG9yIHdhcyBlaXRoZXIgZm91bmQsIG9yIG5vdFxuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBAbWV0aG9kIGZpbmFsbHlcbiAgICBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgIEByZXR1cm4ge1Byb21pc2V9XG4gICovXG5cblxuICBQcm9taXNlLnByb3RvdHlwZS5maW5hbGx5ID0gZnVuY3Rpb24gX2ZpbmFsbHkoY2FsbGJhY2spIHtcbiAgICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gcHJvbWlzZS5jb25zdHJ1Y3RvcjtcblxuICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgcmV0dXJuIHByb21pc2UudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhyb3cgcmVhc29uO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlLnRoZW4oY2FsbGJhY2ssIGNhbGxiYWNrKTtcbiAgfTtcblxuICByZXR1cm4gUHJvbWlzZTtcbn0oKTtcblxuUHJvbWlzZSQxLnByb3RvdHlwZS50aGVuID0gdGhlbjtcblByb21pc2UkMS5hbGwgPSBhbGw7XG5Qcm9taXNlJDEucmFjZSA9IHJhY2U7XG5Qcm9taXNlJDEucmVzb2x2ZSA9IHJlc29sdmUkMTtcblByb21pc2UkMS5yZWplY3QgPSByZWplY3QkMTtcblByb21pc2UkMS5fc2V0U2NoZWR1bGVyID0gc2V0U2NoZWR1bGVyO1xuUHJvbWlzZSQxLl9zZXRBc2FwID0gc2V0QXNhcDtcblByb21pc2UkMS5fYXNhcCA9IGFzYXA7XG5cbi8qZ2xvYmFsIHNlbGYqL1xuZnVuY3Rpb24gcG9seWZpbGwoKSB7XG4gIHZhciBsb2NhbCA9IHZvaWQgMDtcblxuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBsb2NhbCA9IGdsb2JhbDtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBsb2NhbCA9IHNlbGY7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGxvY2FsID0gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BvbHlmaWxsIGZhaWxlZCBiZWNhdXNlIGdsb2JhbCBvYmplY3QgaXMgdW5hdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudCcpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBQID0gbG9jYWwuUHJvbWlzZTtcblxuICBpZiAoUCkge1xuICAgIHZhciBwcm9taXNlVG9TdHJpbmcgPSBudWxsO1xuICAgIHRyeSB7XG4gICAgICBwcm9taXNlVG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUC5yZXNvbHZlKCkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIHNpbGVudGx5IGlnbm9yZWRcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZVRvU3RyaW5nID09PSAnW29iamVjdCBQcm9taXNlXScgJiYgIVAuY2FzdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGxvY2FsLlByb21pc2UgPSBQcm9taXNlJDE7XG59XG5cbi8vIFN0cmFuZ2UgY29tcGF0Li5cblByb21pc2UkMS5wb2x5ZmlsbCA9IHBvbHlmaWxsO1xuUHJvbWlzZSQxLlByb21pc2UgPSBQcm9taXNlJDE7XG5cbnJldHVybiBQcm9taXNlJDE7XG5cbn0pKSk7XG5cblxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1lczYtcHJvbWlzZS5tYXBcbiIsImV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBuQml0cyA9IC03XG4gIHZhciBpID0gaXNMRSA/IChuQnl0ZXMgLSAxKSA6IDBcbiAgdmFyIGQgPSBpc0xFID8gLTEgOiAxXG4gIHZhciBzID0gYnVmZmVyW29mZnNldCArIGldXG5cbiAgaSArPSBkXG5cbiAgZSA9IHMgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgcyA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gZUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gKGUgKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgbSA9IGUgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgZSA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gbUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gKG0gKiAyNTYpICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzXG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogKChzID8gLTEgOiAxKSAqIEluZmluaXR5KVxuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgTWF0aC5wb3coMiwgbUxlbilcbiAgICBlID0gZSAtIGVCaWFzXG4gIH1cbiAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbilcbn1cblxuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbSwgY1xuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgcnQgPSAobUxlbiA9PT0gMjMgPyBNYXRoLnBvdygyLCAtMjQpIC0gTWF0aC5wb3coMiwgLTc3KSA6IDApXG4gIHZhciBpID0gaXNMRSA/IDAgOiAobkJ5dGVzIC0gMSlcbiAgdmFyIGQgPSBpc0xFID8gMSA6IC0xXG4gIHZhciBzID0gdmFsdWUgPCAwIHx8ICh2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwKSA/IDEgOiAwXG5cbiAgdmFsdWUgPSBNYXRoLmFicyh2YWx1ZSlcblxuICBpZiAoaXNOYU4odmFsdWUpIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIG0gPSBpc05hTih2YWx1ZSkgPyAxIDogMFxuICAgIGUgPSBlTWF4XG4gIH0gZWxzZSB7XG4gICAgZSA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpIC8gTWF0aC5MTjIpXG4gICAgaWYgKHZhbHVlICogKGMgPSBNYXRoLnBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tXG4gICAgICBjICo9IDJcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGNcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBNYXRoLnBvdygyLCAxIC0gZUJpYXMpXG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrXG4gICAgICBjIC89IDJcbiAgICB9XG5cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwXG4gICAgICBlID0gZU1heFxuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAoKHZhbHVlICogYykgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gZSArIGVCaWFzXG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIE1hdGgucG93KDIsIGVCaWFzIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IDBcbiAgICB9XG4gIH1cblxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBtICYgMHhmZiwgaSArPSBkLCBtIC89IDI1NiwgbUxlbiAtPSA4KSB7fVxuXG4gIGUgPSAoZSA8PCBtTGVuKSB8IG1cbiAgZUxlbiArPSBtTGVuXG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW29mZnNldCArIGldID0gZSAmIDB4ZmYsIGkgKz0gZCwgZSAvPSAyNTYsIGVMZW4gLT0gOCkge31cblxuICBidWZmZXJbb2Zmc2V0ICsgaSAtIGRdIHw9IHMgKiAxMjhcbn1cbiIsIi8qIVxuICogRGV0ZXJtaW5lIGlmIGFuIG9iamVjdCBpcyBhIEJ1ZmZlclxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0J1ZmZlciAob2JqKSB7XG4gIHJldHVybiBvYmogIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IgIT0gbnVsbCAmJlxuICAgIHR5cGVvZiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iailcbn1cbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKGFycikge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLyohXG4gKiBqUXVlcnkgSmF2YVNjcmlwdCBMaWJyYXJ5IHYzLjQuMVxuICogaHR0cHM6Ly9qcXVlcnkuY29tL1xuICpcbiAqIEluY2x1ZGVzIFNpenpsZS5qc1xuICogaHR0cHM6Ly9zaXp6bGVqcy5jb20vXG4gKlxuICogQ29weXJpZ2h0IEpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBodHRwczovL2pxdWVyeS5vcmcvbGljZW5zZVxuICpcbiAqIERhdGU6IDIwMTktMDUtMDFUMjE6MDRaXG4gKi9cbiggZnVuY3Rpb24oIGdsb2JhbCwgZmFjdG9yeSApIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRpZiAoIHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gRm9yIENvbW1vbkpTIGFuZCBDb21tb25KUy1saWtlIGVudmlyb25tZW50cyB3aGVyZSBhIHByb3BlciBgd2luZG93YFxuXHRcdC8vIGlzIHByZXNlbnQsIGV4ZWN1dGUgdGhlIGZhY3RvcnkgYW5kIGdldCBqUXVlcnkuXG5cdFx0Ly8gRm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBoYXZlIGEgYHdpbmRvd2Agd2l0aCBhIGBkb2N1bWVudGBcblx0XHQvLyAoc3VjaCBhcyBOb2RlLmpzKSwgZXhwb3NlIGEgZmFjdG9yeSBhcyBtb2R1bGUuZXhwb3J0cy5cblx0XHQvLyBUaGlzIGFjY2VudHVhdGVzIHRoZSBuZWVkIGZvciB0aGUgY3JlYXRpb24gb2YgYSByZWFsIGB3aW5kb3dgLlxuXHRcdC8vIGUuZy4gdmFyIGpRdWVyeSA9IHJlcXVpcmUoXCJqcXVlcnlcIikod2luZG93KTtcblx0XHQvLyBTZWUgdGlja2V0ICMxNDU0OSBmb3IgbW9yZSBpbmZvLlxuXHRcdG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLmRvY3VtZW50ID9cblx0XHRcdGZhY3RvcnkoIGdsb2JhbCwgdHJ1ZSApIDpcblx0XHRcdGZ1bmN0aW9uKCB3ICkge1xuXHRcdFx0XHRpZiAoICF3LmRvY3VtZW50ICkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvciggXCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50XCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmFjdG9yeSggdyApO1xuXHRcdFx0fTtcblx0fSBlbHNlIHtcblx0XHRmYWN0b3J5KCBnbG9iYWwgKTtcblx0fVxuXG4vLyBQYXNzIHRoaXMgaWYgd2luZG93IGlzIG5vdCBkZWZpbmVkIHlldFxufSApKCB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDogdGhpcywgZnVuY3Rpb24oIHdpbmRvdywgbm9HbG9iYWwgKSB7XG5cbi8vIEVkZ2UgPD0gMTIgLSAxMyssIEZpcmVmb3ggPD0xOCAtIDQ1KywgSUUgMTAgLSAxMSwgU2FmYXJpIDUuMSAtIDkrLCBpT1MgNiAtIDkuMVxuLy8gdGhyb3cgZXhjZXB0aW9ucyB3aGVuIG5vbi1zdHJpY3QgY29kZSAoZS5nLiwgQVNQLk5FVCA0LjUpIGFjY2Vzc2VzIHN0cmljdCBtb2RlXG4vLyBhcmd1bWVudHMuY2FsbGVlLmNhbGxlciAodHJhYy0xMzMzNSkuIEJ1dCBhcyBvZiBqUXVlcnkgMy4wICgyMDE2KSwgc3RyaWN0IG1vZGUgc2hvdWxkIGJlIGNvbW1vblxuLy8gZW5vdWdoIHRoYXQgYWxsIHN1Y2ggYXR0ZW1wdHMgYXJlIGd1YXJkZWQgaW4gYSB0cnkgYmxvY2suXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGFyciA9IFtdO1xuXG52YXIgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcblxudmFyIHNsaWNlID0gYXJyLnNsaWNlO1xuXG52YXIgY29uY2F0ID0gYXJyLmNvbmNhdDtcblxudmFyIHB1c2ggPSBhcnIucHVzaDtcblxudmFyIGluZGV4T2YgPSBhcnIuaW5kZXhPZjtcblxudmFyIGNsYXNzMnR5cGUgPSB7fTtcblxudmFyIHRvU3RyaW5nID0gY2xhc3MydHlwZS50b1N0cmluZztcblxudmFyIGhhc093biA9IGNsYXNzMnR5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBmblRvU3RyaW5nID0gaGFzT3duLnRvU3RyaW5nO1xuXG52YXIgT2JqZWN0RnVuY3Rpb25TdHJpbmcgPSBmblRvU3RyaW5nLmNhbGwoIE9iamVjdCApO1xuXG52YXIgc3VwcG9ydCA9IHt9O1xuXG52YXIgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uIGlzRnVuY3Rpb24oIG9iaiApIHtcblxuICAgICAgLy8gU3VwcG9ydDogQ2hyb21lIDw9NTcsIEZpcmVmb3ggPD01MlxuICAgICAgLy8gSW4gc29tZSBicm93c2VycywgdHlwZW9mIHJldHVybnMgXCJmdW5jdGlvblwiIGZvciBIVE1MIDxvYmplY3Q+IGVsZW1lbnRzXG4gICAgICAvLyAoaS5lLiwgYHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcIm9iamVjdFwiICkgPT09IFwiZnVuY3Rpb25cImApLlxuICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjbGFzc2lmeSAqYW55KiBET00gbm9kZSBhcyBhIGZ1bmN0aW9uLlxuICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2Ygb2JqLm5vZGVUeXBlICE9PSBcIm51bWJlclwiO1xuICB9O1xuXG5cbnZhciBpc1dpbmRvdyA9IGZ1bmN0aW9uIGlzV2luZG93KCBvYmogKSB7XG5cdFx0cmV0dXJuIG9iaiAhPSBudWxsICYmIG9iaiA9PT0gb2JqLndpbmRvdztcblx0fTtcblxuXG5cblxuXHR2YXIgcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyA9IHtcblx0XHR0eXBlOiB0cnVlLFxuXHRcdHNyYzogdHJ1ZSxcblx0XHRub25jZTogdHJ1ZSxcblx0XHRub01vZHVsZTogdHJ1ZVxuXHR9O1xuXG5cdGZ1bmN0aW9uIERPTUV2YWwoIGNvZGUsIG5vZGUsIGRvYyApIHtcblx0XHRkb2MgPSBkb2MgfHwgZG9jdW1lbnQ7XG5cblx0XHR2YXIgaSwgdmFsLFxuXHRcdFx0c2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoIFwic2NyaXB0XCIgKTtcblxuXHRcdHNjcmlwdC50ZXh0ID0gY29kZTtcblx0XHRpZiAoIG5vZGUgKSB7XG5cdFx0XHRmb3IgKCBpIGluIHByZXNlcnZlZFNjcmlwdEF0dHJpYnV0ZXMgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA2NCssIEVkZ2UgMTgrXG5cdFx0XHRcdC8vIFNvbWUgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCB0aGUgXCJub25jZVwiIHByb3BlcnR5IG9uIHNjcmlwdHMuXG5cdFx0XHRcdC8vIE9uIHRoZSBvdGhlciBoYW5kLCBqdXN0IHVzaW5nIGBnZXRBdHRyaWJ1dGVgIGlzIG5vdCBlbm91Z2ggYXNcblx0XHRcdFx0Ly8gdGhlIGBub25jZWAgYXR0cmlidXRlIGlzIHJlc2V0IHRvIGFuIGVtcHR5IHN0cmluZyB3aGVuZXZlciBpdFxuXHRcdFx0XHQvLyBiZWNvbWVzIGJyb3dzaW5nLWNvbnRleHQgY29ubmVjdGVkLlxuXHRcdFx0XHQvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9odG1sL2lzc3Vlcy8yMzY5XG5cdFx0XHRcdC8vIFNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNub25jZS1hdHRyaWJ1dGVzXG5cdFx0XHRcdC8vIFRoZSBgbm9kZS5nZXRBdHRyaWJ1dGVgIGNoZWNrIHdhcyBhZGRlZCBmb3IgdGhlIHNha2Ugb2Zcblx0XHRcdFx0Ly8gYGpRdWVyeS5nbG9iYWxFdmFsYCBzbyB0aGF0IGl0IGNhbiBmYWtlIGEgbm9uY2UtY29udGFpbmluZyBub2RlXG5cdFx0XHRcdC8vIHZpYSBhbiBvYmplY3QuXG5cdFx0XHRcdHZhbCA9IG5vZGVbIGkgXSB8fCBub2RlLmdldEF0dHJpYnV0ZSAmJiBub2RlLmdldEF0dHJpYnV0ZSggaSApO1xuXHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRzY3JpcHQuc2V0QXR0cmlidXRlKCBpLCB2YWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRkb2MuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0ICkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggc2NyaXB0ICk7XG5cdH1cblxuXG5mdW5jdGlvbiB0b1R5cGUoIG9iaiApIHtcblx0aWYgKCBvYmogPT0gbnVsbCApIHtcblx0XHRyZXR1cm4gb2JqICsgXCJcIjtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD0yLjMgb25seSAoZnVuY3Rpb25pc2ggUmVnRXhwKVxuXHRyZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIgP1xuXHRcdGNsYXNzMnR5cGVbIHRvU3RyaW5nLmNhbGwoIG9iaiApIF0gfHwgXCJvYmplY3RcIiA6XG5cdFx0dHlwZW9mIG9iajtcbn1cbi8qIGdsb2JhbCBTeW1ib2wgKi9cbi8vIERlZmluaW5nIHRoaXMgZ2xvYmFsIGluIC5lc2xpbnRyYy5qc29uIHdvdWxkIGNyZWF0ZSBhIGRhbmdlciBvZiB1c2luZyB0aGUgZ2xvYmFsXG4vLyB1bmd1YXJkZWQgaW4gYW5vdGhlciBwbGFjZSwgaXQgc2VlbXMgc2FmZXIgdG8gZGVmaW5lIGdsb2JhbCBvbmx5IGZvciB0aGlzIG1vZHVsZVxuXG5cblxudmFyXG5cdHZlcnNpb24gPSBcIjMuNC4xXCIsXG5cblx0Ly8gRGVmaW5lIGEgbG9jYWwgY29weSBvZiBqUXVlcnlcblx0alF1ZXJ5ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkge1xuXG5cdFx0Ly8gVGhlIGpRdWVyeSBvYmplY3QgaXMgYWN0dWFsbHkganVzdCB0aGUgaW5pdCBjb25zdHJ1Y3RvciAnZW5oYW5jZWQnXG5cdFx0Ly8gTmVlZCBpbml0IGlmIGpRdWVyeSBpcyBjYWxsZWQgKGp1c3QgYWxsb3cgZXJyb3IgdG8gYmUgdGhyb3duIGlmIG5vdCBpbmNsdWRlZClcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5mbi5pbml0KCBzZWxlY3RvciwgY29udGV4dCApO1xuXHR9LFxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seVxuXHQvLyBNYWtlIHN1cmUgd2UgdHJpbSBCT00gYW5kIE5CU1Bcblx0cnRyaW0gPSAvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2c7XG5cbmpRdWVyeS5mbiA9IGpRdWVyeS5wcm90b3R5cGUgPSB7XG5cblx0Ly8gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBqUXVlcnkgYmVpbmcgdXNlZFxuXHRqcXVlcnk6IHZlcnNpb24sXG5cblx0Y29uc3RydWN0b3I6IGpRdWVyeSxcblxuXHQvLyBUaGUgZGVmYXVsdCBsZW5ndGggb2YgYSBqUXVlcnkgb2JqZWN0IGlzIDBcblx0bGVuZ3RoOiAwLFxuXG5cdHRvQXJyYXk6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdH0sXG5cblx0Ly8gR2V0IHRoZSBOdGggZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNldCBPUlxuXHQvLyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJheVxuXHRnZXQ6IGZ1bmN0aW9uKCBudW0gKSB7XG5cblx0XHQvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBpbiBhIGNsZWFuIGFycmF5XG5cdFx0aWYgKCBudW0gPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIGp1c3QgdGhlIG9uZSBlbGVtZW50IGZyb20gdGhlIHNldFxuXHRcdHJldHVybiBudW0gPCAwID8gdGhpc1sgbnVtICsgdGhpcy5sZW5ndGggXSA6IHRoaXNbIG51bSBdO1xuXHR9LFxuXG5cdC8vIFRha2UgYW4gYXJyYXkgb2YgZWxlbWVudHMgYW5kIHB1c2ggaXQgb250byB0aGUgc3RhY2tcblx0Ly8gKHJldHVybmluZyB0aGUgbmV3IG1hdGNoZWQgZWxlbWVudCBzZXQpXG5cdHB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1zICkge1xuXG5cdFx0Ly8gQnVpbGQgYSBuZXcgalF1ZXJ5IG1hdGNoZWQgZWxlbWVudCBzZXRcblx0XHR2YXIgcmV0ID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmNvbnN0cnVjdG9yKCksIGVsZW1zICk7XG5cblx0XHQvLyBBZGQgdGhlIG9sZCBvYmplY3Qgb250byB0aGUgc3RhY2sgKGFzIGEgcmVmZXJlbmNlKVxuXHRcdHJldC5wcmV2T2JqZWN0ID0gdGhpcztcblxuXHRcdC8vIFJldHVybiB0aGUgbmV3bHktZm9ybWVkIGVsZW1lbnQgc2V0XG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHQvLyBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgc2V0LlxuXHRlYWNoOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5lYWNoKCB0aGlzLCBjYWxsYmFjayApO1xuXHR9LFxuXG5cdG1hcDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5Lm1hcCggdGhpcywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxlbSApO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdHNsaWNlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHNsaWNlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSApO1xuXHR9LFxuXG5cdGZpcnN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggMCApO1xuXHR9LFxuXG5cdGxhc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmVxKCAtMSApO1xuXHR9LFxuXG5cdGVxOiBmdW5jdGlvbiggaSApIHtcblx0XHR2YXIgbGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRqID0gK2kgKyAoIGkgPCAwID8gbGVuIDogMCApO1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggaiA+PSAwICYmIGogPCBsZW4gPyBbIHRoaXNbIGogXSBdIDogW10gKTtcblx0fSxcblxuXHRlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcigpO1xuXHR9LFxuXG5cdC8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS5cblx0Ly8gQmVoYXZlcyBsaWtlIGFuIEFycmF5J3MgbWV0aG9kLCBub3QgbGlrZSBhIGpRdWVyeSBtZXRob2QuXG5cdHB1c2g6IHB1c2gsXG5cdHNvcnQ6IGFyci5zb3J0LFxuXHRzcGxpY2U6IGFyci5zcGxpY2Vcbn07XG5cbmpRdWVyeS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7XG5cdHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZSxcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIDAgXSB8fCB7fSxcblx0XHRpID0gMSxcblx0XHRsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuXHRcdGRlZXAgPSBmYWxzZTtcblxuXHQvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uXG5cdGlmICggdHlwZW9mIHRhcmdldCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0ZGVlcCA9IHRhcmdldDtcblxuXHRcdC8vIFNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXRcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIGkgXSB8fCB7fTtcblx0XHRpKys7XG5cdH1cblxuXHQvLyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSlcblx0aWYgKCB0eXBlb2YgdGFyZ2V0ICE9PSBcIm9iamVjdFwiICYmICFpc0Z1bmN0aW9uKCB0YXJnZXQgKSApIHtcblx0XHR0YXJnZXQgPSB7fTtcblx0fVxuXG5cdC8vIEV4dGVuZCBqUXVlcnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZFxuXHRpZiAoIGkgPT09IGxlbmd0aCApIHtcblx0XHR0YXJnZXQgPSB0aGlzO1xuXHRcdGktLTtcblx0fVxuXG5cdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXG5cdFx0Ly8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlc1xuXHRcdGlmICggKCBvcHRpb25zID0gYXJndW1lbnRzWyBpIF0gKSAhPSBudWxsICkge1xuXG5cdFx0XHQvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0XG5cdFx0XHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRcdGNvcHkgPSBvcHRpb25zWyBuYW1lIF07XG5cblx0XHRcdFx0Ly8gUHJldmVudCBPYmplY3QucHJvdG90eXBlIHBvbGx1dGlvblxuXHRcdFx0XHQvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wXG5cdFx0XHRcdGlmICggbmFtZSA9PT0gXCJfX3Byb3RvX19cIiB8fCB0YXJnZXQgPT09IGNvcHkgKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXNcblx0XHRcdFx0aWYgKCBkZWVwICYmIGNvcHkgJiYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29weSApIHx8XG5cdFx0XHRcdFx0KCBjb3B5SXNBcnJheSA9IEFycmF5LmlzQXJyYXkoIGNvcHkgKSApICkgKSB7XG5cdFx0XHRcdFx0c3JjID0gdGFyZ2V0WyBuYW1lIF07XG5cblx0XHRcdFx0XHQvLyBFbnN1cmUgcHJvcGVyIHR5cGUgZm9yIHRoZSBzb3VyY2UgdmFsdWVcblx0XHRcdFx0XHRpZiAoIGNvcHlJc0FycmF5ICYmICFBcnJheS5pc0FycmF5KCBzcmMgKSApIHtcblx0XHRcdFx0XHRcdGNsb25lID0gW107XG5cdFx0XHRcdFx0fSBlbHNlIGlmICggIWNvcHlJc0FycmF5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggc3JjICkgKSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHt9O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHNyYztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29weUlzQXJyYXkgPSBmYWxzZTtcblxuXHRcdFx0XHRcdC8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbVxuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggZGVlcCwgY2xvbmUsIGNvcHkgKTtcblxuXHRcdFx0XHQvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzXG5cdFx0XHRcdH0gZWxzZSBpZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR0YXJnZXRbIG5hbWUgXSA9IGNvcHk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdFxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIFVuaXF1ZSBmb3IgZWFjaCBjb3B5IG9mIGpRdWVyeSBvbiB0aGUgcGFnZVxuXHRleHBhbmRvOiBcImpRdWVyeVwiICsgKCB2ZXJzaW9uICsgTWF0aC5yYW5kb20oKSApLnJlcGxhY2UoIC9cXEQvZywgXCJcIiApLFxuXG5cdC8vIEFzc3VtZSBqUXVlcnkgaXMgcmVhZHkgd2l0aG91dCB0aGUgcmVhZHkgbW9kdWxlXG5cdGlzUmVhZHk6IHRydWUsXG5cblx0ZXJyb3I6IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCBtc2cgKTtcblx0fSxcblxuXHRub29wOiBmdW5jdGlvbigpIHt9LFxuXG5cdGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0dmFyIHByb3RvLCBDdG9yO1xuXG5cdFx0Ly8gRGV0ZWN0IG9idmlvdXMgbmVnYXRpdmVzXG5cdFx0Ly8gVXNlIHRvU3RyaW5nIGluc3RlYWQgb2YgalF1ZXJ5LnR5cGUgdG8gY2F0Y2ggaG9zdCBvYmplY3RzXG5cdFx0aWYgKCAhb2JqIHx8IHRvU3RyaW5nLmNhbGwoIG9iaiApICE9PSBcIltvYmplY3QgT2JqZWN0XVwiICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHByb3RvID0gZ2V0UHJvdG8oIG9iaiApO1xuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIG5vIHByb3RvdHlwZSAoZS5nLiwgYE9iamVjdC5jcmVhdGUoIG51bGwgKWApIGFyZSBwbGFpblxuXHRcdGlmICggIXByb3RvICkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIHByb3RvdHlwZSBhcmUgcGxhaW4gaWZmIHRoZXkgd2VyZSBjb25zdHJ1Y3RlZCBieSBhIGdsb2JhbCBPYmplY3QgZnVuY3Rpb25cblx0XHRDdG9yID0gaGFzT3duLmNhbGwoIHByb3RvLCBcImNvbnN0cnVjdG9yXCIgKSAmJiBwcm90by5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gdHlwZW9mIEN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBmblRvU3RyaW5nLmNhbGwoIEN0b3IgKSA9PT0gT2JqZWN0RnVuY3Rpb25TdHJpbmc7XG5cdH0sXG5cblx0aXNFbXB0eU9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcblx0XHR2YXIgbmFtZTtcblxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvLyBFdmFsdWF0ZXMgYSBzY3JpcHQgaW4gYSBnbG9iYWwgY29udGV4dFxuXHRnbG9iYWxFdmFsOiBmdW5jdGlvbiggY29kZSwgb3B0aW9ucyApIHtcblx0XHRET01FdmFsKCBjb2RlLCB7IG5vbmNlOiBvcHRpb25zICYmIG9wdGlvbnMubm9uY2UgfSApO1xuXHR9LFxuXG5cdGVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrICkge1xuXHRcdHZhciBsZW5ndGgsIGkgPSAwO1xuXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggb2JqICkgKSB7XG5cdFx0XHRsZW5ndGggPSBvYmoubGVuZ3RoO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gb2JqICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBvYmo7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5XG5cdHRyaW06IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdHJldHVybiB0ZXh0ID09IG51bGwgP1xuXHRcdFx0XCJcIiA6XG5cdFx0XHQoIHRleHQgKyBcIlwiICkucmVwbGFjZSggcnRyaW0sIFwiXCIgKTtcblx0fSxcblxuXHQvLyByZXN1bHRzIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XG5cdG1ha2VBcnJheTogZnVuY3Rpb24oIGFyciwgcmVzdWx0cyApIHtcblx0XHR2YXIgcmV0ID0gcmVzdWx0cyB8fCBbXTtcblxuXHRcdGlmICggYXJyICE9IG51bGwgKSB7XG5cdFx0XHRpZiAoIGlzQXJyYXlMaWtlKCBPYmplY3QoIGFyciApICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggcmV0LFxuXHRcdFx0XHRcdHR5cGVvZiBhcnIgPT09IFwic3RyaW5nXCIgP1xuXHRcdFx0XHRcdFsgYXJyIF0gOiBhcnJcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guY2FsbCggcmV0LCBhcnIgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXG5cdGluQXJyYXk6IGZ1bmN0aW9uKCBlbGVtLCBhcnIsIGkgKSB7XG5cdFx0cmV0dXJuIGFyciA9PSBudWxsID8gLTEgOiBpbmRleE9mLmNhbGwoIGFyciwgZWxlbSwgaSApO1xuXHR9LFxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdG1lcmdlOiBmdW5jdGlvbiggZmlyc3QsIHNlY29uZCApIHtcblx0XHR2YXIgbGVuID0gK3NlY29uZC5sZW5ndGgsXG5cdFx0XHRqID0gMCxcblx0XHRcdGkgPSBmaXJzdC5sZW5ndGg7XG5cblx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcblx0XHRcdGZpcnN0WyBpKysgXSA9IHNlY29uZFsgaiBdO1xuXHRcdH1cblxuXHRcdGZpcnN0Lmxlbmd0aCA9IGk7XG5cblx0XHRyZXR1cm4gZmlyc3Q7XG5cdH0sXG5cblx0Z3JlcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgaW52ZXJ0ICkge1xuXHRcdHZhciBjYWxsYmFja0ludmVyc2UsXG5cdFx0XHRtYXRjaGVzID0gW10sXG5cdFx0XHRpID0gMCxcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aCxcblx0XHRcdGNhbGxiYWNrRXhwZWN0ID0gIWludmVydDtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCBvbmx5IHNhdmluZyB0aGUgaXRlbXNcblx0XHQvLyB0aGF0IHBhc3MgdGhlIHZhbGlkYXRvciBmdW5jdGlvblxuXHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0Y2FsbGJhY2tJbnZlcnNlID0gIWNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpICk7XG5cdFx0XHRpZiAoIGNhbGxiYWNrSW52ZXJzZSAhPT0gY2FsbGJhY2tFeHBlY3QgKSB7XG5cdFx0XHRcdG1hdGNoZXMucHVzaCggZWxlbXNbIGkgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBtYXRjaGVzO1xuXHR9LFxuXG5cdC8vIGFyZyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seVxuXHRtYXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGFyZyApIHtcblx0XHR2YXIgbGVuZ3RoLCB2YWx1ZSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0cmV0ID0gW107XG5cblx0XHQvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRpbmcgZWFjaCBvZiB0aGUgaXRlbXMgdG8gdGhlaXIgbmV3IHZhbHVlc1xuXHRcdGlmICggaXNBcnJheUxpa2UoIGVsZW1zICkgKSB7XG5cdFx0XHRsZW5ndGggPSBlbGVtcy5sZW5ndGg7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7XG5cblx0XHRcdFx0aWYgKCB2YWx1ZSAhPSBudWxsICkge1xuXHRcdFx0XHRcdHJldC5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBHbyB0aHJvdWdoIGV2ZXJ5IGtleSBvbiB0aGUgb2JqZWN0LFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKCBpIGluIGVsZW1zICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzXG5cdFx0cmV0dXJuIGNvbmNhdC5hcHBseSggW10sIHJldCApO1xuXHR9LFxuXG5cdC8vIEEgZ2xvYmFsIEdVSUQgY291bnRlciBmb3Igb2JqZWN0c1xuXHRndWlkOiAxLFxuXG5cdC8vIGpRdWVyeS5zdXBwb3J0IGlzIG5vdCB1c2VkIGluIENvcmUgYnV0IG90aGVyIHByb2plY3RzIGF0dGFjaCB0aGVpclxuXHQvLyBwcm9wZXJ0aWVzIHRvIGl0IHNvIGl0IG5lZWRzIHRvIGV4aXN0LlxuXHRzdXBwb3J0OiBzdXBwb3J0XG59ICk7XG5cbmlmICggdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICkge1xuXHRqUXVlcnkuZm5bIFN5bWJvbC5pdGVyYXRvciBdID0gYXJyWyBTeW1ib2wuaXRlcmF0b3IgXTtcbn1cblxuLy8gUG9wdWxhdGUgdGhlIGNsYXNzMnR5cGUgbWFwXG5qUXVlcnkuZWFjaCggXCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIFN5bWJvbFwiLnNwbGl0KCBcIiBcIiApLFxuZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cdGNsYXNzMnR5cGVbIFwiW29iamVjdCBcIiArIG5hbWUgKyBcIl1cIiBdID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xufSApO1xuXG5mdW5jdGlvbiBpc0FycmF5TGlrZSggb2JqICkge1xuXG5cdC8vIFN1cHBvcnQ6IHJlYWwgaU9TIDguMiBvbmx5IChub3QgcmVwcm9kdWNpYmxlIGluIHNpbXVsYXRvcilcblx0Ly8gYGluYCBjaGVjayB1c2VkIHRvIHByZXZlbnQgSklUIGVycm9yIChnaC0yMTQ1KVxuXHQvLyBoYXNPd24gaXNuJ3QgdXNlZCBoZXJlIGR1ZSB0byBmYWxzZSBuZWdhdGl2ZXNcblx0Ly8gcmVnYXJkaW5nIE5vZGVsaXN0IGxlbmd0aCBpbiBJRVxuXHR2YXIgbGVuZ3RoID0gISFvYmogJiYgXCJsZW5ndGhcIiBpbiBvYmogJiYgb2JqLmxlbmd0aCxcblx0XHR0eXBlID0gdG9UeXBlKCBvYmogKTtcblxuXHRpZiAoIGlzRnVuY3Rpb24oIG9iaiApIHx8IGlzV2luZG93KCBvYmogKSApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHlwZSA9PT0gXCJhcnJheVwiIHx8IGxlbmd0aCA9PT0gMCB8fFxuXHRcdHR5cGVvZiBsZW5ndGggPT09IFwibnVtYmVyXCIgJiYgbGVuZ3RoID4gMCAmJiAoIGxlbmd0aCAtIDEgKSBpbiBvYmo7XG59XG52YXIgU2l6emxlID1cbi8qIVxuICogU2l6emxlIENTUyBTZWxlY3RvciBFbmdpbmUgdjIuMy40XG4gKiBodHRwczovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHBzOi8vanMuZm91bmRhdGlvbi9cbiAqXG4gKiBEYXRlOiAyMDE5LTA0LTA4XG4gKi9cbihmdW5jdGlvbiggd2luZG93ICkge1xuXG52YXIgaSxcblx0c3VwcG9ydCxcblx0RXhwcixcblx0Z2V0VGV4dCxcblx0aXNYTUwsXG5cdHRva2VuaXplLFxuXHRjb21waWxlLFxuXHRzZWxlY3QsXG5cdG91dGVybW9zdENvbnRleHQsXG5cdHNvcnRJbnB1dCxcblx0aGFzRHVwbGljYXRlLFxuXG5cdC8vIExvY2FsIGRvY3VtZW50IHZhcnNcblx0c2V0RG9jdW1lbnQsXG5cdGRvY3VtZW50LFxuXHRkb2NFbGVtLFxuXHRkb2N1bWVudElzSFRNTCxcblx0cmJ1Z2d5UVNBLFxuXHRyYnVnZ3lNYXRjaGVzLFxuXHRtYXRjaGVzLFxuXHRjb250YWlucyxcblxuXHQvLyBJbnN0YW5jZS1zcGVjaWZpYyBkYXRhXG5cdGV4cGFuZG8gPSBcInNpenpsZVwiICsgMSAqIG5ldyBEYXRlKCksXG5cdHByZWZlcnJlZERvYyA9IHdpbmRvdy5kb2N1bWVudCxcblx0ZGlycnVucyA9IDAsXG5cdGRvbmUgPSAwLFxuXHRjbGFzc0NhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0dG9rZW5DYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdGNvbXBpbGVyQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRub25uYXRpdmVTZWxlY3RvckNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0c29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIDA7XG5cdH0sXG5cblx0Ly8gSW5zdGFuY2UgbWV0aG9kc1xuXHRoYXNPd24gPSAoe30pLmhhc093blByb3BlcnR5LFxuXHRhcnIgPSBbXSxcblx0cG9wID0gYXJyLnBvcCxcblx0cHVzaF9uYXRpdmUgPSBhcnIucHVzaCxcblx0cHVzaCA9IGFyci5wdXNoLFxuXHRzbGljZSA9IGFyci5zbGljZSxcblx0Ly8gVXNlIGEgc3RyaXBwZWQtZG93biBpbmRleE9mIGFzIGl0J3MgZmFzdGVyIHRoYW4gbmF0aXZlXG5cdC8vIGh0dHBzOi8vanNwZXJmLmNvbS90aG9yLWluZGV4b2YtdnMtZm9yLzVcblx0aW5kZXhPZiA9IGZ1bmN0aW9uKCBsaXN0LCBlbGVtICkge1xuXHRcdHZhciBpID0gMCxcblx0XHRcdGxlbiA9IGxpc3QubGVuZ3RoO1xuXHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0aWYgKCBsaXN0W2ldID09PSBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIC0xO1xuXHR9LFxuXG5cdGJvb2xlYW5zID0gXCJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZFwiLFxuXG5cdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbnNcblxuXHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXNlbGVjdG9ycy8jd2hpdGVzcGFjZVxuXHR3aGl0ZXNwYWNlID0gXCJbXFxcXHgyMFxcXFx0XFxcXHJcXFxcblxcXFxmXVwiLFxuXG5cdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCN2YWx1ZS1kZWYtaWRlbnRpZmllclxuXHRpZGVudGlmaWVyID0gXCIoPzpcXFxcXFxcXC58W1xcXFx3LV18W15cXDAtXFxcXHhhMF0pK1wiLFxuXG5cdC8vIEF0dHJpYnV0ZSBzZWxlY3RvcnM6IGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jYXR0cmlidXRlLXNlbGVjdG9yc1xuXHRhdHRyaWJ1dGVzID0gXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKihcIiArIGlkZW50aWZpZXIgKyBcIikoPzpcIiArIHdoaXRlc3BhY2UgK1xuXHRcdC8vIE9wZXJhdG9yIChjYXB0dXJlIDIpXG5cdFx0XCIqKFsqXiR8IX5dPz0pXCIgKyB3aGl0ZXNwYWNlICtcblx0XHQvLyBcIkF0dHJpYnV0ZSB2YWx1ZXMgbXVzdCBiZSBDU1MgaWRlbnRpZmllcnMgW2NhcHR1cmUgNV0gb3Igc3RyaW5ncyBbY2FwdHVyZSAzIG9yIGNhcHR1cmUgNF1cIlxuXHRcdFwiKig/OicoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcInwoXCIgKyBpZGVudGlmaWVyICsgXCIpKXwpXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcIipcXFxcXVwiLFxuXG5cdHBzZXVkb3MgPSBcIjooXCIgKyBpZGVudGlmaWVyICsgXCIpKD86XFxcXCgoXCIgK1xuXHRcdC8vIFRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHNlbGVjdG9ycyBuZWVkaW5nIHRva2VuaXplIGluIHRoZSBwcmVGaWx0ZXIsIHByZWZlciBhcmd1bWVudHM6XG5cdFx0Ly8gMS4gcXVvdGVkIChjYXB0dXJlIDM7IGNhcHR1cmUgNCBvciBjYXB0dXJlIDUpXG5cdFx0XCIoJygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwiKXxcIiArXG5cdFx0Ly8gMi4gc2ltcGxlIChjYXB0dXJlIDYpXG5cdFx0XCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKVtcXFxcXV18XCIgKyBhdHRyaWJ1dGVzICsgXCIpKil8XCIgK1xuXHRcdC8vIDMuIGFueXRoaW5nIGVsc2UgKGNhcHR1cmUgMilcblx0XHRcIi4qXCIgK1xuXHRcdFwiKVxcXFwpfClcIixcblxuXHQvLyBMZWFkaW5nIGFuZCBub24tZXNjYXBlZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBjYXB0dXJpbmcgc29tZSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHByZWNlZGluZyB0aGUgbGF0dGVyXG5cdHJ3aGl0ZXNwYWNlID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArIFwiK1wiLCBcImdcIiApLFxuXHRydHJpbSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiK3woKD86XnxbXlxcXFxcXFxcXSkoPzpcXFxcXFxcXC4pKilcIiArIHdoaXRlc3BhY2UgKyBcIiskXCIsIFwiZ1wiICksXG5cblx0cmNvbW1hID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqLFwiICsgd2hpdGVzcGFjZSArIFwiKlwiICksXG5cdHJjb21iaW5hdG9ycyA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKihbPit+XXxcIiArIHdoaXRlc3BhY2UgKyBcIilcIiArIHdoaXRlc3BhY2UgKyBcIipcIiApLFxuXHRyZGVzY2VuZCA9IG5ldyBSZWdFeHAoIHdoaXRlc3BhY2UgKyBcInw+XCIgKSxcblxuXHRycHNldWRvID0gbmV3IFJlZ0V4cCggcHNldWRvcyApLFxuXHRyaWRlbnRpZmllciA9IG5ldyBSZWdFeHAoIFwiXlwiICsgaWRlbnRpZmllciArIFwiJFwiICksXG5cblx0bWF0Y2hFeHByID0ge1xuXHRcdFwiSURcIjogbmV3IFJlZ0V4cCggXCJeIyhcIiArIGlkZW50aWZpZXIgKyBcIilcIiApLFxuXHRcdFwiQ0xBU1NcIjogbmV3IFJlZ0V4cCggXCJeXFxcXC4oXCIgKyBpZGVudGlmaWVyICsgXCIpXCIgKSxcblx0XHRcIlRBR1wiOiBuZXcgUmVnRXhwKCBcIl4oXCIgKyBpZGVudGlmaWVyICsgXCJ8WypdKVwiICksXG5cdFx0XCJBVFRSXCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgYXR0cmlidXRlcyApLFxuXHRcdFwiUFNFVURPXCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgcHNldWRvcyApLFxuXHRcdFwiQ0hJTERcIjogbmV3IFJlZ0V4cCggXCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXFxcKFwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcIiooZXZlbnxvZGR8KChbKy1dfCkoXFxcXGQqKW58KVwiICsgd2hpdGVzcGFjZSArIFwiKig/OihbKy1dfClcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XCIqKFxcXFxkKyl8KSlcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcKXwpXCIsIFwiaVwiICksXG5cdFx0XCJib29sXCI6IG5ldyBSZWdFeHAoIFwiXig/OlwiICsgYm9vbGVhbnMgKyBcIikkXCIsIFwiaVwiICksXG5cdFx0Ly8gRm9yIHVzZSBpbiBsaWJyYXJpZXMgaW1wbGVtZW50aW5nIC5pcygpXG5cdFx0Ly8gV2UgdXNlIHRoaXMgZm9yIFBPUyBtYXRjaGluZyBpbiBgc2VsZWN0YFxuXHRcdFwibmVlZHNDb250ZXh0XCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFxcXChcIiArXG5cdFx0XHR3aGl0ZXNwYWNlICsgXCIqKCg/Oi1cXFxcZCk/XFxcXGQqKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfCkoPz1bXi1dfCQpXCIsIFwiaVwiIClcblx0fSxcblxuXHRyaHRtbCA9IC9IVE1MJC9pLFxuXHRyaW5wdXRzID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxcblx0cmhlYWRlciA9IC9eaFxcZCQvaSxcblxuXHRybmF0aXZlID0gL15bXntdK1xce1xccypcXFtuYXRpdmUgXFx3LyxcblxuXHQvLyBFYXNpbHktcGFyc2VhYmxlL3JldHJpZXZhYmxlIElEIG9yIFRBRyBvciBDTEFTUyBzZWxlY3RvcnNcblx0cnF1aWNrRXhwciA9IC9eKD86IyhbXFx3LV0rKXwoXFx3Kyl8XFwuKFtcXHctXSspKSQvLFxuXG5cdHJzaWJsaW5nID0gL1srfl0vLFxuXG5cdC8vIENTUyBlc2NhcGVzXG5cdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCNlc2NhcGVkLWNoYXJhY3RlcnNcblx0cnVuZXNjYXBlID0gbmV3IFJlZ0V4cCggXCJcXFxcXFxcXChbXFxcXGRhLWZdezEsNn1cIiArIHdoaXRlc3BhY2UgKyBcIj98KFwiICsgd2hpdGVzcGFjZSArIFwiKXwuKVwiLCBcImlnXCIgKSxcblx0ZnVuZXNjYXBlID0gZnVuY3Rpb24oIF8sIGVzY2FwZWQsIGVzY2FwZWRXaGl0ZXNwYWNlICkge1xuXHRcdHZhciBoaWdoID0gXCIweFwiICsgZXNjYXBlZCAtIDB4MTAwMDA7XG5cdFx0Ly8gTmFOIG1lYW5zIG5vbi1jb2RlcG9pbnRcblx0XHQvLyBTdXBwb3J0OiBGaXJlZm94PDI0XG5cdFx0Ly8gV29ya2Fyb3VuZCBlcnJvbmVvdXMgbnVtZXJpYyBpbnRlcnByZXRhdGlvbiBvZiArXCIweFwiXG5cdFx0cmV0dXJuIGhpZ2ggIT09IGhpZ2ggfHwgZXNjYXBlZFdoaXRlc3BhY2UgP1xuXHRcdFx0ZXNjYXBlZCA6XG5cdFx0XHRoaWdoIDwgMCA/XG5cdFx0XHRcdC8vIEJNUCBjb2RlcG9pbnRcblx0XHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCArIDB4MTAwMDAgKSA6XG5cdFx0XHRcdC8vIFN1cHBsZW1lbnRhbCBQbGFuZSBjb2RlcG9pbnQgKHN1cnJvZ2F0ZSBwYWlyKVxuXHRcdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoID4+IDEwIHwgMHhEODAwLCBoaWdoICYgMHgzRkYgfCAweERDMDAgKTtcblx0fSxcblxuXHQvLyBDU1Mgc3RyaW5nL2lkZW50aWZpZXIgc2VyaWFsaXphdGlvblxuXHQvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI2NvbW1vbi1zZXJpYWxpemluZy1pZGlvbXNcblx0cmNzc2VzY2FwZSA9IC8oW1xcMC1cXHgxZlxceDdmXXxeLT9cXGQpfF4tJHxbXlxcMC1cXHgxZlxceDdmLVxcdUZGRkZcXHctXS9nLFxuXHRmY3NzZXNjYXBlID0gZnVuY3Rpb24oIGNoLCBhc0NvZGVQb2ludCApIHtcblx0XHRpZiAoIGFzQ29kZVBvaW50ICkge1xuXG5cdFx0XHQvLyBVKzAwMDAgTlVMTCBiZWNvbWVzIFUrRkZGRCBSRVBMQUNFTUVOVCBDSEFSQUNURVJcblx0XHRcdGlmICggY2ggPT09IFwiXFwwXCIgKSB7XG5cdFx0XHRcdHJldHVybiBcIlxcdUZGRkRcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udHJvbCBjaGFyYWN0ZXJzIGFuZCAoZGVwZW5kZW50IHVwb24gcG9zaXRpb24pIG51bWJlcnMgZ2V0IGVzY2FwZWQgYXMgY29kZSBwb2ludHNcblx0XHRcdHJldHVybiBjaC5zbGljZSggMCwgLTEgKSArIFwiXFxcXFwiICsgY2guY2hhckNvZGVBdCggY2gubGVuZ3RoIC0gMSApLnRvU3RyaW5nKCAxNiApICsgXCIgXCI7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXIgcG90ZW50aWFsbHktc3BlY2lhbCBBU0NJSSBjaGFyYWN0ZXJzIGdldCBiYWNrc2xhc2gtZXNjYXBlZFxuXHRcdHJldHVybiBcIlxcXFxcIiArIGNoO1xuXHR9LFxuXG5cdC8vIFVzZWQgZm9yIGlmcmFtZXNcblx0Ly8gU2VlIHNldERvY3VtZW50KClcblx0Ly8gUmVtb3ZpbmcgdGhlIGZ1bmN0aW9uIHdyYXBwZXIgY2F1c2VzIGEgXCJQZXJtaXNzaW9uIERlbmllZFwiXG5cdC8vIGVycm9yIGluIElFXG5cdHVubG9hZEhhbmRsZXIgPSBmdW5jdGlvbigpIHtcblx0XHRzZXREb2N1bWVudCgpO1xuXHR9LFxuXG5cdGluRGlzYWJsZWRGaWVsZHNldCA9IGFkZENvbWJpbmF0b3IoXG5cdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gdHJ1ZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiZmllbGRzZXRcIjtcblx0XHR9LFxuXHRcdHsgZGlyOiBcInBhcmVudE5vZGVcIiwgbmV4dDogXCJsZWdlbmRcIiB9XG5cdCk7XG5cbi8vIE9wdGltaXplIGZvciBwdXNoLmFwcGx5KCBfLCBOb2RlTGlzdCApXG50cnkge1xuXHRwdXNoLmFwcGx5KFxuXHRcdChhcnIgPSBzbGljZS5jYWxsKCBwcmVmZXJyZWREb2MuY2hpbGROb2RlcyApKSxcblx0XHRwcmVmZXJyZWREb2MuY2hpbGROb2Rlc1xuXHQpO1xuXHQvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMFxuXHQvLyBEZXRlY3Qgc2lsZW50bHkgZmFpbGluZyBwdXNoLmFwcGx5XG5cdGFyclsgcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMubGVuZ3RoIF0ubm9kZVR5cGU7XG59IGNhdGNoICggZSApIHtcblx0cHVzaCA9IHsgYXBwbHk6IGFyci5sZW5ndGggP1xuXG5cdFx0Ly8gTGV2ZXJhZ2Ugc2xpY2UgaWYgcG9zc2libGVcblx0XHRmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHRwdXNoX25hdGl2ZS5hcHBseSggdGFyZ2V0LCBzbGljZS5jYWxsKGVscykgKTtcblx0XHR9IDpcblxuXHRcdC8vIFN1cHBvcnQ6IElFPDlcblx0XHQvLyBPdGhlcndpc2UgYXBwZW5kIGRpcmVjdGx5XG5cdFx0ZnVuY3Rpb24oIHRhcmdldCwgZWxzICkge1xuXHRcdFx0dmFyIGogPSB0YXJnZXQubGVuZ3RoLFxuXHRcdFx0XHRpID0gMDtcblx0XHRcdC8vIENhbid0IHRydXN0IE5vZGVMaXN0Lmxlbmd0aFxuXHRcdFx0d2hpbGUgKCAodGFyZ2V0W2orK10gPSBlbHNbaSsrXSkgKSB7fVxuXHRcdFx0dGFyZ2V0Lmxlbmd0aCA9IGogLSAxO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gU2l6emxlKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcblx0dmFyIG0sIGksIGVsZW0sIG5pZCwgbWF0Y2gsIGdyb3VwcywgbmV3U2VsZWN0b3IsXG5cdFx0bmV3Q29udGV4dCA9IGNvbnRleHQgJiYgY29udGV4dC5vd25lckRvY3VtZW50LFxuXG5cdFx0Ly8gbm9kZVR5cGUgZGVmYXVsdHMgdG8gOSwgc2luY2UgY29udGV4dCBkZWZhdWx0cyB0byBkb2N1bWVudFxuXHRcdG5vZGVUeXBlID0gY29udGV4dCA/IGNvbnRleHQubm9kZVR5cGUgOiA5O1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFJldHVybiBlYXJseSBmcm9tIGNhbGxzIHdpdGggaW52YWxpZCBzZWxlY3RvciBvciBjb250ZXh0XG5cdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiIHx8ICFzZWxlY3RvciB8fFxuXHRcdG5vZGVUeXBlICE9PSAxICYmIG5vZGVUeXBlICE9PSA5ICYmIG5vZGVUeXBlICE9PSAxMSApIHtcblxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9XG5cblx0Ly8gVHJ5IHRvIHNob3J0Y3V0IGZpbmQgb3BlcmF0aW9ucyAoYXMgb3Bwb3NlZCB0byBmaWx0ZXJzKSBpbiBIVE1MIGRvY3VtZW50c1xuXHRpZiAoICFzZWVkICkge1xuXG5cdFx0aWYgKCAoIGNvbnRleHQgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IHByZWZlcnJlZERvYyApICE9PSBkb2N1bWVudCApIHtcblx0XHRcdHNldERvY3VtZW50KCBjb250ZXh0ICk7XG5cdFx0fVxuXHRcdGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50O1xuXG5cdFx0aWYgKCBkb2N1bWVudElzSFRNTCApIHtcblxuXHRcdFx0Ly8gSWYgdGhlIHNlbGVjdG9yIGlzIHN1ZmZpY2llbnRseSBzaW1wbGUsIHRyeSB1c2luZyBhIFwiZ2V0KkJ5KlwiIERPTSBtZXRob2Rcblx0XHRcdC8vIChleGNlcHRpbmcgRG9jdW1lbnRGcmFnbWVudCBjb250ZXh0LCB3aGVyZSB0aGUgbWV0aG9kcyBkb24ndCBleGlzdClcblx0XHRcdGlmICggbm9kZVR5cGUgIT09IDExICYmIChtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKSkgKSB7XG5cblx0XHRcdFx0Ly8gSUQgc2VsZWN0b3Jcblx0XHRcdFx0aWYgKCAobSA9IG1hdGNoWzFdKSApIHtcblxuXHRcdFx0XHRcdC8vIERvY3VtZW50IGNvbnRleHRcblx0XHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSkgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUsIE9wZXJhLCBXZWJraXRcblx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogaWRlbnRpZnkgdmVyc2lvbnNcblx0XHRcdFx0XHRcdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0XHRpZiAoIGVsZW0uaWQgPT09IG0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRWxlbWVudCBjb250ZXh0XG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUsIE9wZXJhLCBXZWJraXRcblx0XHRcdFx0XHRcdC8vIFRPRE86IGlkZW50aWZ5IHZlcnNpb25zXG5cdFx0XHRcdFx0XHQvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElEXG5cdFx0XHRcdFx0XHRpZiAoIG5ld0NvbnRleHQgJiYgKGVsZW0gPSBuZXdDb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkpICYmXG5cdFx0XHRcdFx0XHRcdGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiZcblx0XHRcdFx0XHRcdFx0ZWxlbS5pZCA9PT0gbSApIHtcblxuXHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFR5cGUgc2VsZWN0b3Jcblx0XHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbMl0gKSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggc2VsZWN0b3IgKSApO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXG5cdFx0XHRcdC8vIENsYXNzIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoIChtID0gbWF0Y2hbM10pICYmIHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJlxuXHRcdFx0XHRcdGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApIHtcblxuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggbSApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVGFrZSBhZHZhbnRhZ2Ugb2YgcXVlcnlTZWxlY3RvckFsbFxuXHRcdFx0aWYgKCBzdXBwb3J0LnFzYSAmJlxuXHRcdFx0XHQhbm9ubmF0aXZlU2VsZWN0b3JDYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdICYmXG5cdFx0XHRcdCghcmJ1Z2d5UVNBIHx8ICFyYnVnZ3lRU0EudGVzdCggc2VsZWN0b3IgKSkgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA4IG9ubHlcblx0XHRcdFx0Ly8gRXhjbHVkZSBvYmplY3QgZWxlbWVudHNcblx0XHRcdFx0KG5vZGVUeXBlICE9PSAxIHx8IGNvbnRleHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gXCJvYmplY3RcIikgKSB7XG5cblx0XHRcdFx0bmV3U2VsZWN0b3IgPSBzZWxlY3Rvcjtcblx0XHRcdFx0bmV3Q29udGV4dCA9IGNvbnRleHQ7XG5cblx0XHRcdFx0Ly8gcVNBIGNvbnNpZGVycyBlbGVtZW50cyBvdXRzaWRlIGEgc2NvcGluZyByb290IHdoZW4gZXZhbHVhdGluZyBjaGlsZCBvclxuXHRcdFx0XHQvLyBkZXNjZW5kYW50IGNvbWJpbmF0b3JzLCB3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50LlxuXHRcdFx0XHQvLyBJbiBzdWNoIGNhc2VzLCB3ZSB3b3JrIGFyb3VuZCB0aGUgYmVoYXZpb3IgYnkgcHJlZml4aW5nIGV2ZXJ5IHNlbGVjdG9yIGluIHRoZVxuXHRcdFx0XHQvLyBsaXN0IHdpdGggYW4gSUQgc2VsZWN0b3IgcmVmZXJlbmNpbmcgdGhlIHNjb3BlIGNvbnRleHQuXG5cdFx0XHRcdC8vIFRoYW5rcyB0byBBbmRyZXcgRHVwb250IGZvciB0aGlzIHRlY2huaXF1ZS5cblx0XHRcdFx0aWYgKCBub2RlVHlwZSA9PT0gMSAmJiByZGVzY2VuZC50ZXN0KCBzZWxlY3RvciApICkge1xuXG5cdFx0XHRcdFx0Ly8gQ2FwdHVyZSB0aGUgY29udGV4dCBJRCwgc2V0dGluZyBpdCBmaXJzdCBpZiBuZWNlc3Nhcnlcblx0XHRcdFx0XHRpZiAoIChuaWQgPSBjb250ZXh0LmdldEF0dHJpYnV0ZSggXCJpZFwiICkpICkge1xuXHRcdFx0XHRcdFx0bmlkID0gbmlkLnJlcGxhY2UoIHJjc3Nlc2NhcGUsIGZjc3Nlc2NhcGUgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29udGV4dC5zZXRBdHRyaWJ1dGUoIFwiaWRcIiwgKG5pZCA9IGV4cGFuZG8pICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUHJlZml4IGV2ZXJ5IHNlbGVjdG9yIGluIHRoZSBsaXN0XG5cdFx0XHRcdFx0Z3JvdXBzID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XG5cdFx0XHRcdFx0aSA9IGdyb3Vwcy5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRncm91cHNbaV0gPSBcIiNcIiArIG5pZCArIFwiIFwiICsgdG9TZWxlY3RvciggZ3JvdXBzW2ldICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG5ld1NlbGVjdG9yID0gZ3JvdXBzLmpvaW4oIFwiLFwiICk7XG5cblx0XHRcdFx0XHQvLyBFeHBhbmQgY29udGV4dCBmb3Igc2libGluZyBzZWxlY3RvcnNcblx0XHRcdFx0XHRuZXdDb250ZXh0ID0gcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHxcblx0XHRcdFx0XHRcdGNvbnRleHQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsXG5cdFx0XHRcdFx0XHRuZXdDb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIG5ld1NlbGVjdG9yIClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHR9IGNhdGNoICggcXNhRXJyb3IgKSB7XG5cdFx0XHRcdFx0bm9ubmF0aXZlU2VsZWN0b3JDYWNoZSggc2VsZWN0b3IsIHRydWUgKTtcblx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRpZiAoIG5pZCA9PT0gZXhwYW5kbyApIHtcblx0XHRcdFx0XHRcdGNvbnRleHQucmVtb3ZlQXR0cmlidXRlKCBcImlkXCIgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBBbGwgb3RoZXJzXG5cdHJldHVybiBzZWxlY3QoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApO1xufVxuXG4vKipcbiAqIENyZWF0ZSBrZXktdmFsdWUgY2FjaGVzIG9mIGxpbWl0ZWQgc2l6ZVxuICogQHJldHVybnMge2Z1bmN0aW9uKHN0cmluZywgb2JqZWN0KX0gUmV0dXJucyB0aGUgT2JqZWN0IGRhdGEgYWZ0ZXIgc3RvcmluZyBpdCBvbiBpdHNlbGYgd2l0aFxuICpcdHByb3BlcnR5IG5hbWUgdGhlIChzcGFjZS1zdWZmaXhlZCkgc3RyaW5nIGFuZCAoaWYgdGhlIGNhY2hlIGlzIGxhcmdlciB0aGFuIEV4cHIuY2FjaGVMZW5ndGgpXG4gKlx0ZGVsZXRpbmcgdGhlIG9sZGVzdCBlbnRyeVxuICovXG5mdW5jdGlvbiBjcmVhdGVDYWNoZSgpIHtcblx0dmFyIGtleXMgPSBbXTtcblxuXHRmdW5jdGlvbiBjYWNoZSgga2V5LCB2YWx1ZSApIHtcblx0XHQvLyBVc2UgKGtleSArIFwiIFwiKSB0byBhdm9pZCBjb2xsaXNpb24gd2l0aCBuYXRpdmUgcHJvdG90eXBlIHByb3BlcnRpZXMgKHNlZSBJc3N1ZSAjMTU3KVxuXHRcdGlmICgga2V5cy5wdXNoKCBrZXkgKyBcIiBcIiApID4gRXhwci5jYWNoZUxlbmd0aCApIHtcblx0XHRcdC8vIE9ubHkga2VlcCB0aGUgbW9zdCByZWNlbnQgZW50cmllc1xuXHRcdFx0ZGVsZXRlIGNhY2hlWyBrZXlzLnNoaWZ0KCkgXTtcblx0XHR9XG5cdFx0cmV0dXJuIChjYWNoZVsga2V5ICsgXCIgXCIgXSA9IHZhbHVlKTtcblx0fVxuXHRyZXR1cm4gY2FjaGU7XG59XG5cbi8qKlxuICogTWFyayBhIGZ1bmN0aW9uIGZvciBzcGVjaWFsIHVzZSBieSBTaXp6bGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBtYXJrXG4gKi9cbmZ1bmN0aW9uIG1hcmtGdW5jdGlvbiggZm4gKSB7XG5cdGZuWyBleHBhbmRvIF0gPSB0cnVlO1xuXHRyZXR1cm4gZm47XG59XG5cbi8qKlxuICogU3VwcG9ydCB0ZXN0aW5nIHVzaW5nIGFuIGVsZW1lbnRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFBhc3NlZCB0aGUgY3JlYXRlZCBlbGVtZW50IGFuZCByZXR1cm5zIGEgYm9vbGVhbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0KCBmbiApIHtcblx0dmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZpZWxkc2V0XCIpO1xuXG5cdHRyeSB7XG5cdFx0cmV0dXJuICEhZm4oIGVsICk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZmluYWxseSB7XG5cdFx0Ly8gUmVtb3ZlIGZyb20gaXRzIHBhcmVudCBieSBkZWZhdWx0XG5cdFx0aWYgKCBlbC5wYXJlbnROb2RlICkge1xuXHRcdFx0ZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZWwgKTtcblx0XHR9XG5cdFx0Ly8gcmVsZWFzZSBtZW1vcnkgaW4gSUVcblx0XHRlbCA9IG51bGw7XG5cdH1cbn1cblxuLyoqXG4gKiBBZGRzIHRoZSBzYW1lIGhhbmRsZXIgZm9yIGFsbCBvZiB0aGUgc3BlY2lmaWVkIGF0dHJzXG4gKiBAcGFyYW0ge1N0cmluZ30gYXR0cnMgUGlwZS1zZXBhcmF0ZWQgbGlzdCBvZiBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIFRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGFwcGxpZWRcbiAqL1xuZnVuY3Rpb24gYWRkSGFuZGxlKCBhdHRycywgaGFuZGxlciApIHtcblx0dmFyIGFyciA9IGF0dHJzLnNwbGl0KFwifFwiKSxcblx0XHRpID0gYXJyLmxlbmd0aDtcblxuXHR3aGlsZSAoIGktLSApIHtcblx0XHRFeHByLmF0dHJIYW5kbGVbIGFycltpXSBdID0gaGFuZGxlcjtcblx0fVxufVxuXG4vKipcbiAqIENoZWNrcyBkb2N1bWVudCBvcmRlciBvZiB0d28gc2libGluZ3NcbiAqIEBwYXJhbSB7RWxlbWVudH0gYVxuICogQHBhcmFtIHtFbGVtZW50fSBiXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBSZXR1cm5zIGxlc3MgdGhhbiAwIGlmIGEgcHJlY2VkZXMgYiwgZ3JlYXRlciB0aGFuIDAgaWYgYSBmb2xsb3dzIGJcbiAqL1xuZnVuY3Rpb24gc2libGluZ0NoZWNrKCBhLCBiICkge1xuXHR2YXIgY3VyID0gYiAmJiBhLFxuXHRcdGRpZmYgPSBjdXIgJiYgYS5ub2RlVHlwZSA9PT0gMSAmJiBiLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRhLnNvdXJjZUluZGV4IC0gYi5zb3VyY2VJbmRleDtcblxuXHQvLyBVc2UgSUUgc291cmNlSW5kZXggaWYgYXZhaWxhYmxlIG9uIGJvdGggbm9kZXNcblx0aWYgKCBkaWZmICkge1xuXHRcdHJldHVybiBkaWZmO1xuXHR9XG5cblx0Ly8gQ2hlY2sgaWYgYiBmb2xsb3dzIGFcblx0aWYgKCBjdXIgKSB7XG5cdFx0d2hpbGUgKCAoY3VyID0gY3VyLm5leHRTaWJsaW5nKSApIHtcblx0XHRcdGlmICggY3VyID09PSBiICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGEgPyAxIDogLTE7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBpbnB1dCB0eXBlc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5wdXRQc2V1ZG8oIHR5cGUgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRyZXR1cm4gbmFtZSA9PT0gXCJpbnB1dFwiICYmIGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGJ1dHRvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJ1dHRvblBzZXVkbyggdHlwZSApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHJldHVybiAobmFtZSA9PT0gXCJpbnB1dFwiIHx8IG5hbWUgPT09IFwiYnV0dG9uXCIpICYmIGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIDplbmFibGVkLzpkaXNhYmxlZFxuICogQHBhcmFtIHtCb29sZWFufSBkaXNhYmxlZCB0cnVlIGZvciA6ZGlzYWJsZWQ7IGZhbHNlIGZvciA6ZW5hYmxlZFxuICovXG5mdW5jdGlvbiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggZGlzYWJsZWQgKSB7XG5cblx0Ly8gS25vd24gOmRpc2FibGVkIGZhbHNlIHBvc2l0aXZlczogZmllbGRzZXRbZGlzYWJsZWRdID4gbGVnZW5kOm50aC1vZi10eXBlKG4rMikgOmNhbi1kaXNhYmxlXG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIE9ubHkgY2VydGFpbiBlbGVtZW50cyBjYW4gbWF0Y2ggOmVuYWJsZWQgb3IgOmRpc2FibGVkXG5cdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjc2VsZWN0b3ItZW5hYmxlZFxuXHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI3NlbGVjdG9yLWRpc2FibGVkXG5cdFx0aWYgKCBcImZvcm1cIiBpbiBlbGVtICkge1xuXG5cdFx0XHQvLyBDaGVjayBmb3IgaW5oZXJpdGVkIGRpc2FibGVkbmVzcyBvbiByZWxldmFudCBub24tZGlzYWJsZWQgZWxlbWVudHM6XG5cdFx0XHQvLyAqIGxpc3RlZCBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBmaWVsZHNldFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NhdGVnb3J5LWxpc3RlZFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtZmUtZGlzYWJsZWRcblx0XHRcdC8vICogb3B0aW9uIGVsZW1lbnRzIGluIGEgZGlzYWJsZWQgb3B0Z3JvdXBcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjb25jZXB0LW9wdGlvbi1kaXNhYmxlZFxuXHRcdFx0Ly8gQWxsIHN1Y2ggZWxlbWVudHMgaGF2ZSBhIFwiZm9ybVwiIHByb3BlcnR5LlxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgJiYgZWxlbS5kaXNhYmxlZCA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0Ly8gT3B0aW9uIGVsZW1lbnRzIGRlZmVyIHRvIGEgcGFyZW50IG9wdGdyb3VwIGlmIHByZXNlbnRcblx0XHRcdFx0aWYgKCBcImxhYmVsXCIgaW4gZWxlbSApIHtcblx0XHRcdFx0XHRpZiAoIFwibGFiZWxcIiBpbiBlbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5wYXJlbnROb2RlLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDYgLSAxMVxuXHRcdFx0XHQvLyBVc2UgdGhlIGlzRGlzYWJsZWQgc2hvcnRjdXQgcHJvcGVydHkgdG8gY2hlY2sgZm9yIGRpc2FibGVkIGZpZWxkc2V0IGFuY2VzdG9yc1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5pc0Rpc2FibGVkID09PSBkaXNhYmxlZCB8fFxuXG5cdFx0XHRcdFx0Ly8gV2hlcmUgdGhlcmUgaXMgbm8gaXNEaXNhYmxlZCwgY2hlY2sgbWFudWFsbHlcblx0XHRcdFx0XHQvKiBqc2hpbnQgLVcwMTggKi9cblx0XHRcdFx0XHRlbGVtLmlzRGlzYWJsZWQgIT09ICFkaXNhYmxlZCAmJlxuXHRcdFx0XHRcdFx0aW5EaXNhYmxlZEZpZWxkc2V0KCBlbGVtICkgPT09IGRpc2FibGVkO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cblx0XHQvLyBUcnkgdG8gd2lubm93IG91dCBlbGVtZW50cyB0aGF0IGNhbid0IGJlIGRpc2FibGVkIGJlZm9yZSB0cnVzdGluZyB0aGUgZGlzYWJsZWQgcHJvcGVydHkuXG5cdFx0Ly8gU29tZSB2aWN0aW1zIGdldCBjYXVnaHQgaW4gb3VyIG5ldCAobGFiZWwsIGxlZ2VuZCwgbWVudSwgdHJhY2spLCBidXQgaXQgc2hvdWxkbid0XG5cdFx0Ly8gZXZlbiBleGlzdCBvbiB0aGVtLCBsZXQgYWxvbmUgaGF2ZSBhIGJvb2xlYW4gdmFsdWUuXG5cdFx0fSBlbHNlIGlmICggXCJsYWJlbFwiIGluIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gUmVtYWluaW5nIGVsZW1lbnRzIGFyZSBuZWl0aGVyIDplbmFibGVkIG5vciA6ZGlzYWJsZWRcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBwb3NpdGlvbmFsc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZm4gKSB7XG5cdHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIGFyZ3VtZW50ICkge1xuXHRcdGFyZ3VtZW50ID0gK2FyZ3VtZW50O1xuXHRcdHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHR2YXIgaixcblx0XHRcdFx0bWF0Y2hJbmRleGVzID0gZm4oIFtdLCBzZWVkLmxlbmd0aCwgYXJndW1lbnQgKSxcblx0XHRcdFx0aSA9IG1hdGNoSW5kZXhlcy5sZW5ndGg7XG5cblx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIGZvdW5kIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhlc1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggc2VlZFsgKGogPSBtYXRjaEluZGV4ZXNbaV0pIF0gKSB7XG5cdFx0XHRcdFx0c2VlZFtqXSA9ICEobWF0Y2hlc1tqXSA9IHNlZWRbal0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0pO1xufVxuXG4vKipcbiAqIENoZWNrcyBhIG5vZGUgZm9yIHZhbGlkaXR5IGFzIGEgU2l6emxlIGNvbnRleHRcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3Q9fSBjb250ZXh0XG4gKiBAcmV0dXJucyB7RWxlbWVudHxPYmplY3R8Qm9vbGVhbn0gVGhlIGlucHV0IG5vZGUgaWYgYWNjZXB0YWJsZSwgb3RoZXJ3aXNlIGEgZmFsc3kgdmFsdWVcbiAqL1xuZnVuY3Rpb24gdGVzdENvbnRleHQoIGNvbnRleHQgKSB7XG5cdHJldHVybiBjb250ZXh0ICYmIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnRleHQ7XG59XG5cbi8vIEV4cG9zZSBzdXBwb3J0IHZhcnMgZm9yIGNvbnZlbmllbmNlXG5zdXBwb3J0ID0gU2l6emxlLnN1cHBvcnQgPSB7fTtcblxuLyoqXG4gKiBEZXRlY3RzIFhNTCBub2Rlc1xuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdH0gZWxlbSBBbiBlbGVtZW50IG9yIGEgZG9jdW1lbnRcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmZiBlbGVtIGlzIGEgbm9uLUhUTUwgWE1MIG5vZGVcbiAqL1xuaXNYTUwgPSBTaXp6bGUuaXNYTUwgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0dmFyIG5hbWVzcGFjZSA9IGVsZW0ubmFtZXNwYWNlVVJJLFxuXHRcdGRvY0VsZW0gPSAoZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0pLmRvY3VtZW50RWxlbWVudDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PThcblx0Ly8gQXNzdW1lIEhUTUwgd2hlbiBkb2N1bWVudEVsZW1lbnQgZG9lc24ndCB5ZXQgZXhpc3QsIHN1Y2ggYXMgaW5zaWRlIGxvYWRpbmcgaWZyYW1lc1xuXHQvLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvNDgzM1xuXHRyZXR1cm4gIXJodG1sLnRlc3QoIG5hbWVzcGFjZSB8fCBkb2NFbGVtICYmIGRvY0VsZW0ubm9kZU5hbWUgfHwgXCJIVE1MXCIgKTtcbn07XG5cbi8qKlxuICogU2V0cyBkb2N1bWVudC1yZWxhdGVkIHZhcmlhYmxlcyBvbmNlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBbZG9jXSBBbiBlbGVtZW50IG9yIGRvY3VtZW50IG9iamVjdCB0byB1c2UgdG8gc2V0IHRoZSBkb2N1bWVudFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY3VycmVudCBkb2N1bWVudFxuICovXG5zZXREb2N1bWVudCA9IFNpenpsZS5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKCBub2RlICkge1xuXHR2YXIgaGFzQ29tcGFyZSwgc3ViV2luZG93LFxuXHRcdGRvYyA9IG5vZGUgPyBub2RlLm93bmVyRG9jdW1lbnQgfHwgbm9kZSA6IHByZWZlcnJlZERvYztcblxuXHQvLyBSZXR1cm4gZWFybHkgaWYgZG9jIGlzIGludmFsaWQgb3IgYWxyZWFkeSBzZWxlY3RlZFxuXHRpZiAoIGRvYyA9PT0gZG9jdW1lbnQgfHwgZG9jLm5vZGVUeXBlICE9PSA5IHx8ICFkb2MuZG9jdW1lbnRFbGVtZW50ICkge1xuXHRcdHJldHVybiBkb2N1bWVudDtcblx0fVxuXG5cdC8vIFVwZGF0ZSBnbG9iYWwgdmFyaWFibGVzXG5cdGRvY3VtZW50ID0gZG9jO1xuXHRkb2NFbGVtID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXHRkb2N1bWVudElzSFRNTCA9ICFpc1hNTCggZG9jdW1lbnQgKTtcblxuXHQvLyBTdXBwb3J0OiBJRSA5LTExLCBFZGdlXG5cdC8vIEFjY2Vzc2luZyBpZnJhbWUgZG9jdW1lbnRzIGFmdGVyIHVubG9hZCB0aHJvd3MgXCJwZXJtaXNzaW9uIGRlbmllZFwiIGVycm9ycyAoalF1ZXJ5ICMxMzkzNilcblx0aWYgKCBwcmVmZXJyZWREb2MgIT09IGRvY3VtZW50ICYmXG5cdFx0KHN1YldpbmRvdyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3KSAmJiBzdWJXaW5kb3cudG9wICE9PSBzdWJXaW5kb3cgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSAxMSwgRWRnZVxuXHRcdGlmICggc3ViV2luZG93LmFkZEV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0XHRzdWJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggXCJ1bmxvYWRcIiwgdW5sb2FkSGFuZGxlciwgZmFsc2UgKTtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMCBvbmx5XG5cdFx0fSBlbHNlIGlmICggc3ViV2luZG93LmF0dGFjaEV2ZW50ICkge1xuXHRcdFx0c3ViV2luZG93LmF0dGFjaEV2ZW50KCBcIm9udW5sb2FkXCIsIHVubG9hZEhhbmRsZXIgKTtcblx0XHR9XG5cdH1cblxuXHQvKiBBdHRyaWJ1dGVzXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBTdXBwb3J0OiBJRTw4XG5cdC8vIFZlcmlmeSB0aGF0IGdldEF0dHJpYnV0ZSByZWFsbHkgcmV0dXJucyBhdHRyaWJ1dGVzIGFuZCBub3QgcHJvcGVydGllc1xuXHQvLyAoZXhjZXB0aW5nIElFOCBib29sZWFucylcblx0c3VwcG9ydC5hdHRyaWJ1dGVzID0gYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0XHRlbC5jbGFzc05hbWUgPSBcImlcIjtcblx0XHRyZXR1cm4gIWVsLmdldEF0dHJpYnV0ZShcImNsYXNzTmFtZVwiKTtcblx0fSk7XG5cblx0LyogZ2V0RWxlbWVudChzKUJ5KlxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpIHJldHVybnMgb25seSBlbGVtZW50c1xuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID0gYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0XHRlbC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlQ29tbWVudChcIlwiKSApO1xuXHRcdHJldHVybiAhZWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpLmxlbmd0aDtcblx0fSk7XG5cblx0Ly8gU3VwcG9ydDogSUU8OVxuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKTtcblxuXHQvLyBTdXBwb3J0OiBJRTwxMFxuXHQvLyBDaGVjayBpZiBnZXRFbGVtZW50QnlJZCByZXR1cm5zIGVsZW1lbnRzIGJ5IG5hbWVcblx0Ly8gVGhlIGJyb2tlbiBnZXRFbGVtZW50QnlJZCBtZXRob2RzIGRvbid0IHBpY2sgdXAgcHJvZ3JhbW1hdGljYWxseS1zZXQgbmFtZXMsXG5cdC8vIHNvIHVzZSBhIHJvdW5kYWJvdXQgZ2V0RWxlbWVudHNCeU5hbWUgdGVzdFxuXHRzdXBwb3J0LmdldEJ5SWQgPSBhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuaWQgPSBleHBhbmRvO1xuXHRcdHJldHVybiAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUgfHwgIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCBleHBhbmRvICkubGVuZ3RoO1xuXHR9KTtcblxuXHQvLyBJRCBmaWx0ZXIgYW5kIGZpbmRcblx0aWYgKCBzdXBwb3J0LmdldEJ5SWQgKSB7XG5cdFx0RXhwci5maWx0ZXJbXCJJRFwiXSA9IGZ1bmN0aW9uKCBpZCApIHtcblx0XHRcdHZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoXCJpZFwiKSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXHRcdEV4cHIuZmluZFtcIklEXCJdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdFx0dmFyIGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXHRcdFx0XHRyZXR1cm4gZWxlbSA/IFsgZWxlbSBdIDogW107XG5cdFx0XHR9XG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRFeHByLmZpbHRlcltcIklEXCJdID0gIGZ1bmN0aW9uKCBpZCApIHtcblx0XHRcdHZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgbm9kZSA9IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZU5vZGUoXCJpZFwiKTtcblx0XHRcdFx0cmV0dXJuIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgNiAtIDcgb25seVxuXHRcdC8vIGdldEVsZW1lbnRCeUlkIGlzIG5vdCByZWxpYWJsZSBhcyBhIGZpbmQgc2hvcnRjdXRcblx0XHRFeHByLmZpbmRbXCJJRFwiXSA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRcdHZhciBub2RlLCBpLCBlbGVtcyxcblx0XHRcdFx0XHRlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTtcblxuXHRcdFx0XHRpZiAoIGVsZW0gKSB7XG5cblx0XHRcdFx0XHQvLyBWZXJpZnkgdGhlIGlkIGF0dHJpYnV0ZVxuXHRcdFx0XHRcdG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoXCJpZFwiKTtcblx0XHRcdFx0XHRpZiAoIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gaWQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gWyBlbGVtIF07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRmFsbCBiYWNrIG9uIGdldEVsZW1lbnRzQnlOYW1lXG5cdFx0XHRcdFx0ZWxlbXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlOYW1lKCBpZCApO1xuXHRcdFx0XHRcdGkgPSAwO1xuXHRcdFx0XHRcdHdoaWxlICggKGVsZW0gPSBlbGVtc1tpKytdKSApIHtcblx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoXCJpZFwiKTtcblx0XHRcdFx0XHRcdGlmICggbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZCApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIFsgZWxlbSBdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBbXTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0Ly8gVGFnXG5cdEV4cHIuZmluZFtcIlRBR1wiXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgP1xuXHRcdGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cblx0XHRcdC8vIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgZG9uJ3QgaGF2ZSBnRUJUTlxuXHRcdFx0fSBlbHNlIGlmICggc3VwcG9ydC5xc2EgKSB7XG5cdFx0XHRcdHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyApO1xuXHRcdFx0fVxuXHRcdH0gOlxuXG5cdFx0ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcblx0XHRcdHZhciBlbGVtLFxuXHRcdFx0XHR0bXAgPSBbXSxcblx0XHRcdFx0aSA9IDAsXG5cdFx0XHRcdC8vIEJ5IGhhcHB5IGNvaW5jaWRlbmNlLCBhIChicm9rZW4pIGdFQlROIGFwcGVhcnMgb24gRG9jdW1lbnRGcmFnbWVudCBub2RlcyB0b29cblx0XHRcdFx0cmVzdWx0cyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApO1xuXG5cdFx0XHQvLyBGaWx0ZXIgb3V0IHBvc3NpYmxlIGNvbW1lbnRzXG5cdFx0XHRpZiAoIHRhZyA9PT0gXCIqXCIgKSB7XG5cdFx0XHRcdHdoaWxlICggKGVsZW0gPSByZXN1bHRzW2krK10pICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0XHRcdHRtcC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRtcDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdH07XG5cblx0Ly8gQ2xhc3Ncblx0RXhwci5maW5kW1wiQ0xBU1NcIl0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYgZnVuY3Rpb24oIGNsYXNzTmFtZSwgY29udGV4dCApIHtcblx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBjbGFzc05hbWUgKTtcblx0XHR9XG5cdH07XG5cblx0LyogUVNBL21hdGNoZXNTZWxlY3RvclxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gUVNBIGFuZCBtYXRjaGVzU2VsZWN0b3Igc3VwcG9ydFxuXG5cdC8vIG1hdGNoZXNTZWxlY3Rvcig6YWN0aXZlKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoSUU5L09wZXJhIDExLjUpXG5cdHJidWdneU1hdGNoZXMgPSBbXTtcblxuXHQvLyBxU2EoOmZvY3VzKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoQ2hyb21lIDIxKVxuXHQvLyBXZSBhbGxvdyB0aGlzIGJlY2F1c2Ugb2YgYSBidWcgaW4gSUU4LzkgdGhhdCB0aHJvd3MgYW4gZXJyb3Jcblx0Ly8gd2hlbmV2ZXIgYGRvY3VtZW50LmFjdGl2ZUVsZW1lbnRgIGlzIGFjY2Vzc2VkIG9uIGFuIGlmcmFtZVxuXHQvLyBTbywgd2UgYWxsb3cgOmZvY3VzIHRvIHBhc3MgdGhyb3VnaCBRU0EgYWxsIHRoZSB0aW1lIHRvIGF2b2lkIHRoZSBJRSBlcnJvclxuXHQvLyBTZWUgaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEzMzc4XG5cdHJidWdneVFTQSA9IFtdO1xuXG5cdGlmICggKHN1cHBvcnQucXNhID0gcm5hdGl2ZS50ZXN0KCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsICkpICkge1xuXHRcdC8vIEJ1aWxkIFFTQSByZWdleFxuXHRcdC8vIFJlZ2V4IHN0cmF0ZWd5IGFkb3B0ZWQgZnJvbSBEaWVnbyBQZXJpbmlcblx0XHRhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRcdFx0Ly8gU2VsZWN0IGlzIHNldCB0byBlbXB0eSBzdHJpbmcgb24gcHVycG9zZVxuXHRcdFx0Ly8gVGhpcyBpcyB0byB0ZXN0IElFJ3MgdHJlYXRtZW50IG9mIG5vdCBleHBsaWNpdGx5XG5cdFx0XHQvLyBzZXR0aW5nIGEgYm9vbGVhbiBjb250ZW50IGF0dHJpYnV0ZSxcblx0XHRcdC8vIHNpbmNlIGl0cyBwcmVzZW5jZSBzaG91bGQgYmUgZW5vdWdoXG5cdFx0XHQvLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTIzNTlcblx0XHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuaW5uZXJIVE1MID0gXCI8YSBpZD0nXCIgKyBleHBhbmRvICsgXCInPjwvYT5cIiArXG5cdFx0XHRcdFwiPHNlbGVjdCBpZD0nXCIgKyBleHBhbmRvICsgXCItXFxyXFxcXCcgbXNhbGxvd2NhcHR1cmU9Jyc+XCIgK1xuXHRcdFx0XHRcIjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+XCI7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOCwgT3BlcmEgMTEtMTIuMTZcblx0XHRcdC8vIE5vdGhpbmcgc2hvdWxkIGJlIHNlbGVjdGVkIHdoZW4gZW1wdHkgc3RyaW5ncyBmb2xsb3cgXj0gb3IgJD0gb3IgKj1cblx0XHRcdC8vIFRoZSB0ZXN0IGF0dHJpYnV0ZSBtdXN0IGJlIHVua25vd24gaW4gT3BlcmEgYnV0IFwic2FmZVwiIGZvciBXaW5SVFxuXHRcdFx0Ly8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9oaDQ2NTM4OC5hc3B4I2F0dHJpYnV0ZV9zZWN0aW9uXG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbbXNhbGxvd2NhcHR1cmVePScnXVwiKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlsqXiRdPVwiICsgd2hpdGVzcGFjZSArIFwiKig/OicnfFxcXCJcXFwiKVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOFxuXHRcdFx0Ly8gQm9vbGVhbiBhdHRyaWJ1dGVzIGFuZCBcInZhbHVlXCIgYXJlIG5vdCB0cmVhdGVkIGNvcnJlY3RseVxuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbChcIltzZWxlY3RlZF1cIikubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKig/OnZhbHVlfFwiICsgYm9vbGVhbnMgKyBcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWU8MjksIEFuZHJvaWQ8NC40LCBTYWZhcmk8Ny4wKywgaU9TPDcuMCssIFBoYW50b21KUzwxLjkuOCtcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW2lkfj1cIiArIGV4cGFuZG8gKyBcIi1dXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKFwifj1cIik7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFdlYmtpdC9PcGVyYSAtIDpjaGVja2VkIHNob3VsZCByZXR1cm4gc2VsZWN0ZWQgb3B0aW9uIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZFxuXHRcdFx0Ly8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHNcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCI6Y2hlY2tlZFwiKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKFwiOmNoZWNrZWRcIik7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA4KywgaU9TIDgrXG5cdFx0XHQvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2ODUxXG5cdFx0XHQvLyBJbi1wYWdlIGBzZWxlY3RvciNpZCBzaWJsaW5nLWNvbWJpbmF0b3Igc2VsZWN0b3JgIGZhaWxzXG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcImEjXCIgKyBleHBhbmRvICsgXCIrKlwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaChcIi4jLitbK35dXCIpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0YXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0XHRcdGVsLmlubmVySFRNTCA9IFwiPGEgaHJlZj0nJyBkaXNhYmxlZD0nZGlzYWJsZWQnPjwvYT5cIiArXG5cdFx0XHRcdFwiPHNlbGVjdCBkaXNhYmxlZD0nZGlzYWJsZWQnPjxvcHRpb24vPjwvc2VsZWN0PlwiO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBXaW5kb3dzIDggTmF0aXZlIEFwcHNcblx0XHRcdC8vIFRoZSB0eXBlIGFuZCBuYW1lIGF0dHJpYnV0ZXMgYXJlIHJlc3RyaWN0ZWQgZHVyaW5nIC5pbm5lckhUTUwgYXNzaWdubWVudFxuXHRcdFx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuXHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgXCJoaWRkZW5cIiApO1xuXHRcdFx0ZWwuYXBwZW5kQ2hpbGQoIGlucHV0ICkuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJEXCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4XG5cdFx0XHQvLyBFbmZvcmNlIGNhc2Utc2Vuc2l0aXZpdHkgb2YgbmFtZSBhdHRyaWJ1dGVcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbChcIltuYW1lPWRdXCIpLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwibmFtZVwiICsgd2hpdGVzcGFjZSArIFwiKlsqXiR8IX5dPz1cIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGRiAzLjUgLSA6ZW5hYmxlZC86ZGlzYWJsZWQgYW5kIGhpZGRlbiBlbGVtZW50cyAoaGlkZGVuIGVsZW1lbnRzIGFyZSBzdGlsbCBlbmFibGVkKVxuXHRcdFx0Ly8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHNcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbChcIjplbmFibGVkXCIpLmxlbmd0aCAhPT0gMiApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmVuYWJsZWRcIiwgXCI6ZGlzYWJsZWRcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTktMTErXG5cdFx0XHQvLyBJRSdzIDpkaXNhYmxlZCBzZWxlY3RvciBkb2VzIG5vdCBwaWNrIHVwIHRoZSBjaGlsZHJlbiBvZiBkaXNhYmxlZCBmaWVsZHNldHNcblx0XHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuZGlzYWJsZWQgPSB0cnVlO1xuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKFwiOmRpc2FibGVkXCIpLmxlbmd0aCAhPT0gMiApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmVuYWJsZWRcIiwgXCI6ZGlzYWJsZWRcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPcGVyYSAxMC0xMSBkb2VzIG5vdCB0aHJvdyBvbiBwb3N0LWNvbW1hIGludmFsaWQgcHNldWRvc1xuXHRcdFx0ZWwucXVlcnlTZWxlY3RvckFsbChcIiosOnhcIik7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaChcIiwuKjpcIik7XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoIChzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciA9IHJuYXRpdmUudGVzdCggKG1hdGNoZXMgPSBkb2NFbGVtLm1hdGNoZXMgfHxcblx0XHRkb2NFbGVtLndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ubW96TWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5vTWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5tc01hdGNoZXNTZWxlY3RvcikgKSkgKSB7XG5cblx0XHRhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRcdFx0Ly8gQ2hlY2sgdG8gc2VlIGlmIGl0J3MgcG9zc2libGUgdG8gZG8gbWF0Y2hlc1NlbGVjdG9yXG5cdFx0XHQvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlIChJRSA5KVxuXHRcdFx0c3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCA9IG1hdGNoZXMuY2FsbCggZWwsIFwiKlwiICk7XG5cblx0XHRcdC8vIFRoaXMgc2hvdWxkIGZhaWwgd2l0aCBhbiBleGNlcHRpb25cblx0XHRcdC8vIEdlY2tvIGRvZXMgbm90IGVycm9yLCByZXR1cm5zIGZhbHNlIGluc3RlYWRcblx0XHRcdG1hdGNoZXMuY2FsbCggZWwsIFwiW3MhPScnXTp4XCIgKTtcblx0XHRcdHJidWdneU1hdGNoZXMucHVzaCggXCIhPVwiLCBwc2V1ZG9zICk7XG5cdFx0fSk7XG5cdH1cblxuXHRyYnVnZ3lRU0EgPSByYnVnZ3lRU0EubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdneVFTQS5qb2luKFwifFwiKSApO1xuXHRyYnVnZ3lNYXRjaGVzID0gcmJ1Z2d5TWF0Y2hlcy5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5TWF0Y2hlcy5qb2luKFwifFwiKSApO1xuXG5cdC8qIENvbnRhaW5zXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblx0aGFzQ29tcGFyZSA9IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiApO1xuXG5cdC8vIEVsZW1lbnQgY29udGFpbnMgYW5vdGhlclxuXHQvLyBQdXJwb3NlZnVsbHkgc2VsZi1leGNsdXNpdmVcblx0Ly8gQXMgaW4sIGFuIGVsZW1lbnQgZG9lcyBub3QgY29udGFpbiBpdHNlbGZcblx0Y29udGFpbnMgPSBoYXNDb21wYXJlIHx8IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb250YWlucyApID9cblx0XHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHRcdHZhciBhZG93biA9IGEubm9kZVR5cGUgPT09IDkgPyBhLmRvY3VtZW50RWxlbWVudCA6IGEsXG5cdFx0XHRcdGJ1cCA9IGIgJiYgYi5wYXJlbnROb2RlO1xuXHRcdFx0cmV0dXJuIGEgPT09IGJ1cCB8fCAhISggYnVwICYmIGJ1cC5ub2RlVHlwZSA9PT0gMSAmJiAoXG5cdFx0XHRcdGFkb3duLmNvbnRhaW5zID9cblx0XHRcdFx0XHRhZG93bi5jb250YWlucyggYnVwICkgOlxuXHRcdFx0XHRcdGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gJiYgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYnVwICkgJiAxNlxuXHRcdFx0KSk7XG5cdFx0fSA6XG5cdFx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0XHRpZiAoIGIgKSB7XG5cdFx0XHRcdHdoaWxlICggKGIgPSBiLnBhcmVudE5vZGUpICkge1xuXHRcdFx0XHRcdGlmICggYiA9PT0gYSApIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cblx0LyogU29ydGluZ1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gRG9jdW1lbnQgb3JkZXIgc29ydGluZ1xuXHRzb3J0T3JkZXIgPSBoYXNDb21wYXJlID9cblx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cblx0XHQvLyBGbGFnIGZvciBkdXBsaWNhdGUgcmVtb3ZhbFxuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHQvLyBTb3J0IG9uIG1ldGhvZCBleGlzdGVuY2UgaWYgb25seSBvbmUgaW5wdXQgaGFzIGNvbXBhcmVEb2N1bWVudFBvc2l0aW9uXG5cdFx0dmFyIGNvbXBhcmUgPSAhYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAtICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO1xuXHRcdGlmICggY29tcGFyZSApIHtcblx0XHRcdHJldHVybiBjb21wYXJlO1xuXHRcdH1cblxuXHRcdC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBpZiBib3RoIGlucHV0cyBiZWxvbmcgdG8gdGhlIHNhbWUgZG9jdW1lbnRcblx0XHRjb21wYXJlID0gKCBhLm93bmVyRG9jdW1lbnQgfHwgYSApID09PSAoIGIub3duZXJEb2N1bWVudCB8fCBiICkgP1xuXHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYiApIDpcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHdlIGtub3cgdGhleSBhcmUgZGlzY29ubmVjdGVkXG5cdFx0XHQxO1xuXG5cdFx0Ly8gRGlzY29ubmVjdGVkIG5vZGVzXG5cdFx0aWYgKCBjb21wYXJlICYgMSB8fFxuXHRcdFx0KCFzdXBwb3J0LnNvcnREZXRhY2hlZCAmJiBiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBhICkgPT09IGNvbXBhcmUpICkge1xuXG5cdFx0XHQvLyBDaG9vc2UgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBpcyByZWxhdGVkIHRvIG91ciBwcmVmZXJyZWQgZG9jdW1lbnRcblx0XHRcdGlmICggYSA9PT0gZG9jdW1lbnQgfHwgYS5vd25lckRvY3VtZW50ID09PSBwcmVmZXJyZWREb2MgJiYgY29udGFpbnMocHJlZmVycmVkRG9jLCBhKSApIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBiID09PSBkb2N1bWVudCB8fCBiLm93bmVyRG9jdW1lbnQgPT09IHByZWZlcnJlZERvYyAmJiBjb250YWlucyhwcmVmZXJyZWREb2MsIGIpICkge1xuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFpbnRhaW4gb3JpZ2luYWwgb3JkZXJcblx0XHRcdHJldHVybiBzb3J0SW5wdXQgP1xuXHRcdFx0XHQoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6XG5cdFx0XHRcdDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbXBhcmUgJiA0ID8gLTEgOiAxO1xuXHR9IDpcblx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0Ly8gRXhpdCBlYXJseSBpZiB0aGUgbm9kZXMgYXJlIGlkZW50aWNhbFxuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHR2YXIgY3VyLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRhdXAgPSBhLnBhcmVudE5vZGUsXG5cdFx0XHRidXAgPSBiLnBhcmVudE5vZGUsXG5cdFx0XHRhcCA9IFsgYSBdLFxuXHRcdFx0YnAgPSBbIGIgXTtcblxuXHRcdC8vIFBhcmVudGxlc3Mgbm9kZXMgYXJlIGVpdGhlciBkb2N1bWVudHMgb3IgZGlzY29ubmVjdGVkXG5cdFx0aWYgKCAhYXVwIHx8ICFidXAgKSB7XG5cdFx0XHRyZXR1cm4gYSA9PT0gZG9jdW1lbnQgPyAtMSA6XG5cdFx0XHRcdGIgPT09IGRvY3VtZW50ID8gMSA6XG5cdFx0XHRcdGF1cCA/IC0xIDpcblx0XHRcdFx0YnVwID8gMSA6XG5cdFx0XHRcdHNvcnRJbnB1dCA/XG5cdFx0XHRcdCggaW5kZXhPZiggc29ydElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5wdXQsIGIgKSApIDpcblx0XHRcdFx0MDtcblxuXHRcdC8vIElmIHRoZSBub2RlcyBhcmUgc2libGluZ3MsIHdlIGNhbiBkbyBhIHF1aWNrIGNoZWNrXG5cdFx0fSBlbHNlIGlmICggYXVwID09PSBidXAgKSB7XG5cdFx0XHRyZXR1cm4gc2libGluZ0NoZWNrKCBhLCBiICk7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXJ3aXNlIHdlIG5lZWQgZnVsbCBsaXN0cyBvZiB0aGVpciBhbmNlc3RvcnMgZm9yIGNvbXBhcmlzb25cblx0XHRjdXIgPSBhO1xuXHRcdHdoaWxlICggKGN1ciA9IGN1ci5wYXJlbnROb2RlKSApIHtcblx0XHRcdGFwLnVuc2hpZnQoIGN1ciApO1xuXHRcdH1cblx0XHRjdXIgPSBiO1xuXHRcdHdoaWxlICggKGN1ciA9IGN1ci5wYXJlbnROb2RlKSApIHtcblx0XHRcdGJwLnVuc2hpZnQoIGN1ciApO1xuXHRcdH1cblxuXHRcdC8vIFdhbGsgZG93biB0aGUgdHJlZSBsb29raW5nIGZvciBhIGRpc2NyZXBhbmN5XG5cdFx0d2hpbGUgKCBhcFtpXSA9PT0gYnBbaV0gKSB7XG5cdFx0XHRpKys7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGkgP1xuXHRcdFx0Ly8gRG8gYSBzaWJsaW5nIGNoZWNrIGlmIHRoZSBub2RlcyBoYXZlIGEgY29tbW9uIGFuY2VzdG9yXG5cdFx0XHRzaWJsaW5nQ2hlY2soIGFwW2ldLCBicFtpXSApIDpcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIG5vZGVzIGluIG91ciBkb2N1bWVudCBzb3J0IGZpcnN0XG5cdFx0XHRhcFtpXSA9PT0gcHJlZmVycmVkRG9jID8gLTEgOlxuXHRcdFx0YnBbaV0gPT09IHByZWZlcnJlZERvYyA/IDEgOlxuXHRcdFx0MDtcblx0fTtcblxuXHRyZXR1cm4gZG9jdW1lbnQ7XG59O1xuXG5TaXp6bGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBleHByLCBlbGVtZW50cyApIHtcblx0cmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgZWxlbWVudHMgKTtcbn07XG5cblNpenpsZS5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiggZWxlbSwgZXhwciApIHtcblx0Ly8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkXG5cdGlmICggKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9PSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggZWxlbSApO1xuXHR9XG5cblx0aWYgKCBzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciAmJiBkb2N1bWVudElzSFRNTCAmJlxuXHRcdCFub25uYXRpdmVTZWxlY3RvckNhY2hlWyBleHByICsgXCIgXCIgXSAmJlxuXHRcdCggIXJidWdneU1hdGNoZXMgfHwgIXJidWdneU1hdGNoZXMudGVzdCggZXhwciApICkgJiZcblx0XHQoICFyYnVnZ3lRU0EgICAgIHx8ICFyYnVnZ3lRU0EudGVzdCggZXhwciApICkgKSB7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFyIHJldCA9IG1hdGNoZXMuY2FsbCggZWxlbSwgZXhwciApO1xuXG5cdFx0XHQvLyBJRSA5J3MgbWF0Y2hlc1NlbGVjdG9yIHJldHVybnMgZmFsc2Ugb24gZGlzY29ubmVjdGVkIG5vZGVzXG5cdFx0XHRpZiAoIHJldCB8fCBzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoIHx8XG5cdFx0XHRcdFx0Ly8gQXMgd2VsbCwgZGlzY29ubmVjdGVkIG5vZGVzIGFyZSBzYWlkIHRvIGJlIGluIGEgZG9jdW1lbnRcblx0XHRcdFx0XHQvLyBmcmFnbWVudCBpbiBJRSA5XG5cdFx0XHRcdFx0ZWxlbS5kb2N1bWVudCAmJiBlbGVtLmRvY3VtZW50Lm5vZGVUeXBlICE9PSAxMSApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRub25uYXRpdmVTZWxlY3RvckNhY2hlKCBleHByLCB0cnVlICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIFNpenpsZSggZXhwciwgZG9jdW1lbnQsIG51bGwsIFsgZWxlbSBdICkubGVuZ3RoID4gMDtcbn07XG5cblNpenpsZS5jb250YWlucyA9IGZ1bmN0aW9uKCBjb250ZXh0LCBlbGVtICkge1xuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0aWYgKCAoIGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0ICkgIT09IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBjb250ZXh0ICk7XG5cdH1cblx0cmV0dXJuIGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICk7XG59O1xuXG5TaXp6bGUuYXR0ciA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0aWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT09IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdH1cblxuXHR2YXIgZm4gPSBFeHByLmF0dHJIYW5kbGVbIG5hbWUudG9Mb3dlckNhc2UoKSBdLFxuXHRcdC8vIERvbid0IGdldCBmb29sZWQgYnkgT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzIChqUXVlcnkgIzEzODA3KVxuXHRcdHZhbCA9IGZuICYmIGhhc093bi5jYWxsKCBFeHByLmF0dHJIYW5kbGUsIG5hbWUudG9Mb3dlckNhc2UoKSApID9cblx0XHRcdGZuKCBlbGVtLCBuYW1lLCAhZG9jdW1lbnRJc0hUTUwgKSA6XG5cdFx0XHR1bmRlZmluZWQ7XG5cblx0cmV0dXJuIHZhbCAhPT0gdW5kZWZpbmVkID9cblx0XHR2YWwgOlxuXHRcdHN1cHBvcnQuYXR0cmlidXRlcyB8fCAhZG9jdW1lbnRJc0hUTUwgP1xuXHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKSA6XG5cdFx0XHQodmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpKSAmJiB2YWwuc3BlY2lmaWVkID9cblx0XHRcdFx0dmFsLnZhbHVlIDpcblx0XHRcdFx0bnVsbDtcbn07XG5cblNpenpsZS5lc2NhcGUgPSBmdW5jdGlvbiggc2VsICkge1xuXHRyZXR1cm4gKHNlbCArIFwiXCIpLnJlcGxhY2UoIHJjc3Nlc2NhcGUsIGZjc3Nlc2NhcGUgKTtcbn07XG5cblNpenpsZS5lcnJvciA9IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdHRocm93IG5ldyBFcnJvciggXCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiBcIiArIG1zZyApO1xufTtcblxuLyoqXG4gKiBEb2N1bWVudCBzb3J0aW5nIGFuZCByZW1vdmluZyBkdXBsaWNhdGVzXG4gKiBAcGFyYW0ge0FycmF5TGlrZX0gcmVzdWx0c1xuICovXG5TaXp6bGUudW5pcXVlU29ydCA9IGZ1bmN0aW9uKCByZXN1bHRzICkge1xuXHR2YXIgZWxlbSxcblx0XHRkdXBsaWNhdGVzID0gW10sXG5cdFx0aiA9IDAsXG5cdFx0aSA9IDA7XG5cblx0Ly8gVW5sZXNzIHdlICprbm93KiB3ZSBjYW4gZGV0ZWN0IGR1cGxpY2F0ZXMsIGFzc3VtZSB0aGVpciBwcmVzZW5jZVxuXHRoYXNEdXBsaWNhdGUgPSAhc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzO1xuXHRzb3J0SW5wdXQgPSAhc3VwcG9ydC5zb3J0U3RhYmxlICYmIHJlc3VsdHMuc2xpY2UoIDAgKTtcblx0cmVzdWx0cy5zb3J0KCBzb3J0T3JkZXIgKTtcblxuXHRpZiAoIGhhc0R1cGxpY2F0ZSApIHtcblx0XHR3aGlsZSAoIChlbGVtID0gcmVzdWx0c1tpKytdKSApIHtcblx0XHRcdGlmICggZWxlbSA9PT0gcmVzdWx0c1sgaSBdICkge1xuXHRcdFx0XHRqID0gZHVwbGljYXRlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0cmVzdWx0cy5zcGxpY2UoIGR1cGxpY2F0ZXNbIGogXSwgMSApO1xuXHRcdH1cblx0fVxuXG5cdC8vIENsZWFyIGlucHV0IGFmdGVyIHNvcnRpbmcgdG8gcmVsZWFzZSBvYmplY3RzXG5cdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9wdWxsLzIyNVxuXHRzb3J0SW5wdXQgPSBudWxsO1xuXG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIGZvciByZXRyaWV2aW5nIHRoZSB0ZXh0IHZhbHVlIG9mIGFuIGFycmF5IG9mIERPTSBub2Rlc1xuICogQHBhcmFtIHtBcnJheXxFbGVtZW50fSBlbGVtXG4gKi9cbmdldFRleHQgPSBTaXp6bGUuZ2V0VGV4dCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHR2YXIgbm9kZSxcblx0XHRyZXQgPSBcIlwiLFxuXHRcdGkgPSAwLFxuXHRcdG5vZGVUeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRpZiAoICFub2RlVHlwZSApIHtcblx0XHQvLyBJZiBubyBub2RlVHlwZSwgdGhpcyBpcyBleHBlY3RlZCB0byBiZSBhbiBhcnJheVxuXHRcdHdoaWxlICggKG5vZGUgPSBlbGVtW2krK10pICkge1xuXHRcdFx0Ly8gRG8gbm90IHRyYXZlcnNlIGNvbW1lbnQgbm9kZXNcblx0XHRcdHJldCArPSBnZXRUZXh0KCBub2RlICk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMSB8fCBub2RlVHlwZSA9PT0gOSB8fCBub2RlVHlwZSA9PT0gMTEgKSB7XG5cdFx0Ly8gVXNlIHRleHRDb250ZW50IGZvciBlbGVtZW50c1xuXHRcdC8vIGlubmVyVGV4dCB1c2FnZSByZW1vdmVkIGZvciBjb25zaXN0ZW5jeSBvZiBuZXcgbGluZXMgKGpRdWVyeSAjMTExNTMpXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS50ZXh0Q29udGVudCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLnRleHRDb250ZW50O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBUcmF2ZXJzZSBpdHMgY2hpbGRyZW5cblx0XHRcdGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkge1xuXHRcdFx0XHRyZXQgKz0gZ2V0VGV4dCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIGlmICggbm9kZVR5cGUgPT09IDMgfHwgbm9kZVR5cGUgPT09IDQgKSB7XG5cdFx0cmV0dXJuIGVsZW0ubm9kZVZhbHVlO1xuXHR9XG5cdC8vIERvIG5vdCBpbmNsdWRlIGNvbW1lbnQgb3IgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBub2Rlc1xuXG5cdHJldHVybiByZXQ7XG59O1xuXG5FeHByID0gU2l6emxlLnNlbGVjdG9ycyA9IHtcblxuXHQvLyBDYW4gYmUgYWRqdXN0ZWQgYnkgdGhlIHVzZXJcblx0Y2FjaGVMZW5ndGg6IDUwLFxuXG5cdGNyZWF0ZVBzZXVkbzogbWFya0Z1bmN0aW9uLFxuXG5cdG1hdGNoOiBtYXRjaEV4cHIsXG5cblx0YXR0ckhhbmRsZToge30sXG5cblx0ZmluZDoge30sXG5cblx0cmVsYXRpdmU6IHtcblx0XHRcIj5cIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiLCBmaXJzdDogdHJ1ZSB9LFxuXHRcdFwiIFwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIgfSxcblx0XHRcIitcIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCJ+XCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiIH1cblx0fSxcblxuXHRwcmVGaWx0ZXI6IHtcblx0XHRcIkFUVFJcIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0bWF0Y2hbMV0gPSBtYXRjaFsxXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXG5cdFx0XHQvLyBNb3ZlIHRoZSBnaXZlbiB2YWx1ZSB0byBtYXRjaFszXSB3aGV0aGVyIHF1b3RlZCBvciB1bnF1b3RlZFxuXHRcdFx0bWF0Y2hbM10gPSAoIG1hdGNoWzNdIHx8IG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8IFwiXCIgKS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXG5cdFx0XHRpZiAoIG1hdGNoWzJdID09PSBcIn49XCIgKSB7XG5cdFx0XHRcdG1hdGNoWzNdID0gXCIgXCIgKyBtYXRjaFszXSArIFwiIFwiO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDQgKTtcblx0XHR9LFxuXG5cdFx0XCJDSElMRFwiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHQvKiBtYXRjaGVzIGZyb20gbWF0Y2hFeHByW1wiQ0hJTERcIl1cblx0XHRcdFx0MSB0eXBlIChvbmx5fG50aHwuLi4pXG5cdFx0XHRcdDIgd2hhdCAoY2hpbGR8b2YtdHlwZSlcblx0XHRcdFx0MyBhcmd1bWVudCAoZXZlbnxvZGR8XFxkKnxcXGQqbihbKy1dXFxkKyk/fC4uLilcblx0XHRcdFx0NCB4bi1jb21wb25lbnQgb2YgeG4reSBhcmd1bWVudCAoWystXT9cXGQqbnwpXG5cdFx0XHRcdDUgc2lnbiBvZiB4bi1jb21wb25lbnRcblx0XHRcdFx0NiB4IG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ3IHNpZ24gb2YgeS1jb21wb25lbnRcblx0XHRcdFx0OCB5IG9mIHktY29tcG9uZW50XG5cdFx0XHQqL1xuXHRcdFx0bWF0Y2hbMV0gPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0XHRpZiAoIG1hdGNoWzFdLnNsaWNlKCAwLCAzICkgPT09IFwibnRoXCIgKSB7XG5cdFx0XHRcdC8vIG50aC0qIHJlcXVpcmVzIGFyZ3VtZW50XG5cdFx0XHRcdGlmICggIW1hdGNoWzNdICkge1xuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggbWF0Y2hbMF0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIG51bWVyaWMgeCBhbmQgeSBwYXJhbWV0ZXJzIGZvciBFeHByLmZpbHRlci5DSElMRFxuXHRcdFx0XHQvLyByZW1lbWJlciB0aGF0IGZhbHNlL3RydWUgY2FzdCByZXNwZWN0aXZlbHkgdG8gMC8xXG5cdFx0XHRcdG1hdGNoWzRdID0gKyggbWF0Y2hbNF0gPyBtYXRjaFs1XSArIChtYXRjaFs2XSB8fCAxKSA6IDIgKiAoIG1hdGNoWzNdID09PSBcImV2ZW5cIiB8fCBtYXRjaFszXSA9PT0gXCJvZGRcIiApICk7XG5cdFx0XHRcdG1hdGNoWzVdID0gKyggKCBtYXRjaFs3XSArIG1hdGNoWzhdICkgfHwgbWF0Y2hbM10gPT09IFwib2RkXCIgKTtcblxuXHRcdFx0Ly8gb3RoZXIgdHlwZXMgcHJvaGliaXQgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCBtYXRjaFszXSApIHtcblx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFswXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0fSxcblxuXHRcdFwiUFNFVURPXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdHZhciBleGNlc3MsXG5cdFx0XHRcdHVucXVvdGVkID0gIW1hdGNoWzZdICYmIG1hdGNoWzJdO1xuXG5cdFx0XHRpZiAoIG1hdGNoRXhwcltcIkNISUxEXCJdLnRlc3QoIG1hdGNoWzBdICkgKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBY2NlcHQgcXVvdGVkIGFyZ3VtZW50cyBhcy1pc1xuXHRcdFx0aWYgKCBtYXRjaFszXSApIHtcblx0XHRcdFx0bWF0Y2hbMl0gPSBtYXRjaFs0XSB8fCBtYXRjaFs1XSB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTdHJpcCBleGNlc3MgY2hhcmFjdGVycyBmcm9tIHVucXVvdGVkIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggdW5xdW90ZWQgJiYgcnBzZXVkby50ZXN0KCB1bnF1b3RlZCApICYmXG5cdFx0XHRcdC8vIEdldCBleGNlc3MgZnJvbSB0b2tlbml6ZSAocmVjdXJzaXZlbHkpXG5cdFx0XHRcdChleGNlc3MgPSB0b2tlbml6ZSggdW5xdW90ZWQsIHRydWUgKSkgJiZcblx0XHRcdFx0Ly8gYWR2YW5jZSB0byB0aGUgbmV4dCBjbG9zaW5nIHBhcmVudGhlc2lzXG5cdFx0XHRcdChleGNlc3MgPSB1bnF1b3RlZC5pbmRleE9mKCBcIilcIiwgdW5xdW90ZWQubGVuZ3RoIC0gZXhjZXNzICkgLSB1bnF1b3RlZC5sZW5ndGgpICkge1xuXG5cdFx0XHRcdC8vIGV4Y2VzcyBpcyBhIG5lZ2F0aXZlIGluZGV4XG5cdFx0XHRcdG1hdGNoWzBdID0gbWF0Y2hbMF0uc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0XHRtYXRjaFsyXSA9IHVucXVvdGVkLnNsaWNlKCAwLCBleGNlc3MgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV0dXJuIG9ubHkgY2FwdHVyZXMgbmVlZGVkIGJ5IHRoZSBwc2V1ZG8gZmlsdGVyIG1ldGhvZCAodHlwZSBhbmQgYXJndW1lbnQpXG5cdFx0XHRyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDMgKTtcblx0XHR9XG5cdH0sXG5cblx0ZmlsdGVyOiB7XG5cblx0XHRcIlRBR1wiOiBmdW5jdGlvbiggbm9kZU5hbWVTZWxlY3RvciApIHtcblx0XHRcdHZhciBub2RlTmFtZSA9IG5vZGVOYW1lU2VsZWN0b3IucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIG5vZGVOYW1lU2VsZWN0b3IgPT09IFwiKlwiID9cblx0XHRcdFx0ZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9IDpcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBub2RlTmFtZTtcblx0XHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJDTEFTU1wiOiBmdW5jdGlvbiggY2xhc3NOYW1lICkge1xuXHRcdFx0dmFyIHBhdHRlcm4gPSBjbGFzc0NhY2hlWyBjbGFzc05hbWUgKyBcIiBcIiBdO1xuXG5cdFx0XHRyZXR1cm4gcGF0dGVybiB8fFxuXHRcdFx0XHQocGF0dGVybiA9IG5ldyBSZWdFeHAoIFwiKF58XCIgKyB3aGl0ZXNwYWNlICsgXCIpXCIgKyBjbGFzc05hbWUgKyBcIihcIiArIHdoaXRlc3BhY2UgKyBcInwkKVwiICkpICYmXG5cdFx0XHRcdGNsYXNzQ2FjaGUoIGNsYXNzTmFtZSwgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhdHRlcm4udGVzdCggdHlwZW9mIGVsZW0uY2xhc3NOYW1lID09PSBcInN0cmluZ1wiICYmIGVsZW0uY2xhc3NOYW1lIHx8IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBlbGVtLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpIHx8IFwiXCIgKTtcblx0XHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdFwiQVRUUlwiOiBmdW5jdGlvbiggbmFtZSwgb3BlcmF0b3IsIGNoZWNrICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgcmVzdWx0ID0gU2l6emxlLmF0dHIoIGVsZW0sIG5hbWUgKTtcblxuXHRcdFx0XHRpZiAoIHJlc3VsdCA9PSBudWxsICkge1xuXHRcdFx0XHRcdHJldHVybiBvcGVyYXRvciA9PT0gXCIhPVwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggIW9wZXJhdG9yICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmVzdWx0ICs9IFwiXCI7XG5cblx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIj1cIiA/IHJlc3VsdCA9PT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIiE9XCIgPyByZXN1bHQgIT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJePVwiID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPT09IDAgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIio9XCIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIkPVwiID8gY2hlY2sgJiYgcmVzdWx0LnNsaWNlKCAtY2hlY2subGVuZ3RoICkgPT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJ+PVwiID8gKCBcIiBcIiArIHJlc3VsdC5yZXBsYWNlKCByd2hpdGVzcGFjZSwgXCIgXCIgKSArIFwiIFwiICkuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJ8PVwiID8gcmVzdWx0ID09PSBjaGVjayB8fCByZXN1bHQuc2xpY2UoIDAsIGNoZWNrLmxlbmd0aCArIDEgKSA9PT0gY2hlY2sgKyBcIi1cIiA6XG5cdFx0XHRcdFx0ZmFsc2U7XG5cdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCB0eXBlLCB3aGF0LCBhcmd1bWVudCwgZmlyc3QsIGxhc3QgKSB7XG5cdFx0XHR2YXIgc2ltcGxlID0gdHlwZS5zbGljZSggMCwgMyApICE9PSBcIm50aFwiLFxuXHRcdFx0XHRmb3J3YXJkID0gdHlwZS5zbGljZSggLTQgKSAhPT0gXCJsYXN0XCIsXG5cdFx0XHRcdG9mVHlwZSA9IHdoYXQgPT09IFwib2YtdHlwZVwiO1xuXG5cdFx0XHRyZXR1cm4gZmlyc3QgPT09IDEgJiYgbGFzdCA9PT0gMCA/XG5cblx0XHRcdFx0Ly8gU2hvcnRjdXQgZm9yIDpudGgtKihuKVxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gISFlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRcdH0gOlxuXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGNhY2hlLCB1bmlxdWVDYWNoZSwgb3V0ZXJDYWNoZSwgbm9kZSwgbm9kZUluZGV4LCBzdGFydCxcblx0XHRcdFx0XHRcdGRpciA9IHNpbXBsZSAhPT0gZm9yd2FyZCA/IFwibmV4dFNpYmxpbmdcIiA6IFwicHJldmlvdXNTaWJsaW5nXCIsXG5cdFx0XHRcdFx0XHRwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGUsXG5cdFx0XHRcdFx0XHRuYW1lID0gb2ZUeXBlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxcblx0XHRcdFx0XHRcdHVzZUNhY2hlID0gIXhtbCAmJiAhb2ZUeXBlLFxuXHRcdFx0XHRcdFx0ZGlmZiA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdC8vIDooZmlyc3R8bGFzdHxvbmx5KS0oY2hpbGR8b2YtdHlwZSlcblx0XHRcdFx0XHRcdGlmICggc2ltcGxlICkge1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoIGRpciApIHtcblx0XHRcdFx0XHRcdFx0XHRub2RlID0gZWxlbTtcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoIChub2RlID0gbm9kZVsgZGlyIF0pICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBvZlR5cGUgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0Ly8gUmV2ZXJzZSBkaXJlY3Rpb24gZm9yIDpvbmx5LSogKGlmIHdlIGhhdmVuJ3QgeWV0IGRvbmUgc28pXG5cdFx0XHRcdFx0XHRcdFx0c3RhcnQgPSBkaXIgPSB0eXBlID09PSBcIm9ubHlcIiAmJiAhc3RhcnQgJiYgXCJuZXh0U2libGluZ1wiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRzdGFydCA9IFsgZm9yd2FyZCA/IHBhcmVudC5maXJzdENoaWxkIDogcGFyZW50Lmxhc3RDaGlsZCBdO1xuXG5cdFx0XHRcdFx0XHQvLyBub24teG1sIDpudGgtY2hpbGQoLi4uKSBzdG9yZXMgY2FjaGUgZGF0YSBvbiBgcGFyZW50YFxuXHRcdFx0XHRcdFx0aWYgKCBmb3J3YXJkICYmIHVzZUNhY2hlICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFNlZWsgYGVsZW1gIGZyb20gYSBwcmV2aW91c2x5LWNhY2hlZCBpbmRleFxuXG5cdFx0XHRcdFx0XHRcdC8vIC4uLmluIGEgZ3ppcC1mcmllbmRseSB3YXlcblx0XHRcdFx0XHRcdFx0bm9kZSA9IHBhcmVudDtcblx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0KG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0XHRjYWNoZSA9IHVuaXF1ZUNhY2hlWyB0eXBlIF0gfHwgW107XG5cdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0ZGlmZiA9IG5vZGVJbmRleCAmJiBjYWNoZVsgMiBdO1xuXHRcdFx0XHRcdFx0XHRub2RlID0gbm9kZUluZGV4ICYmIHBhcmVudC5jaGlsZE5vZGVzWyBub2RlSW5kZXggXTtcblxuXHRcdFx0XHRcdFx0XHR3aGlsZSAoIChub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gRmFsbGJhY2sgdG8gc2Vla2luZyBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHQoZGlmZiA9IG5vZGVJbmRleCA9IDApIHx8IHN0YXJ0LnBvcCgpKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFdoZW4gZm91bmQsIGNhY2hlIGluZGV4ZXMgb24gYHBhcmVudGAgYW5kIGJyZWFrXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlLm5vZGVUeXBlID09PSAxICYmICsrZGlmZiAmJiBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgbm9kZUluZGV4LCBkaWZmIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Ly8gVXNlIHByZXZpb3VzbHktY2FjaGVkIGVsZW1lbnQgaW5kZXggaWYgYXZhaWxhYmxlXG5cdFx0XHRcdFx0XHRcdGlmICggdXNlQ2FjaGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheVxuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKG5vZGVbIGV4cGFuZG8gXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0XHRcdGNhY2hlID0gdW5pcXVlQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0XHRub2RlSW5kZXggPSBjYWNoZVsgMCBdID09PSBkaXJydW5zICYmIGNhY2hlWyAxIF07XG5cdFx0XHRcdFx0XHRcdFx0ZGlmZiA9IG5vZGVJbmRleDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdC8vIHhtbCA6bnRoLWNoaWxkKC4uLilcblx0XHRcdFx0XHRcdFx0Ly8gb3IgOm50aC1sYXN0LWNoaWxkKC4uLikgb3IgOm50aCgtbGFzdCk/LW9mLXR5cGUoLi4uKVxuXHRcdFx0XHRcdFx0XHRpZiAoIGRpZmYgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFVzZSB0aGUgc2FtZSBsb29wIGFzIGFib3ZlIHRvIHNlZWsgYGVsZW1gIGZyb20gdGhlIHN0YXJ0XG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUgKCAobm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdChkaWZmID0gbm9kZUluZGV4ID0gMCkgfHwgc3RhcnQucG9wKCkpICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoICggb2ZUeXBlID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lIDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlVHlwZSA9PT0gMSApICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCsrZGlmZiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBDYWNoZSB0aGUgaW5kZXggb2YgZWFjaCBlbmNvdW50ZXJlZCBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggdXNlQ2FjaGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAobm9kZVsgZXhwYW5kbyBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQob3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgZGlmZiBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEluY29ycG9yYXRlIHRoZSBvZmZzZXQsIHRoZW4gY2hlY2sgYWdhaW5zdCBjeWNsZSBzaXplXG5cdFx0XHRcdFx0XHRkaWZmIC09IGxhc3Q7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZGlmZiA9PT0gZmlyc3QgfHwgKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiUFNFVURPXCI6IGZ1bmN0aW9uKCBwc2V1ZG8sIGFyZ3VtZW50ICkge1xuXHRcdFx0Ly8gcHNldWRvLWNsYXNzIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI3BzZXVkby1jbGFzc2VzXG5cdFx0XHQvLyBQcmlvcml0aXplIGJ5IGNhc2Ugc2Vuc2l0aXZpdHkgaW4gY2FzZSBjdXN0b20gcHNldWRvcyBhcmUgYWRkZWQgd2l0aCB1cHBlcmNhc2UgbGV0dGVyc1xuXHRcdFx0Ly8gUmVtZW1iZXIgdGhhdCBzZXRGaWx0ZXJzIGluaGVyaXRzIGZyb20gcHNldWRvc1xuXHRcdFx0dmFyIGFyZ3MsXG5cdFx0XHRcdGZuID0gRXhwci5wc2V1ZG9zWyBwc2V1ZG8gXSB8fCBFeHByLnNldEZpbHRlcnNbIHBzZXVkby50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0XHRTaXp6bGUuZXJyb3IoIFwidW5zdXBwb3J0ZWQgcHNldWRvOiBcIiArIHBzZXVkbyApO1xuXG5cdFx0XHQvLyBUaGUgdXNlciBtYXkgdXNlIGNyZWF0ZVBzZXVkbyB0byBpbmRpY2F0ZSB0aGF0XG5cdFx0XHQvLyBhcmd1bWVudHMgYXJlIG5lZWRlZCB0byBjcmVhdGUgdGhlIGZpbHRlciBmdW5jdGlvblxuXHRcdFx0Ly8ganVzdCBhcyBTaXp6bGUgZG9lc1xuXHRcdFx0aWYgKCBmblsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRyZXR1cm4gZm4oIGFyZ3VtZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEJ1dCBtYWludGFpbiBzdXBwb3J0IGZvciBvbGQgc2lnbmF0dXJlc1xuXHRcdFx0aWYgKCBmbi5sZW5ndGggPiAxICkge1xuXHRcdFx0XHRhcmdzID0gWyBwc2V1ZG8sIHBzZXVkbywgXCJcIiwgYXJndW1lbnQgXTtcblx0XHRcdFx0cmV0dXJuIEV4cHIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eSggcHNldWRvLnRvTG93ZXJDYXNlKCkgKSA/XG5cdFx0XHRcdFx0bWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkge1xuXHRcdFx0XHRcdFx0dmFyIGlkeCxcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZCA9IGZuKCBzZWVkLCBhcmd1bWVudCApLFxuXHRcdFx0XHRcdFx0XHRpID0gbWF0Y2hlZC5sZW5ndGg7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWR4ID0gaW5kZXhPZiggc2VlZCwgbWF0Y2hlZFtpXSApO1xuXHRcdFx0XHRcdFx0XHRzZWVkWyBpZHggXSA9ICEoIG1hdGNoZXNbIGlkeCBdID0gbWF0Y2hlZFtpXSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pIDpcblx0XHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBmbiggZWxlbSwgMCwgYXJncyApO1xuXHRcdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmbjtcblx0XHR9XG5cdH0sXG5cblx0cHNldWRvczoge1xuXHRcdC8vIFBvdGVudGlhbGx5IGNvbXBsZXggcHNldWRvc1xuXHRcdFwibm90XCI6IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0XHQvLyBUcmltIHRoZSBzZWxlY3RvciBwYXNzZWQgdG8gY29tcGlsZVxuXHRcdFx0Ly8gdG8gYXZvaWQgdHJlYXRpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmdcblx0XHRcdC8vIHNwYWNlcyBhcyBjb21iaW5hdG9yc1xuXHRcdFx0dmFyIGlucHV0ID0gW10sXG5cdFx0XHRcdHJlc3VsdHMgPSBbXSxcblx0XHRcdFx0bWF0Y2hlciA9IGNvbXBpbGUoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSApO1xuXG5cdFx0XHRyZXR1cm4gbWF0Y2hlclsgZXhwYW5kbyBdID9cblx0XHRcdFx0bWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGVsZW0sXG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQgPSBtYXRjaGVyKCBzZWVkLCBudWxsLCB4bWwsIFtdICksXG5cdFx0XHRcdFx0XHRpID0gc2VlZC5sZW5ndGg7XG5cblx0XHRcdFx0XHQvLyBNYXRjaCBlbGVtZW50cyB1bm1hdGNoZWQgYnkgYG1hdGNoZXJgXG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRpZiAoIChlbGVtID0gdW5tYXRjaGVkW2ldKSApIHtcblx0XHRcdFx0XHRcdFx0c2VlZFtpXSA9ICEobWF0Y2hlc1tpXSA9IGVsZW0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSkgOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdGlucHV0WzBdID0gZWxlbTtcblx0XHRcdFx0XHRtYXRjaGVyKCBpbnB1dCwgbnVsbCwgeG1sLCByZXN1bHRzICk7XG5cdFx0XHRcdFx0Ly8gRG9uJ3Qga2VlcCB0aGUgZWxlbWVudCAoaXNzdWUgIzI5OSlcblx0XHRcdFx0XHRpbnB1dFswXSA9IG51bGw7XG5cdFx0XHRcdFx0cmV0dXJuICFyZXN1bHRzLnBvcCgpO1xuXHRcdFx0XHR9O1xuXHRcdH0pLFxuXG5cdFx0XCJoYXNcIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIFNpenpsZSggc2VsZWN0b3IsIGVsZW0gKS5sZW5ndGggPiAwO1xuXHRcdFx0fTtcblx0XHR9KSxcblxuXHRcdFwiY29udGFpbnNcIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdFx0dGV4dCA9IHRleHQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS50ZXh0Q29udGVudCB8fCBnZXRUZXh0KCBlbGVtICkgKS5pbmRleE9mKCB0ZXh0ICkgPiAtMTtcblx0XHRcdH07XG5cdFx0fSksXG5cblx0XHQvLyBcIldoZXRoZXIgYW4gZWxlbWVudCBpcyByZXByZXNlbnRlZCBieSBhIDpsYW5nKCkgc2VsZWN0b3Jcblx0XHQvLyBpcyBiYXNlZCBzb2xlbHkgb24gdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZVxuXHRcdC8vIGJlaW5nIGVxdWFsIHRvIHRoZSBpZGVudGlmaWVyIEMsXG5cdFx0Ly8gb3IgYmVnaW5uaW5nIHdpdGggdGhlIGlkZW50aWZpZXIgQyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBcIi1cIi5cblx0XHQvLyBUaGUgbWF0Y2hpbmcgb2YgQyBhZ2FpbnN0IHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWUgaXMgcGVyZm9ybWVkIGNhc2UtaW5zZW5zaXRpdmVseS5cblx0XHQvLyBUaGUgaWRlbnRpZmllciBDIGRvZXMgbm90IGhhdmUgdG8gYmUgYSB2YWxpZCBsYW5ndWFnZSBuYW1lLlwiXG5cdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNsYW5nLXBzZXVkb1xuXHRcdFwibGFuZ1wiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBsYW5nICkge1xuXHRcdFx0Ly8gbGFuZyB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllclxuXHRcdFx0aWYgKCAhcmlkZW50aWZpZXIudGVzdChsYW5nIHx8IFwiXCIpICkge1xuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIFwidW5zdXBwb3J0ZWQgbGFuZzogXCIgKyBsYW5nICk7XG5cdFx0XHR9XG5cdFx0XHRsYW5nID0gbGFuZy5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBlbGVtTGFuZztcblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGlmICggKGVsZW1MYW5nID0gZG9jdW1lbnRJc0hUTUwgP1xuXHRcdFx0XHRcdFx0ZWxlbS5sYW5nIDpcblx0XHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKFwieG1sOmxhbmdcIikgfHwgZWxlbS5nZXRBdHRyaWJ1dGUoXCJsYW5nXCIpKSApIHtcblxuXHRcdFx0XHRcdFx0ZWxlbUxhbmcgPSBlbGVtTGFuZy50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW1MYW5nID09PSBsYW5nIHx8IGVsZW1MYW5nLmluZGV4T2YoIGxhbmcgKyBcIi1cIiApID09PSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSB3aGlsZSAoIChlbGVtID0gZWxlbS5wYXJlbnROb2RlKSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cdFx0fSksXG5cblx0XHQvLyBNaXNjZWxsYW5lb3VzXG5cdFx0XCJ0YXJnZXRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbiAmJiB3aW5kb3cubG9jYXRpb24uaGFzaDtcblx0XHRcdHJldHVybiBoYXNoICYmIGhhc2guc2xpY2UoIDEgKSA9PT0gZWxlbS5pZDtcblx0XHR9LFxuXG5cdFx0XCJyb290XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGRvY0VsZW07XG5cdFx0fSxcblxuXHRcdFwiZm9jdXNcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiAoIWRvY3VtZW50Lmhhc0ZvY3VzIHx8IGRvY3VtZW50Lmhhc0ZvY3VzKCkpICYmICEhKGVsZW0udHlwZSB8fCBlbGVtLmhyZWYgfHwgfmVsZW0udGFiSW5kZXgpO1xuXHRcdH0sXG5cblx0XHQvLyBCb29sZWFuIHByb3BlcnRpZXNcblx0XHRcImVuYWJsZWRcIjogY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIGZhbHNlICksXG5cdFx0XCJkaXNhYmxlZFwiOiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggdHJ1ZSApLFxuXG5cdFx0XCJjaGVja2VkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0Ly8gSW4gQ1NTMywgOmNoZWNrZWQgc2hvdWxkIHJldHVybiBib3RoIGNoZWNrZWQgYW5kIHNlbGVjdGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZFxuXHRcdFx0dmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIChub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmICEhZWxlbS5jaGVja2VkKSB8fCAobm9kZU5hbWUgPT09IFwib3B0aW9uXCIgJiYgISFlbGVtLnNlbGVjdGVkKTtcblx0XHR9LFxuXG5cdFx0XCJzZWxlY3RlZFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdC8vIEFjY2Vzc2luZyB0aGlzIHByb3BlcnR5IG1ha2VzIHNlbGVjdGVkLWJ5LWRlZmF1bHRcblx0XHRcdC8vIG9wdGlvbnMgaW4gU2FmYXJpIHdvcmsgcHJvcGVybHlcblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRlbGVtLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGVsZW0uc2VsZWN0ZWQgPT09IHRydWU7XG5cdFx0fSxcblxuXHRcdC8vIENvbnRlbnRzXG5cdFx0XCJlbXB0eVwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jZW1wdHktcHNldWRvXG5cdFx0XHQvLyA6ZW1wdHkgaXMgbmVnYXRlZCBieSBlbGVtZW50ICgxKSBvciBjb250ZW50IG5vZGVzICh0ZXh0OiAzOyBjZGF0YTogNDsgZW50aXR5IHJlZjogNSksXG5cdFx0XHQvLyAgIGJ1dCBub3QgYnkgb3RoZXJzIChjb21tZW50OiA4OyBwcm9jZXNzaW5nIGluc3RydWN0aW9uOiA3OyBldGMuKVxuXHRcdFx0Ly8gbm9kZVR5cGUgPCA2IHdvcmtzIGJlY2F1c2UgYXR0cmlidXRlcyAoMikgZG8gbm90IGFwcGVhciBhcyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA8IDYgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0XCJwYXJlbnRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gIUV4cHIucHNldWRvc1tcImVtcHR5XCJdKCBlbGVtICk7XG5cdFx0fSxcblxuXHRcdC8vIEVsZW1lbnQvaW5wdXQgdHlwZXNcblx0XHRcImhlYWRlclwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaGVhZGVyLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0XCJpbnB1dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaW5wdXRzLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0XCJidXR0b25cIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgZWxlbS50eXBlID09PSBcImJ1dHRvblwiIHx8IG5hbWUgPT09IFwiYnV0dG9uXCI7XG5cdFx0fSxcblxuXHRcdFwidGV4dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBhdHRyO1xuXHRcdFx0cmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICYmXG5cdFx0XHRcdGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCIgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRTw4XG5cdFx0XHRcdC8vIE5ldyBIVE1MNSBhdHRyaWJ1dGUgdmFsdWVzIChlLmcuLCBcInNlYXJjaFwiKSBhcHBlYXIgd2l0aCBlbGVtLnR5cGUgPT09IFwidGV4dFwiXG5cdFx0XHRcdCggKGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZShcInR5cGVcIikpID09IG51bGwgfHwgYXR0ci50b0xvd2VyQ2FzZSgpID09PSBcInRleHRcIiApO1xuXHRcdH0sXG5cblx0XHQvLyBQb3NpdGlvbi1pbi1jb2xsZWN0aW9uXG5cdFx0XCJmaXJzdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIFsgMCBdO1xuXHRcdH0pLFxuXG5cdFx0XCJsYXN0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIFsgbGVuZ3RoIC0gMSBdO1xuXHRcdH0pLFxuXG5cdFx0XCJlcVwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHRyZXR1cm4gWyBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50IF07XG5cdFx0fSksXG5cblx0XHRcImV2ZW5cIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSksXG5cblx0XHRcIm9kZFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMTtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9KSxcblxuXHRcdFwibHRcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0dmFyIGkgPSBhcmd1bWVudCA8IDAgP1xuXHRcdFx0XHRhcmd1bWVudCArIGxlbmd0aCA6XG5cdFx0XHRcdGFyZ3VtZW50ID4gbGVuZ3RoID9cblx0XHRcdFx0XHRsZW5ndGggOlxuXHRcdFx0XHRcdGFyZ3VtZW50O1xuXHRcdFx0Zm9yICggOyAtLWkgPj0gMDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0pLFxuXG5cdFx0XCJndFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7XG5cdFx0XHRmb3IgKCA7ICsraSA8IGxlbmd0aDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0pXG5cdH1cbn07XG5cbkV4cHIucHNldWRvc1tcIm50aFwiXSA9IEV4cHIucHNldWRvc1tcImVxXCJdO1xuXG4vLyBBZGQgYnV0dG9uL2lucHV0IHR5cGUgcHNldWRvc1xuZm9yICggaSBpbiB7IHJhZGlvOiB0cnVlLCBjaGVja2JveDogdHJ1ZSwgZmlsZTogdHJ1ZSwgcGFzc3dvcmQ6IHRydWUsIGltYWdlOiB0cnVlIH0gKSB7XG5cdEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlSW5wdXRQc2V1ZG8oIGkgKTtcbn1cbmZvciAoIGkgaW4geyBzdWJtaXQ6IHRydWUsIHJlc2V0OiB0cnVlIH0gKSB7XG5cdEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlQnV0dG9uUHNldWRvKCBpICk7XG59XG5cbi8vIEVhc3kgQVBJIGZvciBjcmVhdGluZyBuZXcgc2V0RmlsdGVyc1xuZnVuY3Rpb24gc2V0RmlsdGVycygpIHt9XG5zZXRGaWx0ZXJzLnByb3RvdHlwZSA9IEV4cHIuZmlsdGVycyA9IEV4cHIucHNldWRvcztcbkV4cHIuc2V0RmlsdGVycyA9IG5ldyBzZXRGaWx0ZXJzKCk7XG5cbnRva2VuaXplID0gU2l6emxlLnRva2VuaXplID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBwYXJzZU9ubHkgKSB7XG5cdHZhciBtYXRjaGVkLCBtYXRjaCwgdG9rZW5zLCB0eXBlLFxuXHRcdHNvRmFyLCBncm91cHMsIHByZUZpbHRlcnMsXG5cdFx0Y2FjaGVkID0gdG9rZW5DYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdO1xuXG5cdGlmICggY2FjaGVkICkge1xuXHRcdHJldHVybiBwYXJzZU9ubHkgPyAwIDogY2FjaGVkLnNsaWNlKCAwICk7XG5cdH1cblxuXHRzb0ZhciA9IHNlbGVjdG9yO1xuXHRncm91cHMgPSBbXTtcblx0cHJlRmlsdGVycyA9IEV4cHIucHJlRmlsdGVyO1xuXG5cdHdoaWxlICggc29GYXIgKSB7XG5cblx0XHQvLyBDb21tYSBhbmQgZmlyc3QgcnVuXG5cdFx0aWYgKCAhbWF0Y2hlZCB8fCAobWF0Y2ggPSByY29tbWEuZXhlYyggc29GYXIgKSkgKSB7XG5cdFx0XHRpZiAoIG1hdGNoICkge1xuXHRcdFx0XHQvLyBEb24ndCBjb25zdW1lIHRyYWlsaW5nIGNvbW1hcyBhcyB2YWxpZFxuXHRcdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaFswXS5sZW5ndGggKSB8fCBzb0Zhcjtcblx0XHRcdH1cblx0XHRcdGdyb3Vwcy5wdXNoKCAodG9rZW5zID0gW10pICk7XG5cdFx0fVxuXG5cdFx0bWF0Y2hlZCA9IGZhbHNlO1xuXG5cdFx0Ly8gQ29tYmluYXRvcnNcblx0XHRpZiAoIChtYXRjaCA9IHJjb21iaW5hdG9ycy5leGVjKCBzb0ZhciApKSApIHtcblx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHR2YWx1ZTogbWF0Y2hlZCxcblx0XHRcdFx0Ly8gQ2FzdCBkZXNjZW5kYW50IGNvbWJpbmF0b3JzIHRvIHNwYWNlXG5cdFx0XHRcdHR5cGU6IG1hdGNoWzBdLnJlcGxhY2UoIHJ0cmltLCBcIiBcIiApXG5cdFx0XHR9KTtcblx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0fVxuXG5cdFx0Ly8gRmlsdGVyc1xuXHRcdGZvciAoIHR5cGUgaW4gRXhwci5maWx0ZXIgKSB7XG5cdFx0XHRpZiAoIChtYXRjaCA9IG1hdGNoRXhwclsgdHlwZSBdLmV4ZWMoIHNvRmFyICkpICYmICghcHJlRmlsdGVyc1sgdHlwZSBdIHx8XG5cdFx0XHRcdChtYXRjaCA9IHByZUZpbHRlcnNbIHR5cGUgXSggbWF0Y2ggKSkpICkge1xuXHRcdFx0XHRtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTtcblx0XHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxuXHRcdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdFx0bWF0Y2hlczogbWF0Y2hcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCAhbWF0Y2hlZCApIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnZhbGlkIGV4Y2Vzc1xuXHQvLyBpZiB3ZSdyZSBqdXN0IHBhcnNpbmdcblx0Ly8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvciBvciByZXR1cm4gdG9rZW5zXG5cdHJldHVybiBwYXJzZU9ubHkgP1xuXHRcdHNvRmFyLmxlbmd0aCA6XG5cdFx0c29GYXIgP1xuXHRcdFx0U2l6emxlLmVycm9yKCBzZWxlY3RvciApIDpcblx0XHRcdC8vIENhY2hlIHRoZSB0b2tlbnNcblx0XHRcdHRva2VuQ2FjaGUoIHNlbGVjdG9yLCBncm91cHMgKS5zbGljZSggMCApO1xufTtcblxuZnVuY3Rpb24gdG9TZWxlY3RvciggdG9rZW5zICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gdG9rZW5zLmxlbmd0aCxcblx0XHRzZWxlY3RvciA9IFwiXCI7XG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdHNlbGVjdG9yICs9IHRva2Vuc1tpXS52YWx1ZTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0b3I7XG59XG5cbmZ1bmN0aW9uIGFkZENvbWJpbmF0b3IoIG1hdGNoZXIsIGNvbWJpbmF0b3IsIGJhc2UgKSB7XG5cdHZhciBkaXIgPSBjb21iaW5hdG9yLmRpcixcblx0XHRza2lwID0gY29tYmluYXRvci5uZXh0LFxuXHRcdGtleSA9IHNraXAgfHwgZGlyLFxuXHRcdGNoZWNrTm9uRWxlbWVudHMgPSBiYXNlICYmIGtleSA9PT0gXCJwYXJlbnROb2RlXCIsXG5cdFx0ZG9uZU5hbWUgPSBkb25lKys7XG5cblx0cmV0dXJuIGNvbWJpbmF0b3IuZmlyc3QgP1xuXHRcdC8vIENoZWNrIGFnYWluc3QgY2xvc2VzdCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudFxuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkge1xuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IDpcblxuXHRcdC8vIENoZWNrIGFnYWluc3QgYWxsIGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50c1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgb2xkQ2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLFxuXHRcdFx0XHRuZXdDYWNoZSA9IFsgZGlycnVucywgZG9uZU5hbWUgXTtcblxuXHRcdFx0Ly8gV2UgY2FuJ3Qgc2V0IGFyYml0cmFyeSBkYXRhIG9uIFhNTCBub2Rlcywgc28gdGhleSBkb24ndCBiZW5lZml0IGZyb20gY29tYmluYXRvciBjYWNoaW5nXG5cdFx0XHRpZiAoIHhtbCApIHtcblx0XHRcdFx0d2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBlbGVtWyBleHBhbmRvIF0gfHwgKGVsZW1bIGV4cGFuZG8gXSA9IHt9KTtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIGVsZW0udW5pcXVlSUQgXSB8fCAob3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJRCBdID0ge30pO1xuXG5cdFx0XHRcdFx0XHRpZiAoIHNraXAgJiYgc2tpcCA9PT0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICkge1xuXHRcdFx0XHRcdFx0XHRlbGVtID0gZWxlbVsgZGlyIF0gfHwgZWxlbTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIChvbGRDYWNoZSA9IHVuaXF1ZUNhY2hlWyBrZXkgXSkgJiZcblx0XHRcdFx0XHRcdFx0b2xkQ2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBvbGRDYWNoZVsgMSBdID09PSBkb25lTmFtZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBBc3NpZ24gdG8gbmV3Q2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKG5ld0NhY2hlWyAyIF0gPSBvbGRDYWNoZVsgMiBdKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdC8vIFJldXNlIG5ld2NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHNcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIGtleSBdID0gbmV3Q2FjaGU7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQSBtYXRjaCBtZWFucyB3ZSdyZSBkb25lOyBhIGZhaWwgbWVhbnMgd2UgaGF2ZSB0byBrZWVwIGNoZWNraW5nXG5cdFx0XHRcdFx0XHRcdGlmICggKG5ld0NhY2hlWyAyIF0gPSBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xufVxuXG5mdW5jdGlvbiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSB7XG5cdHJldHVybiBtYXRjaGVycy5sZW5ndGggPiAxID9cblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIGkgPSBtYXRjaGVycy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCAhbWF0Y2hlcnNbaV0oIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSA6XG5cdFx0bWF0Y2hlcnNbMF07XG59XG5cbmZ1bmN0aW9uIG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yLCBjb250ZXh0cywgcmVzdWx0cyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGNvbnRleHRzLmxlbmd0aDtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0U2l6emxlKCBzZWxlY3RvciwgY29udGV4dHNbaV0sIHJlc3VsdHMgKTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gY29uZGVuc2UoIHVubWF0Y2hlZCwgbWFwLCBmaWx0ZXIsIGNvbnRleHQsIHhtbCApIHtcblx0dmFyIGVsZW0sXG5cdFx0bmV3VW5tYXRjaGVkID0gW10sXG5cdFx0aSA9IDAsXG5cdFx0bGVuID0gdW5tYXRjaGVkLmxlbmd0aCxcblx0XHRtYXBwZWQgPSBtYXAgIT0gbnVsbDtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoIChlbGVtID0gdW5tYXRjaGVkW2ldKSApIHtcblx0XHRcdGlmICggIWZpbHRlciB8fCBmaWx0ZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRuZXdVbm1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdFx0XHRpZiAoIG1hcHBlZCApIHtcblx0XHRcdFx0XHRtYXAucHVzaCggaSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG5ld1VubWF0Y2hlZDtcbn1cblxuZnVuY3Rpb24gc2V0TWF0Y2hlciggcHJlRmlsdGVyLCBzZWxlY3RvciwgbWF0Y2hlciwgcG9zdEZpbHRlciwgcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICkge1xuXHRpZiAoIHBvc3RGaWx0ZXIgJiYgIXBvc3RGaWx0ZXJbIGV4cGFuZG8gXSApIHtcblx0XHRwb3N0RmlsdGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbHRlciApO1xuXHR9XG5cdGlmICggcG9zdEZpbmRlciAmJiAhcG9zdEZpbmRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaW5kZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKTtcblx0fVxuXHRyZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCByZXN1bHRzLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0dmFyIHRlbXAsIGksIGVsZW0sXG5cdFx0XHRwcmVNYXAgPSBbXSxcblx0XHRcdHBvc3RNYXAgPSBbXSxcblx0XHRcdHByZWV4aXN0aW5nID0gcmVzdWx0cy5sZW5ndGgsXG5cblx0XHRcdC8vIEdldCBpbml0aWFsIGVsZW1lbnRzIGZyb20gc2VlZCBvciBjb250ZXh0XG5cdFx0XHRlbGVtcyA9IHNlZWQgfHwgbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IgfHwgXCIqXCIsIGNvbnRleHQubm9kZVR5cGUgPyBbIGNvbnRleHQgXSA6IGNvbnRleHQsIFtdICksXG5cblx0XHRcdC8vIFByZWZpbHRlciB0byBnZXQgbWF0Y2hlciBpbnB1dCwgcHJlc2VydmluZyBhIG1hcCBmb3Igc2VlZC1yZXN1bHRzIHN5bmNocm9uaXphdGlvblxuXHRcdFx0bWF0Y2hlckluID0gcHJlRmlsdGVyICYmICggc2VlZCB8fCAhc2VsZWN0b3IgKSA/XG5cdFx0XHRcdGNvbmRlbnNlKCBlbGVtcywgcHJlTWFwLCBwcmVGaWx0ZXIsIGNvbnRleHQsIHhtbCApIDpcblx0XHRcdFx0ZWxlbXMsXG5cblx0XHRcdG1hdGNoZXJPdXQgPSBtYXRjaGVyID9cblx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBhIHBvc3RGaW5kZXIsIG9yIGZpbHRlcmVkIHNlZWQsIG9yIG5vbi1zZWVkIHBvc3RGaWx0ZXIgb3IgcHJlZXhpc3RpbmcgcmVzdWx0cyxcblx0XHRcdFx0cG9zdEZpbmRlciB8fCAoIHNlZWQgPyBwcmVGaWx0ZXIgOiBwcmVleGlzdGluZyB8fCBwb3N0RmlsdGVyICkgP1xuXG5cdFx0XHRcdFx0Ly8gLi4uaW50ZXJtZWRpYXRlIHByb2Nlc3NpbmcgaXMgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0W10gOlxuXG5cdFx0XHRcdFx0Ly8gLi4ub3RoZXJ3aXNlIHVzZSByZXN1bHRzIGRpcmVjdGx5XG5cdFx0XHRcdFx0cmVzdWx0cyA6XG5cdFx0XHRcdG1hdGNoZXJJbjtcblxuXHRcdC8vIEZpbmQgcHJpbWFyeSBtYXRjaGVzXG5cdFx0aWYgKCBtYXRjaGVyICkge1xuXHRcdFx0bWF0Y2hlciggbWF0Y2hlckluLCBtYXRjaGVyT3V0LCBjb250ZXh0LCB4bWwgKTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBwb3N0RmlsdGVyXG5cdFx0aWYgKCBwb3N0RmlsdGVyICkge1xuXHRcdFx0dGVtcCA9IGNvbmRlbnNlKCBtYXRjaGVyT3V0LCBwb3N0TWFwICk7XG5cdFx0XHRwb3N0RmlsdGVyKCB0ZW1wLCBbXSwgY29udGV4dCwgeG1sICk7XG5cblx0XHRcdC8vIFVuLW1hdGNoIGZhaWxpbmcgZWxlbWVudHMgYnkgbW92aW5nIHRoZW0gYmFjayB0byBtYXRjaGVySW5cblx0XHRcdGkgPSB0ZW1wLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoIChlbGVtID0gdGVtcFtpXSkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlck91dFsgcG9zdE1hcFtpXSBdID0gIShtYXRjaGVySW5bIHBvc3RNYXBbaV0gXSA9IGVsZW0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyIHx8IHByZUZpbHRlciApIHtcblx0XHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXHRcdFx0XHRcdC8vIEdldCB0aGUgZmluYWwgbWF0Y2hlck91dCBieSBjb25kZW5zaW5nIHRoaXMgaW50ZXJtZWRpYXRlIGludG8gcG9zdEZpbmRlciBjb250ZXh0c1xuXHRcdFx0XHRcdHRlbXAgPSBbXTtcblx0XHRcdFx0XHRpID0gbWF0Y2hlck91dC5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRpZiAoIChlbGVtID0gbWF0Y2hlck91dFtpXSkgKSB7XG5cdFx0XHRcdFx0XHRcdC8vIFJlc3RvcmUgbWF0Y2hlckluIHNpbmNlIGVsZW0gaXMgbm90IHlldCBhIGZpbmFsIG1hdGNoXG5cdFx0XHRcdFx0XHRcdHRlbXAucHVzaCggKG1hdGNoZXJJbltpXSA9IGVsZW0pICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHBvc3RGaW5kZXIoIG51bGwsIChtYXRjaGVyT3V0ID0gW10pLCB0ZW1wLCB4bWwgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIE1vdmUgbWF0Y2hlZCBlbGVtZW50cyBmcm9tIHNlZWQgdG8gcmVzdWx0cyB0byBrZWVwIHRoZW0gc3luY2hyb25pemVkXG5cdFx0XHRcdGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDtcblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0aWYgKCAoZWxlbSA9IG1hdGNoZXJPdXRbaV0pICYmXG5cdFx0XHRcdFx0XHQodGVtcCA9IHBvc3RGaW5kZXIgPyBpbmRleE9mKCBzZWVkLCBlbGVtICkgOiBwcmVNYXBbaV0pID4gLTEgKSB7XG5cblx0XHRcdFx0XHRcdHNlZWRbdGVtcF0gPSAhKHJlc3VsdHNbdGVtcF0gPSBlbGVtKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEFkZCBlbGVtZW50cyB0byByZXN1bHRzLCB0aHJvdWdoIHBvc3RGaW5kZXIgaWYgZGVmaW5lZFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyT3V0ID0gY29uZGVuc2UoXG5cdFx0XHRcdG1hdGNoZXJPdXQgPT09IHJlc3VsdHMgP1xuXHRcdFx0XHRcdG1hdGNoZXJPdXQuc3BsaWNlKCBwcmVleGlzdGluZywgbWF0Y2hlck91dC5sZW5ndGggKSA6XG5cdFx0XHRcdFx0bWF0Y2hlck91dFxuXHRcdFx0KTtcblx0XHRcdGlmICggcG9zdEZpbmRlciApIHtcblx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgcmVzdWx0cywgbWF0Y2hlck91dCwgeG1sICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBtYXRjaGVyT3V0ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Ub2tlbnMoIHRva2VucyApIHtcblx0dmFyIGNoZWNrQ29udGV4dCwgbWF0Y2hlciwgaixcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxuXHRcdGxlYWRpbmdSZWxhdGl2ZSA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1swXS50eXBlIF0sXG5cdFx0aW1wbGljaXRSZWxhdGl2ZSA9IGxlYWRpbmdSZWxhdGl2ZSB8fCBFeHByLnJlbGF0aXZlW1wiIFwiXSxcblx0XHRpID0gbGVhZGluZ1JlbGF0aXZlID8gMSA6IDAsXG5cblx0XHQvLyBUaGUgZm91bmRhdGlvbmFsIG1hdGNoZXIgZW5zdXJlcyB0aGF0IGVsZW1lbnRzIGFyZSByZWFjaGFibGUgZnJvbSB0b3AtbGV2ZWwgY29udGV4dChzKVxuXHRcdG1hdGNoQ29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGNoZWNrQ29udGV4dDtcblx0XHR9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksXG5cdFx0bWF0Y2hBbnlDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gaW5kZXhPZiggY2hlY2tDb250ZXh0LCBlbGVtICkgPiAtMTtcblx0XHR9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksXG5cdFx0bWF0Y2hlcnMgPSBbIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgcmV0ID0gKCAhbGVhZGluZ1JlbGF0aXZlICYmICggeG1sIHx8IGNvbnRleHQgIT09IG91dGVybW9zdENvbnRleHQgKSApIHx8IChcblx0XHRcdFx0KGNoZWNrQ29udGV4dCA9IGNvbnRleHQpLm5vZGVUeXBlID9cblx0XHRcdFx0XHRtYXRjaENvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApIDpcblx0XHRcdFx0XHRtYXRjaEFueUNvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApICk7XG5cdFx0XHQvLyBBdm9pZCBoYW5naW5nIG9udG8gZWxlbWVudCAoaXNzdWUgIzI5OSlcblx0XHRcdGNoZWNrQ29udGV4dCA9IG51bGw7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH0gXTtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoIChtYXRjaGVyID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zW2ldLnR5cGUgXSkgKSB7XG5cdFx0XHRtYXRjaGVycyA9IFsgYWRkQ29tYmluYXRvcihlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSwgbWF0Y2hlcikgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWF0Y2hlciA9IEV4cHIuZmlsdGVyWyB0b2tlbnNbaV0udHlwZSBdLmFwcGx5KCBudWxsLCB0b2tlbnNbaV0ubWF0Y2hlcyApO1xuXG5cdFx0XHQvLyBSZXR1cm4gc3BlY2lhbCB1cG9uIHNlZWluZyBhIHBvc2l0aW9uYWwgbWF0Y2hlclxuXHRcdFx0aWYgKCBtYXRjaGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdC8vIEZpbmQgdGhlIG5leHQgcmVsYXRpdmUgb3BlcmF0b3IgKGlmIGFueSkgZm9yIHByb3BlciBoYW5kbGluZ1xuXHRcdFx0XHRqID0gKytpO1xuXHRcdFx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcblx0XHRcdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbIHRva2Vuc1tqXS50eXBlIF0gKSB7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHNldE1hdGNoZXIoXG5cdFx0XHRcdFx0aSA+IDEgJiYgZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksXG5cdFx0XHRcdFx0aSA+IDEgJiYgdG9TZWxlY3Rvcihcblx0XHRcdFx0XHRcdC8vIElmIHRoZSBwcmVjZWRpbmcgdG9rZW4gd2FzIGEgZGVzY2VuZGFudCBjb21iaW5hdG9yLCBpbnNlcnQgYW4gaW1wbGljaXQgYW55LWVsZW1lbnQgYCpgXG5cdFx0XHRcdFx0XHR0b2tlbnMuc2xpY2UoIDAsIGkgLSAxICkuY29uY2F0KHsgdmFsdWU6IHRva2Vuc1sgaSAtIDIgXS50eXBlID09PSBcIiBcIiA/IFwiKlwiIDogXCJcIiB9KVxuXHRcdFx0XHRcdCkucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApLFxuXHRcdFx0XHRcdG1hdGNoZXIsXG5cdFx0XHRcdFx0aSA8IGogJiYgbWF0Y2hlckZyb21Ub2tlbnMoIHRva2Vucy5zbGljZSggaSwgaiApICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiBtYXRjaGVyRnJvbVRva2VucyggKHRva2VucyA9IHRva2Vucy5zbGljZSggaiApKSApLFxuXHRcdFx0XHRcdGogPCBsZW4gJiYgdG9TZWxlY3RvciggdG9rZW5zIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdG1hdGNoZXJzLnB1c2goIG1hdGNoZXIgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApIHtcblx0dmFyIGJ5U2V0ID0gc2V0TWF0Y2hlcnMubGVuZ3RoID4gMCxcblx0XHRieUVsZW1lbnQgPSBlbGVtZW50TWF0Y2hlcnMubGVuZ3RoID4gMCxcblx0XHRzdXBlck1hdGNoZXIgPSBmdW5jdGlvbiggc2VlZCwgY29udGV4dCwgeG1sLCByZXN1bHRzLCBvdXRlcm1vc3QgKSB7XG5cdFx0XHR2YXIgZWxlbSwgaiwgbWF0Y2hlcixcblx0XHRcdFx0bWF0Y2hlZENvdW50ID0gMCxcblx0XHRcdFx0aSA9IFwiMFwiLFxuXHRcdFx0XHR1bm1hdGNoZWQgPSBzZWVkICYmIFtdLFxuXHRcdFx0XHRzZXRNYXRjaGVkID0gW10sXG5cdFx0XHRcdGNvbnRleHRCYWNrdXAgPSBvdXRlcm1vc3RDb250ZXh0LFxuXHRcdFx0XHQvLyBXZSBtdXN0IGFsd2F5cyBoYXZlIGVpdGhlciBzZWVkIGVsZW1lbnRzIG9yIG91dGVybW9zdCBjb250ZXh0XG5cdFx0XHRcdGVsZW1zID0gc2VlZCB8fCBieUVsZW1lbnQgJiYgRXhwci5maW5kW1wiVEFHXCJdKCBcIipcIiwgb3V0ZXJtb3N0ICksXG5cdFx0XHRcdC8vIFVzZSBpbnRlZ2VyIGRpcnJ1bnMgaWZmIHRoaXMgaXMgdGhlIG91dGVybW9zdCBtYXRjaGVyXG5cdFx0XHRcdGRpcnJ1bnNVbmlxdWUgPSAoZGlycnVucyArPSBjb250ZXh0QmFja3VwID09IG51bGwgPyAxIDogTWF0aC5yYW5kb20oKSB8fCAwLjEpLFxuXHRcdFx0XHRsZW4gPSBlbGVtcy5sZW5ndGg7XG5cblx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dCA9PT0gZG9jdW1lbnQgfHwgY29udGV4dCB8fCBvdXRlcm1vc3Q7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBlbGVtZW50cyBwYXNzaW5nIGVsZW1lbnRNYXRjaGVycyBkaXJlY3RseSB0byByZXN1bHRzXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTw5LCBTYWZhcmlcblx0XHRcdC8vIFRvbGVyYXRlIE5vZGVMaXN0IHByb3BlcnRpZXMgKElFOiBcImxlbmd0aFwiOyBTYWZhcmk6IDxudW1iZXI+KSBtYXRjaGluZyBlbGVtZW50cyBieSBpZFxuXHRcdFx0Zm9yICggOyBpICE9PSBsZW4gJiYgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGJ5RWxlbWVudCAmJiBlbGVtICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXHRcdFx0XHRcdGlmICggIWNvbnRleHQgJiYgZWxlbS5vd25lckRvY3VtZW50ICE9PSBkb2N1bWVudCApIHtcblx0XHRcdFx0XHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdFx0XHRcdFx0XHR4bWwgPSAhZG9jdW1lbnRJc0hUTUw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHdoaWxlICggKG1hdGNoZXIgPSBlbGVtZW50TWF0Y2hlcnNbaisrXSkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQgfHwgZG9jdW1lbnQsIHhtbCkgKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUcmFjayB1bm1hdGNoZWQgZWxlbWVudHMgZm9yIHNldCBmaWx0ZXJzXG5cdFx0XHRcdGlmICggYnlTZXQgKSB7XG5cdFx0XHRcdFx0Ly8gVGhleSB3aWxsIGhhdmUgZ29uZSB0aHJvdWdoIGFsbCBwb3NzaWJsZSBtYXRjaGVyc1xuXHRcdFx0XHRcdGlmICggKGVsZW0gPSAhbWF0Y2hlciAmJiBlbGVtKSApIHtcblx0XHRcdFx0XHRcdG1hdGNoZWRDb3VudC0tO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIExlbmd0aGVuIHRoZSBhcnJheSBmb3IgZXZlcnkgZWxlbWVudCwgbWF0Y2hlZCBvciBub3Rcblx0XHRcdFx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBgaWAgaXMgbm93IHRoZSBjb3VudCBvZiBlbGVtZW50cyB2aXNpdGVkIGFib3ZlLCBhbmQgYWRkaW5nIGl0IHRvIGBtYXRjaGVkQ291bnRgXG5cdFx0XHQvLyBtYWtlcyB0aGUgbGF0dGVyIG5vbm5lZ2F0aXZlLlxuXHRcdFx0bWF0Y2hlZENvdW50ICs9IGk7XG5cblx0XHRcdC8vIEFwcGx5IHNldCBmaWx0ZXJzIHRvIHVubWF0Y2hlZCBlbGVtZW50c1xuXHRcdFx0Ly8gTk9URTogVGhpcyBjYW4gYmUgc2tpcHBlZCBpZiB0aGVyZSBhcmUgbm8gdW5tYXRjaGVkIGVsZW1lbnRzIChpLmUuLCBgbWF0Y2hlZENvdW50YFxuXHRcdFx0Ly8gZXF1YWxzIGBpYCksIHVubGVzcyB3ZSBkaWRuJ3QgdmlzaXQgX2FueV8gZWxlbWVudHMgaW4gdGhlIGFib3ZlIGxvb3AgYmVjYXVzZSB3ZSBoYXZlXG5cdFx0XHQvLyBubyBlbGVtZW50IG1hdGNoZXJzIGFuZCBubyBzZWVkLlxuXHRcdFx0Ly8gSW5jcmVtZW50aW5nIGFuIGluaXRpYWxseS1zdHJpbmcgXCIwXCIgYGlgIGFsbG93cyBgaWAgdG8gcmVtYWluIGEgc3RyaW5nIG9ubHkgaW4gdGhhdFxuXHRcdFx0Ly8gY2FzZSwgd2hpY2ggd2lsbCByZXN1bHQgaW4gYSBcIjAwXCIgYG1hdGNoZWRDb3VudGAgdGhhdCBkaWZmZXJzIGZyb20gYGlgIGJ1dCBpcyBhbHNvXG5cdFx0XHQvLyBudW1lcmljYWxseSB6ZXJvLlxuXHRcdFx0aWYgKCBieVNldCAmJiBpICE9PSBtYXRjaGVkQ291bnQgKSB7XG5cdFx0XHRcdGogPSAwO1xuXHRcdFx0XHR3aGlsZSAoIChtYXRjaGVyID0gc2V0TWF0Y2hlcnNbaisrXSkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlciggdW5tYXRjaGVkLCBzZXRNYXRjaGVkLCBjb250ZXh0LCB4bWwgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggc2VlZCApIHtcblx0XHRcdFx0XHQvLyBSZWludGVncmF0ZSBlbGVtZW50IG1hdGNoZXMgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZvciBzb3J0aW5nXG5cdFx0XHRcdFx0aWYgKCBtYXRjaGVkQ291bnQgPiAwICkge1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggISh1bm1hdGNoZWRbaV0gfHwgc2V0TWF0Y2hlZFtpXSkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0c2V0TWF0Y2hlZFtpXSA9IHBvcC5jYWxsKCByZXN1bHRzICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBEaXNjYXJkIGluZGV4IHBsYWNlaG9sZGVyIHZhbHVlcyB0byBnZXQgb25seSBhY3R1YWwgbWF0Y2hlc1xuXHRcdFx0XHRcdHNldE1hdGNoZWQgPSBjb25kZW5zZSggc2V0TWF0Y2hlZCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQWRkIG1hdGNoZXMgdG8gcmVzdWx0c1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBzZXRNYXRjaGVkICk7XG5cblx0XHRcdFx0Ly8gU2VlZGxlc3Mgc2V0IG1hdGNoZXMgc3VjY2VlZGluZyBtdWx0aXBsZSBzdWNjZXNzZnVsIG1hdGNoZXJzIHN0aXB1bGF0ZSBzb3J0aW5nXG5cdFx0XHRcdGlmICggb3V0ZXJtb3N0ICYmICFzZWVkICYmIHNldE1hdGNoZWQubGVuZ3RoID4gMCAmJlxuXHRcdFx0XHRcdCggbWF0Y2hlZENvdW50ICsgc2V0TWF0Y2hlcnMubGVuZ3RoICkgPiAxICkge1xuXG5cdFx0XHRcdFx0U2l6emxlLnVuaXF1ZVNvcnQoIHJlc3VsdHMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdmVycmlkZSBtYW5pcHVsYXRpb24gb2YgZ2xvYmFscyBieSBuZXN0ZWQgbWF0Y2hlcnNcblx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcblx0XHRcdFx0b3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHRCYWNrdXA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB1bm1hdGNoZWQ7XG5cdFx0fTtcblxuXHRyZXR1cm4gYnlTZXQgP1xuXHRcdG1hcmtGdW5jdGlvbiggc3VwZXJNYXRjaGVyICkgOlxuXHRcdHN1cGVyTWF0Y2hlcjtcbn1cblxuY29tcGlsZSA9IFNpenpsZS5jb21waWxlID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBtYXRjaCAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHtcblx0dmFyIGksXG5cdFx0c2V0TWF0Y2hlcnMgPSBbXSxcblx0XHRlbGVtZW50TWF0Y2hlcnMgPSBbXSxcblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCAhY2FjaGVkICkge1xuXHRcdC8vIEdlbmVyYXRlIGEgZnVuY3Rpb24gb2YgcmVjdXJzaXZlIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNoZWNrIGVhY2ggZWxlbWVudFxuXHRcdGlmICggIW1hdGNoICkge1xuXHRcdFx0bWF0Y2ggPSB0b2tlbml6ZSggc2VsZWN0b3IgKTtcblx0XHR9XG5cdFx0aSA9IG1hdGNoLmxlbmd0aDtcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdGNhY2hlZCA9IG1hdGNoZXJGcm9tVG9rZW5zKCBtYXRjaFtpXSApO1xuXHRcdFx0aWYgKCBjYWNoZWRbIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0c2V0TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtZW50TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FjaGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uXG5cdFx0Y2FjaGVkID0gY29tcGlsZXJDYWNoZSggc2VsZWN0b3IsIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApICk7XG5cblx0XHQvLyBTYXZlIHNlbGVjdG9yIGFuZCB0b2tlbml6YXRpb25cblx0XHRjYWNoZWQuc2VsZWN0b3IgPSBzZWxlY3Rvcjtcblx0fVxuXHRyZXR1cm4gY2FjaGVkO1xufTtcblxuLyoqXG4gKiBBIGxvdy1sZXZlbCBzZWxlY3Rpb24gZnVuY3Rpb24gdGhhdCB3b3JrcyB3aXRoIFNpenpsZSdzIGNvbXBpbGVkXG4gKiAgc2VsZWN0b3IgZnVuY3Rpb25zXG4gKiBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gc2VsZWN0b3IgQSBzZWxlY3RvciBvciBhIHByZS1jb21waWxlZFxuICogIHNlbGVjdG9yIGZ1bmN0aW9uIGJ1aWx0IHdpdGggU2l6emxlLmNvbXBpbGVcbiAqIEBwYXJhbSB7RWxlbWVudH0gY29udGV4dFxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdHNdXG4gKiBAcGFyYW0ge0FycmF5fSBbc2VlZF0gQSBzZXQgb2YgZWxlbWVudHMgdG8gbWF0Y2ggYWdhaW5zdFxuICovXG5zZWxlY3QgPSBTaXp6bGUuc2VsZWN0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkge1xuXHR2YXIgaSwgdG9rZW5zLCB0b2tlbiwgdHlwZSwgZmluZCxcblx0XHRjb21waWxlZCA9IHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiICYmIHNlbGVjdG9yLFxuXHRcdG1hdGNoID0gIXNlZWQgJiYgdG9rZW5pemUoIChzZWxlY3RvciA9IGNvbXBpbGVkLnNlbGVjdG9yIHx8IHNlbGVjdG9yKSApO1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFRyeSB0byBtaW5pbWl6ZSBvcGVyYXRpb25zIGlmIHRoZXJlIGlzIG9ubHkgb25lIHNlbGVjdG9yIGluIHRoZSBsaXN0IGFuZCBubyBzZWVkXG5cdC8vICh0aGUgbGF0dGVyIG9mIHdoaWNoIGd1YXJhbnRlZXMgdXMgY29udGV4dClcblx0aWYgKCBtYXRjaC5sZW5ndGggPT09IDEgKSB7XG5cblx0XHQvLyBSZWR1Y2UgY29udGV4dCBpZiB0aGUgbGVhZGluZyBjb21wb3VuZCBzZWxlY3RvciBpcyBhbiBJRFxuXHRcdHRva2VucyA9IG1hdGNoWzBdID0gbWF0Y2hbMF0uc2xpY2UoIDAgKTtcblx0XHRpZiAoIHRva2Vucy5sZW5ndGggPiAyICYmICh0b2tlbiA9IHRva2Vuc1swXSkudHlwZSA9PT0gXCJJRFwiICYmXG5cdFx0XHRcdGNvbnRleHQubm9kZVR5cGUgPT09IDkgJiYgZG9jdW1lbnRJc0hUTUwgJiYgRXhwci5yZWxhdGl2ZVsgdG9rZW5zWzFdLnR5cGUgXSApIHtcblxuXHRcdFx0Y29udGV4dCA9ICggRXhwci5maW5kW1wiSURcIl0oIHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZShydW5lc2NhcGUsIGZ1bmVzY2FwZSksIGNvbnRleHQgKSB8fCBbXSApWzBdO1xuXHRcdFx0aWYgKCAhY29udGV4dCApIHtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cblx0XHRcdC8vIFByZWNvbXBpbGVkIG1hdGNoZXJzIHdpbGwgc3RpbGwgdmVyaWZ5IGFuY2VzdHJ5LCBzbyBzdGVwIHVwIGEgbGV2ZWxcblx0XHRcdH0gZWxzZSBpZiAoIGNvbXBpbGVkICkge1xuXHRcdFx0XHRjb250ZXh0ID0gY29udGV4dC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxlY3RvciA9IHNlbGVjdG9yLnNsaWNlKCB0b2tlbnMuc2hpZnQoKS52YWx1ZS5sZW5ndGggKTtcblx0XHR9XG5cblx0XHQvLyBGZXRjaCBhIHNlZWQgc2V0IGZvciByaWdodC10by1sZWZ0IG1hdGNoaW5nXG5cdFx0aSA9IG1hdGNoRXhwcltcIm5lZWRzQ29udGV4dFwiXS50ZXN0KCBzZWxlY3RvciApID8gMCA6IHRva2Vucy5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0b2tlbiA9IHRva2Vuc1tpXTtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgd2UgaGl0IGEgY29tYmluYXRvclxuXHRcdFx0aWYgKCBFeHByLnJlbGF0aXZlWyAodHlwZSA9IHRva2VuLnR5cGUpIF0gKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAoZmluZCA9IEV4cHIuZmluZFsgdHlwZSBdKSApIHtcblx0XHRcdFx0Ly8gU2VhcmNoLCBleHBhbmRpbmcgY29udGV4dCBmb3IgbGVhZGluZyBzaWJsaW5nIGNvbWJpbmF0b3JzXG5cdFx0XHRcdGlmICggKHNlZWQgPSBmaW5kKFxuXHRcdFx0XHRcdHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSxcblx0XHRcdFx0XHRyc2libGluZy50ZXN0KCB0b2tlbnNbMF0udHlwZSApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0XG5cdFx0XHRcdCkpICkge1xuXG5cdFx0XHRcdFx0Ly8gSWYgc2VlZCBpcyBlbXB0eSBvciBubyB0b2tlbnMgcmVtYWluLCB3ZSBjYW4gcmV0dXJuIGVhcmx5XG5cdFx0XHRcdFx0dG9rZW5zLnNwbGljZSggaSwgMSApO1xuXHRcdFx0XHRcdHNlbGVjdG9yID0gc2VlZC5sZW5ndGggJiYgdG9TZWxlY3RvciggdG9rZW5zICk7XG5cdFx0XHRcdFx0aWYgKCAhc2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBzZWVkICk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIENvbXBpbGUgYW5kIGV4ZWN1dGUgYSBmaWx0ZXJpbmcgZnVuY3Rpb24gaWYgb25lIGlzIG5vdCBwcm92aWRlZFxuXHQvLyBQcm92aWRlIGBtYXRjaGAgdG8gYXZvaWQgcmV0b2tlbml6YXRpb24gaWYgd2UgbW9kaWZpZWQgdGhlIHNlbGVjdG9yIGFib3ZlXG5cdCggY29tcGlsZWQgfHwgY29tcGlsZSggc2VsZWN0b3IsIG1hdGNoICkgKShcblx0XHRzZWVkLFxuXHRcdGNvbnRleHQsXG5cdFx0IWRvY3VtZW50SXNIVE1MLFxuXHRcdHJlc3VsdHMsXG5cdFx0IWNvbnRleHQgfHwgcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHwgY29udGV4dFxuXHQpO1xuXHRyZXR1cm4gcmVzdWx0cztcbn07XG5cbi8vIE9uZS10aW1lIGFzc2lnbm1lbnRzXG5cbi8vIFNvcnQgc3RhYmlsaXR5XG5zdXBwb3J0LnNvcnRTdGFibGUgPSBleHBhbmRvLnNwbGl0KFwiXCIpLnNvcnQoIHNvcnRPcmRlciApLmpvaW4oXCJcIikgPT09IGV4cGFuZG87XG5cbi8vIFN1cHBvcnQ6IENocm9tZSAxNC0zNStcbi8vIEFsd2F5cyBhc3N1bWUgZHVwbGljYXRlcyBpZiB0aGV5IGFyZW4ndCBwYXNzZWQgdG8gdGhlIGNvbXBhcmlzb24gZnVuY3Rpb25cbnN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlcyA9ICEhaGFzRHVwbGljYXRlO1xuXG4vLyBJbml0aWFsaXplIGFnYWluc3QgdGhlIGRlZmF1bHQgZG9jdW1lbnRcbnNldERvY3VtZW50KCk7XG5cbi8vIFN1cHBvcnQ6IFdlYmtpdDw1MzcuMzIgLSBTYWZhcmkgNi4wLjMvQ2hyb21lIDI1IChmaXhlZCBpbiBDaHJvbWUgMjcpXG4vLyBEZXRhY2hlZCBub2RlcyBjb25mb3VuZGluZ2x5IGZvbGxvdyAqZWFjaCBvdGhlcipcbnN1cHBvcnQuc29ydERldGFjaGVkID0gYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0Ly8gU2hvdWxkIHJldHVybiAxLCBidXQgcmV0dXJucyA0IChmb2xsb3dpbmcpXG5cdHJldHVybiBlbC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZpZWxkc2V0XCIpICkgJiAxO1xufSk7XG5cbi8vIFN1cHBvcnQ6IElFPDhcbi8vIFByZXZlbnQgYXR0cmlidXRlL3Byb3BlcnR5IFwiaW50ZXJwb2xhdGlvblwiXG4vLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNTM2NDI5JTI4VlMuODUlMjkuYXNweFxuaWYgKCAhYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0ZWwuaW5uZXJIVE1MID0gXCI8YSBocmVmPScjJz48L2E+XCI7XG5cdHJldHVybiBlbC5maXJzdENoaWxkLmdldEF0dHJpYnV0ZShcImhyZWZcIikgPT09IFwiI1wiIDtcbn0pICkge1xuXHRhZGRIYW5kbGUoIFwidHlwZXxocmVmfGhlaWdodHx3aWR0aFwiLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0aWYgKCAhaXNYTUwgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0eXBlXCIgPyAxIDogMiApO1xuXHRcdH1cblx0fSk7XG59XG5cbi8vIFN1cHBvcnQ6IElFPDlcbi8vIFVzZSBkZWZhdWx0VmFsdWUgaW4gcGxhY2Ugb2YgZ2V0QXR0cmlidXRlKFwidmFsdWVcIilcbmlmICggIXN1cHBvcnQuYXR0cmlidXRlcyB8fCAhYXNzZXJ0KGZ1bmN0aW9uKCBlbCApIHtcblx0ZWwuaW5uZXJIVE1MID0gXCI8aW5wdXQvPlwiO1xuXHRlbC5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiLCBcIlwiICk7XG5cdHJldHVybiBlbC5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiICkgPT09IFwiXCI7XG59KSApIHtcblx0YWRkSGFuZGxlKCBcInZhbHVlXCIsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiaW5wdXRcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLmRlZmF1bHRWYWx1ZTtcblx0XHR9XG5cdH0pO1xufVxuXG4vLyBTdXBwb3J0OiBJRTw5XG4vLyBVc2UgZ2V0QXR0cmlidXRlTm9kZSB0byBmZXRjaCBib29sZWFucyB3aGVuIGdldEF0dHJpYnV0ZSBsaWVzXG5pZiAoICFhc3NlcnQoZnVuY3Rpb24oIGVsICkge1xuXHRyZXR1cm4gZWwuZ2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIikgPT0gbnVsbDtcbn0pICkge1xuXHRhZGRIYW5kbGUoIGJvb2xlYW5zLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0dmFyIHZhbDtcblx0XHRpZiAoICFpc1hNTCApIHtcblx0XHRcdHJldHVybiBlbGVtWyBuYW1lIF0gPT09IHRydWUgPyBuYW1lLnRvTG93ZXJDYXNlKCkgOlxuXHRcdFx0XHRcdCh2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKSkgJiYgdmFsLnNwZWNpZmllZCA/XG5cdFx0XHRcdFx0dmFsLnZhbHVlIDpcblx0XHRcdFx0bnVsbDtcblx0XHR9XG5cdH0pO1xufVxuXG5yZXR1cm4gU2l6emxlO1xuXG59KSggd2luZG93ICk7XG5cblxuXG5qUXVlcnkuZmluZCA9IFNpenpsZTtcbmpRdWVyeS5leHByID0gU2l6emxlLnNlbGVjdG9ycztcblxuLy8gRGVwcmVjYXRlZFxualF1ZXJ5LmV4cHJbIFwiOlwiIF0gPSBqUXVlcnkuZXhwci5wc2V1ZG9zO1xualF1ZXJ5LnVuaXF1ZVNvcnQgPSBqUXVlcnkudW5pcXVlID0gU2l6emxlLnVuaXF1ZVNvcnQ7XG5qUXVlcnkudGV4dCA9IFNpenpsZS5nZXRUZXh0O1xualF1ZXJ5LmlzWE1MRG9jID0gU2l6emxlLmlzWE1MO1xualF1ZXJ5LmNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5zO1xualF1ZXJ5LmVzY2FwZVNlbGVjdG9yID0gU2l6emxlLmVzY2FwZTtcblxuXG5cblxudmFyIGRpciA9IGZ1bmN0aW9uKCBlbGVtLCBkaXIsIHVudGlsICkge1xuXHR2YXIgbWF0Y2hlZCA9IFtdLFxuXHRcdHRydW5jYXRlID0gdW50aWwgIT09IHVuZGVmaW5lZDtcblxuXHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgJiYgZWxlbS5ub2RlVHlwZSAhPT0gOSApIHtcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRpZiAoIHRydW5jYXRlICYmIGpRdWVyeSggZWxlbSApLmlzKCB1bnRpbCApICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdG1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbWF0Y2hlZDtcbn07XG5cblxudmFyIHNpYmxpbmdzID0gZnVuY3Rpb24oIG4sIGVsZW0gKSB7XG5cdHZhciBtYXRjaGVkID0gW107XG5cblx0Zm9yICggOyBuOyBuID0gbi5uZXh0U2libGluZyApIHtcblx0XHRpZiAoIG4ubm9kZVR5cGUgPT09IDEgJiYgbiAhPT0gZWxlbSApIHtcblx0XHRcdG1hdGNoZWQucHVzaCggbiApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBtYXRjaGVkO1xufTtcblxuXG52YXIgcm5lZWRzQ29udGV4dCA9IGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dDtcblxuXG5cbmZ1bmN0aW9uIG5vZGVOYW1lKCBlbGVtLCBuYW1lICkge1xuXG4gIHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG59O1xudmFyIHJzaW5nbGVUYWcgPSAoIC9ePChbYS16XVteXFwvXFwwPjpcXHgyMFxcdFxcclxcblxcZl0qKVtcXHgyMFxcdFxcclxcblxcZl0qXFwvPz4oPzo8XFwvXFwxPnwpJC9pICk7XG5cblxuXG4vLyBJbXBsZW1lbnQgdGhlIGlkZW50aWNhbCBmdW5jdGlvbmFsaXR5IGZvciBmaWx0ZXIgYW5kIG5vdFxuZnVuY3Rpb24gd2lubm93KCBlbGVtZW50cywgcXVhbGlmaWVyLCBub3QgKSB7XG5cdGlmICggaXNGdW5jdGlvbiggcXVhbGlmaWVyICkgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gISFxdWFsaWZpZXIuY2FsbCggZWxlbSwgaSwgZWxlbSApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gU2luZ2xlIGVsZW1lbnRcblx0aWYgKCBxdWFsaWZpZXIubm9kZVR5cGUgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCBlbGVtID09PSBxdWFsaWZpZXIgKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEFycmF5bGlrZSBvZiBlbGVtZW50cyAoalF1ZXJ5LCBhcmd1bWVudHMsIEFycmF5KVxuXHRpZiAoIHR5cGVvZiBxdWFsaWZpZXIgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCBpbmRleE9mLmNhbGwoIHF1YWxpZmllciwgZWxlbSApID4gLTEgKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEZpbHRlcmVkIGRpcmVjdGx5IGZvciBib3RoIHNpbXBsZSBhbmQgY29tcGxleCBzZWxlY3RvcnNcblx0cmV0dXJuIGpRdWVyeS5maWx0ZXIoIHF1YWxpZmllciwgZWxlbWVudHMsIG5vdCApO1xufVxuXG5qUXVlcnkuZmlsdGVyID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1zLCBub3QgKSB7XG5cdHZhciBlbGVtID0gZWxlbXNbIDAgXTtcblxuXHRpZiAoIG5vdCApIHtcblx0XHRleHByID0gXCI6bm90KFwiICsgZXhwciArIFwiKVwiO1xuXHR9XG5cblx0aWYgKCBlbGVtcy5sZW5ndGggPT09IDEgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBlbGVtLCBleHByICkgPyBbIGVsZW0gXSA6IFtdO1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeS5maW5kLm1hdGNoZXMoIGV4cHIsIGpRdWVyeS5ncmVwKCBlbGVtcywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDE7XG5cdH0gKSApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRmaW5kOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGksIHJldCxcblx0XHRcdGxlbiA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0c2VsZiA9IHRoaXM7XG5cblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5KCBzZWxlY3RvciApLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdFx0aWYgKCBqUXVlcnkuY29udGFpbnMoIHNlbGZbIGkgXSwgdGhpcyApICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9ICkgKTtcblx0XHR9XG5cblx0XHRyZXQgPSB0aGlzLnB1c2hTdGFjayggW10gKTtcblxuXHRcdGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRqUXVlcnkuZmluZCggc2VsZWN0b3IsIHNlbGZbIGkgXSwgcmV0ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGxlbiA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggcmV0ICkgOiByZXQ7XG5cdH0sXG5cdGZpbHRlcjogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgZmFsc2UgKSApO1xuXHR9LFxuXHRub3Q6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIHRydWUgKSApO1xuXHR9LFxuXHRpczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiAhIXdpbm5vdyhcblx0XHRcdHRoaXMsXG5cblx0XHRcdC8vIElmIHRoaXMgaXMgYSBwb3NpdGlvbmFsL3JlbGF0aXZlIHNlbGVjdG9yLCBjaGVjayBtZW1iZXJzaGlwIGluIHRoZSByZXR1cm5lZCBzZXRcblx0XHRcdC8vIHNvICQoXCJwOmZpcnN0XCIpLmlzKFwicDpsYXN0XCIpIHdvbid0IHJldHVybiB0cnVlIGZvciBhIGRvYyB3aXRoIHR3byBcInBcIi5cblx0XHRcdHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiAmJiBybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICkgP1xuXHRcdFx0XHRqUXVlcnkoIHNlbGVjdG9yICkgOlxuXHRcdFx0XHRzZWxlY3RvciB8fCBbXSxcblx0XHRcdGZhbHNlXG5cdFx0KS5sZW5ndGg7XG5cdH1cbn0gKTtcblxuXG4vLyBJbml0aWFsaXplIGEgalF1ZXJ5IG9iamVjdFxuXG5cbi8vIEEgY2VudHJhbCByZWZlcmVuY2UgdG8gdGhlIHJvb3QgalF1ZXJ5KGRvY3VtZW50KVxudmFyIHJvb3RqUXVlcnksXG5cblx0Ly8gQSBzaW1wbGUgd2F5IHRvIGNoZWNrIGZvciBIVE1MIHN0cmluZ3Ncblx0Ly8gUHJpb3JpdGl6ZSAjaWQgb3ZlciA8dGFnPiB0byBhdm9pZCBYU1MgdmlhIGxvY2F0aW9uLmhhc2ggKCM5NTIxKVxuXHQvLyBTdHJpY3QgSFRNTCByZWNvZ25pdGlvbiAoIzExMjkwOiBtdXN0IHN0YXJ0IHdpdGggPClcblx0Ly8gU2hvcnRjdXQgc2ltcGxlICNpZCBjYXNlIGZvciBzcGVlZFxuXHRycXVpY2tFeHByID0gL14oPzpcXHMqKDxbXFx3XFxXXSs+KVtePl0qfCMoW1xcdy1dKykpJC8sXG5cblx0aW5pdCA9IGpRdWVyeS5mbi5pbml0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByb290ICkge1xuXHRcdHZhciBtYXRjaCwgZWxlbTtcblxuXHRcdC8vIEhBTkRMRTogJChcIlwiKSwgJChudWxsKSwgJCh1bmRlZmluZWQpLCAkKGZhbHNlKVxuXHRcdGlmICggIXNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Ly8gTWV0aG9kIGluaXQoKSBhY2NlcHRzIGFuIGFsdGVybmF0ZSByb290alF1ZXJ5XG5cdFx0Ly8gc28gbWlncmF0ZSBjYW4gc3VwcG9ydCBqUXVlcnkuc3ViIChnaC0yMTAxKVxuXHRcdHJvb3QgPSByb290IHx8IHJvb3RqUXVlcnk7XG5cblx0XHQvLyBIYW5kbGUgSFRNTCBzdHJpbmdzXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRpZiAoIHNlbGVjdG9yWyAwIF0gPT09IFwiPFwiICYmXG5cdFx0XHRcdHNlbGVjdG9yWyBzZWxlY3Rvci5sZW5ndGggLSAxIF0gPT09IFwiPlwiICYmXG5cdFx0XHRcdHNlbGVjdG9yLmxlbmd0aCA+PSAzICkge1xuXG5cdFx0XHRcdC8vIEFzc3VtZSB0aGF0IHN0cmluZ3MgdGhhdCBzdGFydCBhbmQgZW5kIHdpdGggPD4gYXJlIEhUTUwgYW5kIHNraXAgdGhlIHJlZ2V4IGNoZWNrXG5cdFx0XHRcdG1hdGNoID0gWyBudWxsLCBzZWxlY3RvciwgbnVsbCBdO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWF0Y2ggaHRtbCBvciBtYWtlIHN1cmUgbm8gY29udGV4dCBpcyBzcGVjaWZpZWQgZm9yICNpZFxuXHRcdFx0aWYgKCBtYXRjaCAmJiAoIG1hdGNoWyAxIF0gfHwgIWNvbnRleHQgKSApIHtcblxuXHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCkgLT4gJChhcnJheSlcblx0XHRcdFx0aWYgKCBtYXRjaFsgMSBdICkge1xuXHRcdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ID8gY29udGV4dFsgMCBdIDogY29udGV4dDtcblxuXHRcdFx0XHRcdC8vIE9wdGlvbiB0byBydW4gc2NyaXB0cyBpcyB0cnVlIGZvciBiYWNrLWNvbXBhdFxuXHRcdFx0XHRcdC8vIEludGVudGlvbmFsbHkgbGV0IHRoZSBlcnJvciBiZSB0aHJvd24gaWYgcGFyc2VIVE1MIGlzIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLCBqUXVlcnkucGFyc2VIVE1MKFxuXHRcdFx0XHRcdFx0bWF0Y2hbIDEgXSxcblx0XHRcdFx0XHRcdGNvbnRleHQgJiYgY29udGV4dC5ub2RlVHlwZSA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogZG9jdW1lbnQsXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KSApO1xuXG5cdFx0XHRcdFx0Ly8gSEFORExFOiAkKGh0bWwsIHByb3BzKVxuXHRcdFx0XHRcdGlmICggcnNpbmdsZVRhZy50ZXN0KCBtYXRjaFsgMSBdICkgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvbnRleHQgKSApIHtcblx0XHRcdFx0XHRcdGZvciAoIG1hdGNoIGluIGNvbnRleHQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gUHJvcGVydGllcyBvZiBjb250ZXh0IGFyZSBjYWxsZWQgYXMgbWV0aG9kcyBpZiBwb3NzaWJsZVxuXHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHRoaXNbIG1hdGNoIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzWyBtYXRjaCBdKCBjb250ZXh0WyBtYXRjaCBdICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gLi4uYW5kIG90aGVyd2lzZSBzZXQgYXMgYXR0cmlidXRlc1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYXR0ciggbWF0Y2gsIGNvbnRleHRbIG1hdGNoIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJCgjaWQpXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBtYXRjaFsgMiBdICk7XG5cblx0XHRcdFx0XHRpZiAoIGVsZW0gKSB7XG5cblx0XHRcdFx0XHRcdC8vIEluamVjdCB0aGUgZWxlbWVudCBkaXJlY3RseSBpbnRvIHRoZSBqUXVlcnkgb2JqZWN0XG5cdFx0XHRcdFx0XHR0aGlzWyAwIF0gPSBlbGVtO1xuXHRcdFx0XHRcdFx0dGhpcy5sZW5ndGggPSAxO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBIQU5ETEU6ICQoZXhwciwgJCguLi4pKVxuXHRcdFx0fSBlbHNlIGlmICggIWNvbnRleHQgfHwgY29udGV4dC5qcXVlcnkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGNvbnRleHQgfHwgcm9vdCApLmZpbmQoIHNlbGVjdG9yICk7XG5cblx0XHRcdC8vIEhBTkRMRTogJChleHByLCBjb250ZXh0KVxuXHRcdFx0Ly8gKHdoaWNoIGlzIGp1c3QgZXF1aXZhbGVudCB0bzogJChjb250ZXh0KS5maW5kKGV4cHIpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3RvciggY29udGV4dCApLmZpbmQoIHNlbGVjdG9yICk7XG5cdFx0XHR9XG5cblx0XHQvLyBIQU5ETEU6ICQoRE9NRWxlbWVudClcblx0XHR9IGVsc2UgaWYgKCBzZWxlY3Rvci5ub2RlVHlwZSApIHtcblx0XHRcdHRoaXNbIDAgXSA9IHNlbGVjdG9yO1xuXHRcdFx0dGhpcy5sZW5ndGggPSAxO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHQvLyBIQU5ETEU6ICQoZnVuY3Rpb24pXG5cdFx0Ly8gU2hvcnRjdXQgZm9yIGRvY3VtZW50IHJlYWR5XG5cdFx0fSBlbHNlIGlmICggaXNGdW5jdGlvbiggc2VsZWN0b3IgKSApIHtcblx0XHRcdHJldHVybiByb290LnJlYWR5ICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRyb290LnJlYWR5KCBzZWxlY3RvciApIDpcblxuXHRcdFx0XHQvLyBFeGVjdXRlIGltbWVkaWF0ZWx5IGlmIHJlYWR5IGlzIG5vdCBwcmVzZW50XG5cdFx0XHRcdHNlbGVjdG9yKCBqUXVlcnkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4galF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IsIHRoaXMgKTtcblx0fTtcblxuLy8gR2l2ZSB0aGUgaW5pdCBmdW5jdGlvbiB0aGUgalF1ZXJ5IHByb3RvdHlwZSBmb3IgbGF0ZXIgaW5zdGFudGlhdGlvblxuaW5pdC5wcm90b3R5cGUgPSBqUXVlcnkuZm47XG5cbi8vIEluaXRpYWxpemUgY2VudHJhbCByZWZlcmVuY2VcbnJvb3RqUXVlcnkgPSBqUXVlcnkoIGRvY3VtZW50ICk7XG5cblxudmFyIHJwYXJlbnRzcHJldiA9IC9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLFxuXG5cdC8vIE1ldGhvZHMgZ3VhcmFudGVlZCB0byBwcm9kdWNlIGEgdW5pcXVlIHNldCB3aGVuIHN0YXJ0aW5nIGZyb20gYSB1bmlxdWUgc2V0XG5cdGd1YXJhbnRlZWRVbmlxdWUgPSB7XG5cdFx0Y2hpbGRyZW46IHRydWUsXG5cdFx0Y29udGVudHM6IHRydWUsXG5cdFx0bmV4dDogdHJ1ZSxcblx0XHRwcmV2OiB0cnVlXG5cdH07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0aGFzOiBmdW5jdGlvbiggdGFyZ2V0ICkge1xuXHRcdHZhciB0YXJnZXRzID0galF1ZXJ5KCB0YXJnZXQsIHRoaXMgKSxcblx0XHRcdGwgPSB0YXJnZXRzLmxlbmd0aDtcblxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCB0aGlzLCB0YXJnZXRzWyBpIF0gKSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRjbG9zZXN0OiBmdW5jdGlvbiggc2VsZWN0b3JzLCBjb250ZXh0ICkge1xuXHRcdHZhciBjdXIsXG5cdFx0XHRpID0gMCxcblx0XHRcdGwgPSB0aGlzLmxlbmd0aCxcblx0XHRcdG1hdGNoZWQgPSBbXSxcblx0XHRcdHRhcmdldHMgPSB0eXBlb2Ygc2VsZWN0b3JzICE9PSBcInN0cmluZ1wiICYmIGpRdWVyeSggc2VsZWN0b3JzICk7XG5cblx0XHQvLyBQb3NpdGlvbmFsIHNlbGVjdG9ycyBuZXZlciBtYXRjaCwgc2luY2UgdGhlcmUncyBubyBfc2VsZWN0aW9uXyBjb250ZXh0XG5cdFx0aWYgKCAhcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvcnMgKSApIHtcblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0Zm9yICggY3VyID0gdGhpc1sgaSBdOyBjdXIgJiYgY3VyICE9PSBjb250ZXh0OyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblxuXHRcdFx0XHRcdC8vIEFsd2F5cyBza2lwIGRvY3VtZW50IGZyYWdtZW50c1xuXHRcdFx0XHRcdGlmICggY3VyLm5vZGVUeXBlIDwgMTEgJiYgKCB0YXJnZXRzID9cblx0XHRcdFx0XHRcdHRhcmdldHMuaW5kZXgoIGN1ciApID4gLTEgOlxuXG5cdFx0XHRcdFx0XHQvLyBEb24ndCBwYXNzIG5vbi1lbGVtZW50cyB0byBTaXp6bGVcblx0XHRcdFx0XHRcdGN1ci5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHRcdFx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGN1ciwgc2VsZWN0b3JzICkgKSApIHtcblxuXHRcdFx0XHRcdFx0bWF0Y2hlZC5wdXNoKCBjdXIgKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZC5sZW5ndGggPiAxID8galF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKSA6IG1hdGNoZWQgKTtcblx0fSxcblxuXHQvLyBEZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIGFuIGVsZW1lbnQgd2l0aGluIHRoZSBzZXRcblx0aW5kZXg6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gTm8gYXJndW1lbnQsIHJldHVybiBpbmRleCBpbiBwYXJlbnRcblx0XHRpZiAoICFlbGVtICkge1xuXHRcdFx0cmV0dXJuICggdGhpc1sgMCBdICYmIHRoaXNbIDAgXS5wYXJlbnROb2RlICkgPyB0aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aCA6IC0xO1xuXHRcdH1cblxuXHRcdC8vIEluZGV4IGluIHNlbGVjdG9yXG5cdFx0aWYgKCB0eXBlb2YgZWxlbSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiBpbmRleE9mLmNhbGwoIGpRdWVyeSggZWxlbSApLCB0aGlzWyAwIF0gKTtcblx0XHR9XG5cblx0XHQvLyBMb2NhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkZXNpcmVkIGVsZW1lbnRcblx0XHRyZXR1cm4gaW5kZXhPZi5jYWxsKCB0aGlzLFxuXG5cdFx0XHQvLyBJZiBpdCByZWNlaXZlcyBhIGpRdWVyeSBvYmplY3QsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHVzZWRcblx0XHRcdGVsZW0uanF1ZXJ5ID8gZWxlbVsgMCBdIDogZWxlbVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkOiBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKFxuXHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoXG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggdGhpcy5nZXQoKSwgalF1ZXJ5KCBzZWxlY3RvciwgY29udGV4dCApIClcblx0XHRcdClcblx0XHQpO1xuXHR9LFxuXG5cdGFkZEJhY2s6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5hZGQoIHNlbGVjdG9yID09IG51bGwgP1xuXHRcdFx0dGhpcy5wcmV2T2JqZWN0IDogdGhpcy5wcmV2T2JqZWN0LmZpbHRlciggc2VsZWN0b3IgKVxuXHRcdCk7XG5cdH1cbn0gKTtcblxuZnVuY3Rpb24gc2libGluZyggY3VyLCBkaXIgKSB7XG5cdHdoaWxlICggKCBjdXIgPSBjdXJbIGRpciBdICkgJiYgY3VyLm5vZGVUeXBlICE9PSAxICkge31cblx0cmV0dXJuIGN1cjtcbn1cblxualF1ZXJ5LmVhY2goIHtcblx0cGFyZW50OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdHJldHVybiBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSAxMSA/IHBhcmVudCA6IG51bGw7XG5cdH0sXG5cdHBhcmVudHM6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiICk7XG5cdH0sXG5cdHBhcmVudHNVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiLCB1bnRpbCApO1xuXHR9LFxuXHRuZXh0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZyggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXY6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XG5cdH0sXG5cdG5leHRBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiApO1xuXHR9LFxuXHRwcmV2QWxsOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XG5cdH0sXG5cdG5leHRVbnRpbDogZnVuY3Rpb24oIGVsZW0sIGksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiwgdW50aWwgKTtcblx0fSxcblx0cHJldlVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiwgdW50aWwgKTtcblx0fSxcblx0c2libGluZ3M6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggKCBlbGVtLnBhcmVudE5vZGUgfHwge30gKS5maXJzdENoaWxkLCBlbGVtICk7XG5cdH0sXG5cdGNoaWxkcmVuOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZ3MoIGVsZW0uZmlyc3RDaGlsZCApO1xuXHR9LFxuXHRjb250ZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0aWYgKCB0eXBlb2YgZWxlbS5jb250ZW50RG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5jb250ZW50RG9jdW1lbnQ7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHksIGlPUyA3IG9ubHksIEFuZHJvaWQgQnJvd3NlciA8PTQuMyBvbmx5XG5cdFx0Ly8gVHJlYXQgdGhlIHRlbXBsYXRlIGVsZW1lbnQgYXMgYSByZWd1bGFyIG9uZSBpbiBicm93c2VycyB0aGF0XG5cdFx0Ly8gZG9uJ3Qgc3VwcG9ydCBpdC5cblx0XHRpZiAoIG5vZGVOYW1lKCBlbGVtLCBcInRlbXBsYXRlXCIgKSApIHtcblx0XHRcdGVsZW0gPSBlbGVtLmNvbnRlbnQgfHwgZWxlbTtcblx0XHR9XG5cblx0XHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgZWxlbS5jaGlsZE5vZGVzICk7XG5cdH1cbn0sIGZ1bmN0aW9uKCBuYW1lLCBmbiApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggdW50aWwsIHNlbGVjdG9yICkge1xuXHRcdHZhciBtYXRjaGVkID0galF1ZXJ5Lm1hcCggdGhpcywgZm4sIHVudGlsICk7XG5cblx0XHRpZiAoIG5hbWUuc2xpY2UoIC01ICkgIT09IFwiVW50aWxcIiApIHtcblx0XHRcdHNlbGVjdG9yID0gdW50aWw7XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWxlY3RvciAmJiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRtYXRjaGVkID0galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIG1hdGNoZWQgKTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMubGVuZ3RoID4gMSApIHtcblxuXHRcdFx0Ly8gUmVtb3ZlIGR1cGxpY2F0ZXNcblx0XHRcdGlmICggIWd1YXJhbnRlZWRVbmlxdWVbIG5hbWUgXSApIHtcblx0XHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV2ZXJzZSBvcmRlciBmb3IgcGFyZW50cyogYW5kIHByZXYtZGVyaXZhdGl2ZXNcblx0XHRcdGlmICggcnBhcmVudHNwcmV2LnRlc3QoIG5hbWUgKSApIHtcblx0XHRcdFx0bWF0Y2hlZC5yZXZlcnNlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkICk7XG5cdH07XG59ICk7XG52YXIgcm5vdGh0bWx3aGl0ZSA9ICggL1teXFx4MjBcXHRcXHJcXG5cXGZdKy9nICk7XG5cblxuXG4vLyBDb252ZXJ0IFN0cmluZy1mb3JtYXR0ZWQgb3B0aW9ucyBpbnRvIE9iamVjdC1mb3JtYXR0ZWQgb25lc1xuZnVuY3Rpb24gY3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIHtcblx0dmFyIG9iamVjdCA9IHt9O1xuXHRqUXVlcnkuZWFjaCggb3B0aW9ucy5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdLCBmdW5jdGlvbiggXywgZmxhZyApIHtcblx0XHRvYmplY3RbIGZsYWcgXSA9IHRydWU7XG5cdH0gKTtcblx0cmV0dXJuIG9iamVjdDtcbn1cblxuLypcbiAqIENyZWF0ZSBhIGNhbGxiYWNrIGxpc3QgdXNpbmcgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOlxuICpcbiAqXHRvcHRpb25zOiBhbiBvcHRpb25hbCBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBvcHRpb25zIHRoYXQgd2lsbCBjaGFuZ2UgaG93XG4gKlx0XHRcdHRoZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMgb3IgYSBtb3JlIHRyYWRpdGlvbmFsIG9wdGlvbiBvYmplY3RcbiAqXG4gKiBCeSBkZWZhdWx0IGEgY2FsbGJhY2sgbGlzdCB3aWxsIGFjdCBsaWtlIGFuIGV2ZW50IGNhbGxiYWNrIGxpc3QgYW5kIGNhbiBiZVxuICogXCJmaXJlZFwiIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIFBvc3NpYmxlIG9wdGlvbnM6XG4gKlxuICpcdG9uY2U6XHRcdFx0d2lsbCBlbnN1cmUgdGhlIGNhbGxiYWNrIGxpc3QgY2FuIG9ubHkgYmUgZmlyZWQgb25jZSAobGlrZSBhIERlZmVycmVkKVxuICpcbiAqXHRtZW1vcnk6XHRcdFx0d2lsbCBrZWVwIHRyYWNrIG9mIHByZXZpb3VzIHZhbHVlcyBhbmQgd2lsbCBjYWxsIGFueSBjYWxsYmFjayBhZGRlZFxuICpcdFx0XHRcdFx0YWZ0ZXIgdGhlIGxpc3QgaGFzIGJlZW4gZmlyZWQgcmlnaHQgYXdheSB3aXRoIHRoZSBsYXRlc3QgXCJtZW1vcml6ZWRcIlxuICpcdFx0XHRcdFx0dmFsdWVzIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdHVuaXF1ZTpcdFx0XHR3aWxsIGVuc3VyZSBhIGNhbGxiYWNrIGNhbiBvbmx5IGJlIGFkZGVkIG9uY2UgKG5vIGR1cGxpY2F0ZSBpbiB0aGUgbGlzdClcbiAqXG4gKlx0c3RvcE9uRmFsc2U6XHRpbnRlcnJ1cHQgY2FsbGluZ3Mgd2hlbiBhIGNhbGxiYWNrIHJldHVybnMgZmFsc2VcbiAqXG4gKi9cbmpRdWVyeS5DYWxsYmFja3MgPSBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHQvLyBDb252ZXJ0IG9wdGlvbnMgZnJvbSBTdHJpbmctZm9ybWF0dGVkIHRvIE9iamVjdC1mb3JtYXR0ZWQgaWYgbmVlZGVkXG5cdC8vICh3ZSBjaGVjayBpbiBjYWNoZSBmaXJzdClcblx0b3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiID9cblx0XHRjcmVhdGVPcHRpb25zKCBvcHRpb25zICkgOlxuXHRcdGpRdWVyeS5leHRlbmQoIHt9LCBvcHRpb25zICk7XG5cblx0dmFyIC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IGlzIGN1cnJlbnRseSBmaXJpbmdcblx0XHRmaXJpbmcsXG5cblx0XHQvLyBMYXN0IGZpcmUgdmFsdWUgZm9yIG5vbi1mb3JnZXR0YWJsZSBsaXN0c1xuXHRcdG1lbW9yeSxcblxuXHRcdC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IHdhcyBhbHJlYWR5IGZpcmVkXG5cdFx0ZmlyZWQsXG5cblx0XHQvLyBGbGFnIHRvIHByZXZlbnQgZmlyaW5nXG5cdFx0bG9ja2VkLFxuXG5cdFx0Ly8gQWN0dWFsIGNhbGxiYWNrIGxpc3Rcblx0XHRsaXN0ID0gW10sXG5cblx0XHQvLyBRdWV1ZSBvZiBleGVjdXRpb24gZGF0YSBmb3IgcmVwZWF0YWJsZSBsaXN0c1xuXHRcdHF1ZXVlID0gW10sXG5cblx0XHQvLyBJbmRleCBvZiBjdXJyZW50bHkgZmlyaW5nIGNhbGxiYWNrIChtb2RpZmllZCBieSBhZGQvcmVtb3ZlIGFzIG5lZWRlZClcblx0XHRmaXJpbmdJbmRleCA9IC0xLFxuXG5cdFx0Ly8gRmlyZSBjYWxsYmFja3Ncblx0XHRmaXJlID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEVuZm9yY2Ugc2luZ2xlLWZpcmluZ1xuXHRcdFx0bG9ja2VkID0gbG9ja2VkIHx8IG9wdGlvbnMub25jZTtcblxuXHRcdFx0Ly8gRXhlY3V0ZSBjYWxsYmFja3MgZm9yIGFsbCBwZW5kaW5nIGV4ZWN1dGlvbnMsXG5cdFx0XHQvLyByZXNwZWN0aW5nIGZpcmluZ0luZGV4IG92ZXJyaWRlcyBhbmQgcnVudGltZSBjaGFuZ2VzXG5cdFx0XHRmaXJlZCA9IGZpcmluZyA9IHRydWU7XG5cdFx0XHRmb3IgKCA7IHF1ZXVlLmxlbmd0aDsgZmlyaW5nSW5kZXggPSAtMSApIHtcblx0XHRcdFx0bWVtb3J5ID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdFx0d2hpbGUgKCArK2ZpcmluZ0luZGV4IDwgbGlzdC5sZW5ndGggKSB7XG5cblx0XHRcdFx0XHQvLyBSdW4gY2FsbGJhY2sgYW5kIGNoZWNrIGZvciBlYXJseSB0ZXJtaW5hdGlvblxuXHRcdFx0XHRcdGlmICggbGlzdFsgZmlyaW5nSW5kZXggXS5hcHBseSggbWVtb3J5WyAwIF0sIG1lbW9yeVsgMSBdICkgPT09IGZhbHNlICYmXG5cdFx0XHRcdFx0XHRvcHRpb25zLnN0b3BPbkZhbHNlICkge1xuXG5cdFx0XHRcdFx0XHQvLyBKdW1wIHRvIGVuZCBhbmQgZm9yZ2V0IHRoZSBkYXRhIHNvIC5hZGQgZG9lc24ndCByZS1maXJlXG5cdFx0XHRcdFx0XHRmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoO1xuXHRcdFx0XHRcdFx0bWVtb3J5ID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZvcmdldCB0aGUgZGF0YSBpZiB3ZSdyZSBkb25lIHdpdGggaXRcblx0XHRcdGlmICggIW9wdGlvbnMubWVtb3J5ICkge1xuXHRcdFx0XHRtZW1vcnkgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0ZmlyaW5nID0gZmFsc2U7XG5cblx0XHRcdC8vIENsZWFuIHVwIGlmIHdlJ3JlIGRvbmUgZmlyaW5nIGZvciBnb29kXG5cdFx0XHRpZiAoIGxvY2tlZCApIHtcblxuXHRcdFx0XHQvLyBLZWVwIGFuIGVtcHR5IGxpc3QgaWYgd2UgaGF2ZSBkYXRhIGZvciBmdXR1cmUgYWRkIGNhbGxzXG5cdFx0XHRcdGlmICggbWVtb3J5ICkge1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UsIHRoaXMgb2JqZWN0IGlzIHNwZW50XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bGlzdCA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Ly8gQWN0dWFsIENhbGxiYWNrcyBvYmplY3Rcblx0XHRzZWxmID0ge1xuXG5cdFx0XHQvLyBBZGQgYSBjYWxsYmFjayBvciBhIGNvbGxlY3Rpb24gb2YgY2FsbGJhY2tzIHRvIHRoZSBsaXN0XG5cdFx0XHRhZGQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGxpc3QgKSB7XG5cblx0XHRcdFx0XHQvLyBJZiB3ZSBoYXZlIG1lbW9yeSBmcm9tIGEgcGFzdCBydW4sIHdlIHNob3VsZCBmaXJlIGFmdGVyIGFkZGluZ1xuXHRcdFx0XHRcdGlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoIC0gMTtcblx0XHRcdFx0XHRcdHF1ZXVlLnB1c2goIG1lbW9yeSApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCggZnVuY3Rpb24gYWRkKCBhcmdzICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIGFyZ3MsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggYXJnICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCAhb3B0aW9ucy51bmlxdWUgfHwgIXNlbGYuaGFzKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGxpc3QucHVzaCggYXJnICk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBhcmcgJiYgYXJnLmxlbmd0aCAmJiB0b1R5cGUoIGFyZyApICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gSW5zcGVjdCByZWN1cnNpdmVseVxuXHRcdFx0XHRcdFx0XHRcdGFkZCggYXJnICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHR9ICkoIGFyZ3VtZW50cyApO1xuXG5cdFx0XHRcdFx0aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBSZW1vdmUgYSBjYWxsYmFjayBmcm9tIHRoZSBsaXN0XG5cdFx0XHRyZW1vdmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZWFjaCggYXJndW1lbnRzLCBmdW5jdGlvbiggXywgYXJnICkge1xuXHRcdFx0XHRcdHZhciBpbmRleDtcblx0XHRcdFx0XHR3aGlsZSAoICggaW5kZXggPSBqUXVlcnkuaW5BcnJheSggYXJnLCBsaXN0LCBpbmRleCApICkgPiAtMSApIHtcblx0XHRcdFx0XHRcdGxpc3Quc3BsaWNlKCBpbmRleCwgMSApO1xuXG5cdFx0XHRcdFx0XHQvLyBIYW5kbGUgZmlyaW5nIGluZGV4ZXNcblx0XHRcdFx0XHRcdGlmICggaW5kZXggPD0gZmlyaW5nSW5kZXggKSB7XG5cdFx0XHRcdFx0XHRcdGZpcmluZ0luZGV4LS07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2hlY2sgaWYgYSBnaXZlbiBjYWxsYmFjayBpcyBpbiB0aGUgbGlzdC5cblx0XHRcdC8vIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCByZXR1cm4gd2hldGhlciBvciBub3QgbGlzdCBoYXMgY2FsbGJhY2tzIGF0dGFjaGVkLlxuXHRcdFx0aGFzOiBmdW5jdGlvbiggZm4gKSB7XG5cdFx0XHRcdHJldHVybiBmbiA/XG5cdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGZuLCBsaXN0ICkgPiAtMSA6XG5cdFx0XHRcdFx0bGlzdC5sZW5ndGggPiAwO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gUmVtb3ZlIGFsbCBjYWxsYmFja3MgZnJvbSB0aGUgbGlzdFxuXHRcdFx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGxpc3QgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRGlzYWJsZSAuZmlyZSBhbmQgLmFkZFxuXHRcdFx0Ly8gQWJvcnQgYW55IGN1cnJlbnQvcGVuZGluZyBleGVjdXRpb25zXG5cdFx0XHQvLyBDbGVhciBhbGwgY2FsbGJhY2tzIGFuZCB2YWx1ZXNcblx0XHRcdGRpc2FibGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsb2NrZWQgPSBxdWV1ZSA9IFtdO1xuXHRcdFx0XHRsaXN0ID0gbWVtb3J5ID0gXCJcIjtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0ZGlzYWJsZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gIWxpc3Q7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBEaXNhYmxlIC5maXJlXG5cdFx0XHQvLyBBbHNvIGRpc2FibGUgLmFkZCB1bmxlc3Mgd2UgaGF2ZSBtZW1vcnkgKHNpbmNlIGl0IHdvdWxkIGhhdmUgbm8gZWZmZWN0KVxuXHRcdFx0Ly8gQWJvcnQgYW55IHBlbmRpbmcgZXhlY3V0aW9uc1xuXHRcdFx0bG9jazogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxvY2tlZCA9IHF1ZXVlID0gW107XG5cdFx0XHRcdGlmICggIW1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdGxpc3QgPSBtZW1vcnkgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGxvY2tlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWxvY2tlZDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIENhbGwgYWxsIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBjb250ZXh0IGFuZCBhcmd1bWVudHNcblx0XHRcdGZpcmVXaXRoOiBmdW5jdGlvbiggY29udGV4dCwgYXJncyApIHtcblx0XHRcdFx0aWYgKCAhbG9ja2VkICkge1xuXHRcdFx0XHRcdGFyZ3MgPSBhcmdzIHx8IFtdO1xuXHRcdFx0XHRcdGFyZ3MgPSBbIGNvbnRleHQsIGFyZ3Muc2xpY2UgPyBhcmdzLnNsaWNlKCkgOiBhcmdzIF07XG5cdFx0XHRcdFx0cXVldWUucHVzaCggYXJncyApO1xuXHRcdFx0XHRcdGlmICggIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDYWxsIGFsbCB0aGUgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHNlbGYuZmlyZVdpdGgoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIFRvIGtub3cgaWYgdGhlIGNhbGxiYWNrcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZVxuXHRcdFx0ZmlyZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gISFmaXJlZDtcblx0XHRcdH1cblx0XHR9O1xuXG5cdHJldHVybiBzZWxmO1xufTtcblxuXG5mdW5jdGlvbiBJZGVudGl0eSggdiApIHtcblx0cmV0dXJuIHY7XG59XG5mdW5jdGlvbiBUaHJvd2VyKCBleCApIHtcblx0dGhyb3cgZXg7XG59XG5cbmZ1bmN0aW9uIGFkb3B0VmFsdWUoIHZhbHVlLCByZXNvbHZlLCByZWplY3QsIG5vVmFsdWUgKSB7XG5cdHZhciBtZXRob2Q7XG5cblx0dHJ5IHtcblxuXHRcdC8vIENoZWNrIGZvciBwcm9taXNlIGFzcGVjdCBmaXJzdCB0byBwcml2aWxlZ2Ugc3luY2hyb25vdXMgYmVoYXZpb3Jcblx0XHRpZiAoIHZhbHVlICYmIGlzRnVuY3Rpb24oICggbWV0aG9kID0gdmFsdWUucHJvbWlzZSApICkgKSB7XG5cdFx0XHRtZXRob2QuY2FsbCggdmFsdWUgKS5kb25lKCByZXNvbHZlICkuZmFpbCggcmVqZWN0ICk7XG5cblx0XHQvLyBPdGhlciB0aGVuYWJsZXNcblx0XHR9IGVsc2UgaWYgKCB2YWx1ZSAmJiBpc0Z1bmN0aW9uKCAoIG1ldGhvZCA9IHZhbHVlLnRoZW4gKSApICkge1xuXHRcdFx0bWV0aG9kLmNhbGwoIHZhbHVlLCByZXNvbHZlLCByZWplY3QgKTtcblxuXHRcdC8vIE90aGVyIG5vbi10aGVuYWJsZXNcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBDb250cm9sIGByZXNvbHZlYCBhcmd1bWVudHMgYnkgbGV0dGluZyBBcnJheSNzbGljZSBjYXN0IGJvb2xlYW4gYG5vVmFsdWVgIHRvIGludGVnZXI6XG5cdFx0XHQvLyAqIGZhbHNlOiBbIHZhbHVlIF0uc2xpY2UoIDAgKSA9PiByZXNvbHZlKCB2YWx1ZSApXG5cdFx0XHQvLyAqIHRydWU6IFsgdmFsdWUgXS5zbGljZSggMSApID0+IHJlc29sdmUoKVxuXHRcdFx0cmVzb2x2ZS5hcHBseSggdW5kZWZpbmVkLCBbIHZhbHVlIF0uc2xpY2UoIG5vVmFsdWUgKSApO1xuXHRcdH1cblxuXHQvLyBGb3IgUHJvbWlzZXMvQSssIGNvbnZlcnQgZXhjZXB0aW9ucyBpbnRvIHJlamVjdGlvbnNcblx0Ly8gU2luY2UgalF1ZXJ5LndoZW4gZG9lc24ndCB1bndyYXAgdGhlbmFibGVzLCB3ZSBjYW4gc2tpcCB0aGUgZXh0cmEgY2hlY2tzIGFwcGVhcmluZyBpblxuXHQvLyBEZWZlcnJlZCN0aGVuIHRvIGNvbmRpdGlvbmFsbHkgc3VwcHJlc3MgcmVqZWN0aW9uLlxuXHR9IGNhdGNoICggdmFsdWUgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCBvbmx5XG5cdFx0Ly8gU3RyaWN0IG1vZGUgZnVuY3Rpb25zIGludm9rZWQgd2l0aG91dCAuY2FsbC8uYXBwbHkgZ2V0IGdsb2JhbC1vYmplY3QgY29udGV4dFxuXHRcdHJlamVjdC5hcHBseSggdW5kZWZpbmVkLCBbIHZhbHVlIF0gKTtcblx0fVxufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0RGVmZXJyZWQ6IGZ1bmN0aW9uKCBmdW5jICkge1xuXHRcdHZhciB0dXBsZXMgPSBbXG5cblx0XHRcdFx0Ly8gYWN0aW9uLCBhZGQgbGlzdGVuZXIsIGNhbGxiYWNrcyxcblx0XHRcdFx0Ly8gLi4uIC50aGVuIGhhbmRsZXJzLCBhcmd1bWVudCBpbmRleCwgW2ZpbmFsIHN0YXRlXVxuXHRcdFx0XHRbIFwibm90aWZ5XCIsIFwicHJvZ3Jlc3NcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwibWVtb3J5XCIgKSwgMiBdLFxuXHRcdFx0XHRbIFwicmVzb2x2ZVwiLCBcImRvbmVcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksIDAsIFwicmVzb2x2ZWRcIiBdLFxuXHRcdFx0XHRbIFwicmVqZWN0XCIsIFwiZmFpbFwiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSwgMSwgXCJyZWplY3RlZFwiIF1cblx0XHRcdF0sXG5cdFx0XHRzdGF0ZSA9IFwicGVuZGluZ1wiLFxuXHRcdFx0cHJvbWlzZSA9IHtcblx0XHRcdFx0c3RhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBzdGF0ZTtcblx0XHRcdFx0fSxcblx0XHRcdFx0YWx3YXlzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5kb25lKCBhcmd1bWVudHMgKS5mYWlsKCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJjYXRjaFwiOiBmdW5jdGlvbiggZm4gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHByb21pc2UudGhlbiggbnVsbCwgZm4gKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBLZWVwIHBpcGUgZm9yIGJhY2stY29tcGF0XG5cdFx0XHRcdHBpcGU6IGZ1bmN0aW9uKCAvKiBmbkRvbmUsIGZuRmFpbCwgZm5Qcm9ncmVzcyAqLyApIHtcblx0XHRcdFx0XHR2YXIgZm5zID0gYXJndW1lbnRzO1xuXG5cdFx0XHRcdFx0cmV0dXJuIGpRdWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIE1hcCB0dXBsZXMgKHByb2dyZXNzLCBkb25lLCBmYWlsKSB0byBhcmd1bWVudHMgKGRvbmUsIGZhaWwsIHByb2dyZXNzKVxuXHRcdFx0XHRcdFx0XHR2YXIgZm4gPSBpc0Z1bmN0aW9uKCBmbnNbIHR1cGxlWyA0IF0gXSApICYmIGZuc1sgdHVwbGVbIDQgXSBdO1xuXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLnByb2dyZXNzKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLm5vdGlmeSB9KVxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5kb25lKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJlc29sdmUgfSlcblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQuZmFpbChmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5yZWplY3QgfSlcblx0XHRcdFx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAxIF0gXSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJldHVybmVkID0gZm4gJiYgZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdFx0XHRcdGlmICggcmV0dXJuZWQgJiYgaXNGdW5jdGlvbiggcmV0dXJuZWQucHJvbWlzZSApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQucHJvbWlzZSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5wcm9ncmVzcyggbmV3RGVmZXIubm90aWZ5IClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmRvbmUoIG5ld0RlZmVyLnJlc29sdmUgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZmFpbCggbmV3RGVmZXIucmVqZWN0ICk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXShcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm4gPyBbIHJldHVybmVkIF0gOiBhcmd1bWVudHNcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHRmbnMgPSBudWxsO1xuXHRcdFx0XHRcdH0gKS5wcm9taXNlKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoZW46IGZ1bmN0aW9uKCBvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgb25Qcm9ncmVzcyApIHtcblx0XHRcdFx0XHR2YXIgbWF4RGVwdGggPSAwO1xuXHRcdFx0XHRcdGZ1bmN0aW9uIHJlc29sdmUoIGRlcHRoLCBkZWZlcnJlZCwgaGFuZGxlciwgc3BlY2lhbCApIHtcblx0XHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHRoYXQgPSB0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBhcmd1bWVudHMsXG5cdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdyA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJldHVybmVkLCB0aGVuO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuM1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTlcblx0XHRcdFx0XHRcdFx0XHRcdC8vIElnbm9yZSBkb3VibGUtcmVzb2x1dGlvbiBhdHRlbXB0c1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCA8IG1heERlcHRoICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkID0gaGFuZGxlci5hcHBseSggdGhhdCwgYXJncyApO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4xXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC00OFxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCByZXR1cm5lZCA9PT0gZGVmZXJyZWQucHJvbWlzZSgpICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCBcIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvblwiICk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb25zIDIuMy4zLjEsIDMuNVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTRcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTc1XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBSZXRyaWV2ZSBgdGhlbmAgb25seSBvbmNlXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGVuID0gcmV0dXJuZWQgJiZcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy40XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTY0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgY2hlY2sgb2JqZWN0cyBhbmQgZnVuY3Rpb25zIGZvciB0aGVuYWJpbGl0eVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoIHR5cGVvZiByZXR1cm5lZCA9PT0gXCJvYmplY3RcIiB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiByZXR1cm5lZCA9PT0gXCJmdW5jdGlvblwiICkgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQudGhlbjtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGEgcmV0dXJuZWQgdGhlbmFibGVcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggdGhlbiApICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFNwZWNpYWwgcHJvY2Vzc29ycyAobm90aWZ5KSBqdXN0IHdhaXQgZm9yIHJlc29sdXRpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBzcGVjaWFsICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE5vcm1hbCBwcm9jZXNzb3JzIChyZXNvbHZlKSBhbHNvIGhvb2sgaW50byBwcm9ncmVzc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gLi4uYW5kIGRpc3JlZ2FyZCBvbGRlciByZXNvbHV0aW9uIHZhbHVlc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1heERlcHRoKys7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksIHNwZWNpYWwgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgVGhyb3dlciwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYWxsIG90aGVyIHJldHVybmVkIHZhbHVlc1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IHN1YnN0aXR1dGUgaGFuZGxlcnMgcGFzcyBvbiBjb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGFuZCBtdWx0aXBsZSB2YWx1ZXMgKG5vbi1zcGVjIGJlaGF2aW9yKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGhhbmRsZXIgIT09IElkZW50aXR5ICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoYXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncyA9IFsgcmV0dXJuZWQgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFByb2Nlc3MgdGhlIHZhbHVlKHMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIERlZmF1bHQgcHJvY2VzcyBpcyByZXNvbHZlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCggc3BlY2lhbCB8fCBkZWZlcnJlZC5yZXNvbHZlV2l0aCApKCB0aGF0LCBhcmdzICk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgbm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGNhdGNoIGFuZCByZWplY3QgZXhjZXB0aW9uc1xuXHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MgPSBzcGVjaWFsID9cblx0XHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3cgOlxuXHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayggZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5zdGFja1RyYWNlICk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjQuMVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTYxXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIHBvc3QtcmVzb2x1dGlvbiBleGNlcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCArIDEgPj0gbWF4RGVwdGggKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGFuZCBtdWx0aXBsZSB2YWx1ZXMgKG5vbi1zcGVjIGJlaGF2aW9yKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBoYW5kbGVyICE9PSBUaHJvd2VyICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGF0ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyBlIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIHRoYXQsIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjFcblx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTdcblx0XHRcdFx0XHRcdFx0Ly8gUmUtcmVzb2x2ZSBwcm9taXNlcyBpbW1lZGlhdGVseSB0byBkb2RnZSBmYWxzZSByZWplY3Rpb24gZnJvbVxuXHRcdFx0XHRcdFx0XHQvLyBzdWJzZXF1ZW50IGVycm9yc1xuXHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoICkge1xuXHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENhbGwgYW4gb3B0aW9uYWwgaG9vayB0byByZWNvcmQgdGhlIHN0YWNrLCBpbiBjYXNlIG9mIGV4Y2VwdGlvblxuXHRcdFx0XHRcdFx0XHRcdC8vIHNpbmNlIGl0J3Mgb3RoZXJ3aXNlIGxvc3Qgd2hlbiBleGVjdXRpb24gZ29lcyBhc3luY1xuXHRcdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHByb2Nlc3Muc3RhY2tUcmFjZSA9IGpRdWVyeS5EZWZlcnJlZC5nZXRTdGFja0hvb2soKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoIHByb2Nlc3MgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7XG5cblx0XHRcdFx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25Qcm9ncmVzcyApID9cblx0XHRcdFx0XHRcdFx0XHRcdG9uUHJvZ3Jlc3MgOlxuXHRcdFx0XHRcdFx0XHRcdFx0SWRlbnRpdHksXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIubm90aWZ5V2l0aFxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAxIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvbkZ1bGZpbGxlZCApID9cblx0XHRcdFx0XHRcdFx0XHRcdG9uRnVsZmlsbGVkIDpcblx0XHRcdFx0XHRcdFx0XHRcdElkZW50aXR5XG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdC8vIHJlamVjdGVkX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMiBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25SZWplY3RlZCApID9cblx0XHRcdFx0XHRcdFx0XHRcdG9uUmVqZWN0ZWQgOlxuXHRcdFx0XHRcdFx0XHRcdFx0VGhyb3dlclxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gKS5wcm9taXNlKCk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gR2V0IGEgcHJvbWlzZSBmb3IgdGhpcyBkZWZlcnJlZFxuXHRcdFx0XHQvLyBJZiBvYmogaXMgcHJvdmlkZWQsIHRoZSBwcm9taXNlIGFzcGVjdCBpcyBhZGRlZCB0byB0aGUgb2JqZWN0XG5cdFx0XHRcdHByb21pc2U6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9iaiAhPSBudWxsID8galF1ZXJ5LmV4dGVuZCggb2JqLCBwcm9taXNlICkgOiBwcm9taXNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZGVmZXJyZWQgPSB7fTtcblxuXHRcdC8vIEFkZCBsaXN0LXNwZWNpZmljIG1ldGhvZHNcblx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7XG5cdFx0XHR2YXIgbGlzdCA9IHR1cGxlWyAyIF0sXG5cdFx0XHRcdHN0YXRlU3RyaW5nID0gdHVwbGVbIDUgXTtcblxuXHRcdFx0Ly8gcHJvbWlzZS5wcm9ncmVzcyA9IGxpc3QuYWRkXG5cdFx0XHQvLyBwcm9taXNlLmRvbmUgPSBsaXN0LmFkZFxuXHRcdFx0Ly8gcHJvbWlzZS5mYWlsID0gbGlzdC5hZGRcblx0XHRcdHByb21pc2VbIHR1cGxlWyAxIF0gXSA9IGxpc3QuYWRkO1xuXG5cdFx0XHQvLyBIYW5kbGUgc3RhdGVcblx0XHRcdGlmICggc3RhdGVTdHJpbmcgKSB7XG5cdFx0XHRcdGxpc3QuYWRkKFxuXHRcdFx0XHRcdGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdFx0XHQvLyBzdGF0ZSA9IFwicmVzb2x2ZWRcIiAoaS5lLiwgZnVsZmlsbGVkKVxuXHRcdFx0XHRcdFx0Ly8gc3RhdGUgPSBcInJlamVjdGVkXCJcblx0XHRcdFx0XHRcdHN0YXRlID0gc3RhdGVTdHJpbmc7XG5cdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdC8vIHJlamVjdGVkX2NhbGxiYWNrcy5kaXNhYmxlXG5cdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2NhbGxiYWNrcy5kaXNhYmxlXG5cdFx0XHRcdFx0dHVwbGVzWyAzIC0gaSBdWyAyIF0uZGlzYWJsZSxcblxuXHRcdFx0XHRcdC8vIHJlamVjdGVkX2hhbmRsZXJzLmRpc2FibGVcblx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuZGlzYWJsZVxuXHRcdFx0XHRcdHR1cGxlc1sgMyAtIGkgXVsgMyBdLmRpc2FibGUsXG5cblx0XHRcdFx0XHQvLyBwcm9ncmVzc19jYWxsYmFja3MubG9ja1xuXHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAyIF0ubG9jayxcblxuXHRcdFx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmxvY2tcblx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMyBdLmxvY2tcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMuZmlyZVxuXHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmZpcmVcblx0XHRcdC8vIHJlamVjdGVkX2hhbmRsZXJzLmZpcmVcblx0XHRcdGxpc3QuYWRkKCB0dXBsZVsgMyBdLmZpcmUgKTtcblxuXHRcdFx0Ly8gZGVmZXJyZWQubm90aWZ5ID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLm5vdGlmeVdpdGgoLi4uKSB9XG5cdFx0XHQvLyBkZWZlcnJlZC5yZXNvbHZlID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLnJlc29sdmVXaXRoKC4uLikgfVxuXHRcdFx0Ly8gZGVmZXJyZWQucmVqZWN0ID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLnJlamVjdFdpdGgoLi4uKSB9XG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXSggdGhpcyA9PT0gZGVmZXJyZWQgPyB1bmRlZmluZWQgOiB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9O1xuXG5cdFx0XHQvLyBkZWZlcnJlZC5ub3RpZnlXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0Ly8gZGVmZXJyZWQucmVzb2x2ZVdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHQvLyBkZWZlcnJlZC5yZWplY3RXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdID0gbGlzdC5maXJlV2l0aDtcblx0XHR9ICk7XG5cblx0XHQvLyBNYWtlIHRoZSBkZWZlcnJlZCBhIHByb21pc2Vcblx0XHRwcm9taXNlLnByb21pc2UoIGRlZmVycmVkICk7XG5cblx0XHQvLyBDYWxsIGdpdmVuIGZ1bmMgaWYgYW55XG5cdFx0aWYgKCBmdW5jICkge1xuXHRcdFx0ZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVmZXJyZWQgKTtcblx0XHR9XG5cblx0XHQvLyBBbGwgZG9uZSFcblx0XHRyZXR1cm4gZGVmZXJyZWQ7XG5cdH0sXG5cblx0Ly8gRGVmZXJyZWQgaGVscGVyXG5cdHdoZW46IGZ1bmN0aW9uKCBzaW5nbGVWYWx1ZSApIHtcblx0XHR2YXJcblxuXHRcdFx0Ly8gY291bnQgb2YgdW5jb21wbGV0ZWQgc3Vib3JkaW5hdGVzXG5cdFx0XHRyZW1haW5pbmcgPSBhcmd1bWVudHMubGVuZ3RoLFxuXG5cdFx0XHQvLyBjb3VudCBvZiB1bnByb2Nlc3NlZCBhcmd1bWVudHNcblx0XHRcdGkgPSByZW1haW5pbmcsXG5cblx0XHRcdC8vIHN1Ym9yZGluYXRlIGZ1bGZpbGxtZW50IGRhdGFcblx0XHRcdHJlc29sdmVDb250ZXh0cyA9IEFycmF5KCBpICksXG5cdFx0XHRyZXNvbHZlVmFsdWVzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICksXG5cblx0XHRcdC8vIHRoZSBtYXN0ZXIgRGVmZXJyZWRcblx0XHRcdG1hc3RlciA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXG5cdFx0XHQvLyBzdWJvcmRpbmF0ZSBjYWxsYmFjayBmYWN0b3J5XG5cdFx0XHR1cGRhdGVGdW5jID0gZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZUNvbnRleHRzWyBpIF0gPSB0aGlzO1xuXHRcdFx0XHRcdHJlc29sdmVWYWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gc2xpY2UuY2FsbCggYXJndW1lbnRzICkgOiB2YWx1ZTtcblx0XHRcdFx0XHRpZiAoICEoIC0tcmVtYWluaW5nICkgKSB7XG5cdFx0XHRcdFx0XHRtYXN0ZXIucmVzb2x2ZVdpdGgoIHJlc29sdmVDb250ZXh0cywgcmVzb2x2ZVZhbHVlcyApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdH07XG5cblx0XHQvLyBTaW5nbGUtIGFuZCBlbXB0eSBhcmd1bWVudHMgYXJlIGFkb3B0ZWQgbGlrZSBQcm9taXNlLnJlc29sdmVcblx0XHRpZiAoIHJlbWFpbmluZyA8PSAxICkge1xuXHRcdFx0YWRvcHRWYWx1ZSggc2luZ2xlVmFsdWUsIG1hc3Rlci5kb25lKCB1cGRhdGVGdW5jKCBpICkgKS5yZXNvbHZlLCBtYXN0ZXIucmVqZWN0LFxuXHRcdFx0XHQhcmVtYWluaW5nICk7XG5cblx0XHRcdC8vIFVzZSAudGhlbigpIHRvIHVud3JhcCBzZWNvbmRhcnkgdGhlbmFibGVzIChjZi4gZ2gtMzAwMClcblx0XHRcdGlmICggbWFzdGVyLnN0YXRlKCkgPT09IFwicGVuZGluZ1wiIHx8XG5cdFx0XHRcdGlzRnVuY3Rpb24oIHJlc29sdmVWYWx1ZXNbIGkgXSAmJiByZXNvbHZlVmFsdWVzWyBpIF0udGhlbiApICkge1xuXG5cdFx0XHRcdHJldHVybiBtYXN0ZXIudGhlbigpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIE11bHRpcGxlIGFyZ3VtZW50cyBhcmUgYWdncmVnYXRlZCBsaWtlIFByb21pc2UuYWxsIGFycmF5IGVsZW1lbnRzXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRhZG9wdFZhbHVlKCByZXNvbHZlVmFsdWVzWyBpIF0sIHVwZGF0ZUZ1bmMoIGkgKSwgbWFzdGVyLnJlamVjdCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBtYXN0ZXIucHJvbWlzZSgpO1xuXHR9XG59ICk7XG5cblxuLy8gVGhlc2UgdXN1YWxseSBpbmRpY2F0ZSBhIHByb2dyYW1tZXIgbWlzdGFrZSBkdXJpbmcgZGV2ZWxvcG1lbnQsXG4vLyB3YXJuIGFib3V0IHRoZW0gQVNBUCByYXRoZXIgdGhhbiBzd2FsbG93aW5nIHRoZW0gYnkgZGVmYXVsdC5cbnZhciByZXJyb3JOYW1lcyA9IC9eKEV2YWx8SW50ZXJuYWx8UmFuZ2V8UmVmZXJlbmNlfFN5bnRheHxUeXBlfFVSSSlFcnJvciQvO1xuXG5qUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayA9IGZ1bmN0aW9uKCBlcnJvciwgc3RhY2sgKSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgOCAtIDkgb25seVxuXHQvLyBDb25zb2xlIGV4aXN0cyB3aGVuIGRldiB0b29scyBhcmUgb3Blbiwgd2hpY2ggY2FuIGhhcHBlbiBhdCBhbnkgdGltZVxuXHRpZiAoIHdpbmRvdy5jb25zb2xlICYmIHdpbmRvdy5jb25zb2xlLndhcm4gJiYgZXJyb3IgJiYgcmVycm9yTmFtZXMudGVzdCggZXJyb3IubmFtZSApICkge1xuXHRcdHdpbmRvdy5jb25zb2xlLndhcm4oIFwialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjogXCIgKyBlcnJvci5tZXNzYWdlLCBlcnJvci5zdGFjaywgc3RhY2sgKTtcblx0fVxufTtcblxuXG5cblxualF1ZXJ5LnJlYWR5RXhjZXB0aW9uID0gZnVuY3Rpb24oIGVycm9yICkge1xuXHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0dGhyb3cgZXJyb3I7XG5cdH0gKTtcbn07XG5cblxuXG5cbi8vIFRoZSBkZWZlcnJlZCB1c2VkIG9uIERPTSByZWFkeVxudmFyIHJlYWR5TGlzdCA9IGpRdWVyeS5EZWZlcnJlZCgpO1xuXG5qUXVlcnkuZm4ucmVhZHkgPSBmdW5jdGlvbiggZm4gKSB7XG5cblx0cmVhZHlMaXN0XG5cdFx0LnRoZW4oIGZuIClcblxuXHRcdC8vIFdyYXAgalF1ZXJ5LnJlYWR5RXhjZXB0aW9uIGluIGEgZnVuY3Rpb24gc28gdGhhdCB0aGUgbG9va3VwXG5cdFx0Ly8gaGFwcGVucyBhdCB0aGUgdGltZSBvZiBlcnJvciBoYW5kbGluZyBpbnN0ZWFkIG9mIGNhbGxiYWNrXG5cdFx0Ly8gcmVnaXN0cmF0aW9uLlxuXHRcdC5jYXRjaCggZnVuY3Rpb24oIGVycm9yICkge1xuXHRcdFx0alF1ZXJ5LnJlYWR5RXhjZXB0aW9uKCBlcnJvciApO1xuXHRcdH0gKTtcblxuXHRyZXR1cm4gdGhpcztcbn07XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBJcyB0aGUgRE9NIHJlYWR5IHRvIGJlIHVzZWQ/IFNldCB0byB0cnVlIG9uY2UgaXQgb2NjdXJzLlxuXHRpc1JlYWR5OiBmYWxzZSxcblxuXHQvLyBBIGNvdW50ZXIgdG8gdHJhY2sgaG93IG1hbnkgaXRlbXMgdG8gd2FpdCBmb3IgYmVmb3JlXG5cdC8vIHRoZSByZWFkeSBldmVudCBmaXJlcy4gU2VlICM2NzgxXG5cdHJlYWR5V2FpdDogMSxcblxuXHQvLyBIYW5kbGUgd2hlbiB0aGUgRE9NIGlzIHJlYWR5XG5cdHJlYWR5OiBmdW5jdGlvbiggd2FpdCApIHtcblxuXHRcdC8vIEFib3J0IGlmIHRoZXJlIGFyZSBwZW5kaW5nIGhvbGRzIG9yIHdlJ3JlIGFscmVhZHkgcmVhZHlcblx0XHRpZiAoIHdhaXQgPT09IHRydWUgPyAtLWpRdWVyeS5yZWFkeVdhaXQgOiBqUXVlcnkuaXNSZWFkeSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZW1lbWJlciB0aGF0IHRoZSBET00gaXMgcmVhZHlcblx0XHRqUXVlcnkuaXNSZWFkeSA9IHRydWU7XG5cblx0XHQvLyBJZiBhIG5vcm1hbCBET00gUmVhZHkgZXZlbnQgZmlyZWQsIGRlY3JlbWVudCwgYW5kIHdhaXQgaWYgbmVlZCBiZVxuXHRcdGlmICggd2FpdCAhPT0gdHJ1ZSAmJiAtLWpRdWVyeS5yZWFkeVdhaXQgPiAwICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIElmIHRoZXJlIGFyZSBmdW5jdGlvbnMgYm91bmQsIHRvIGV4ZWN1dGVcblx0XHRyZWFkeUxpc3QucmVzb2x2ZVdpdGgoIGRvY3VtZW50LCBbIGpRdWVyeSBdICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LnJlYWR5LnRoZW4gPSByZWFkeUxpc3QudGhlbjtcblxuLy8gVGhlIHJlYWR5IGV2ZW50IGhhbmRsZXIgYW5kIHNlbGYgY2xlYW51cCBtZXRob2RcbmZ1bmN0aW9uIGNvbXBsZXRlZCgpIHtcblx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggXCJET01Db250ZW50TG9hZGVkXCIsIGNvbXBsZXRlZCApO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciggXCJsb2FkXCIsIGNvbXBsZXRlZCApO1xuXHRqUXVlcnkucmVhZHkoKTtcbn1cblxuLy8gQ2F0Y2ggY2FzZXMgd2hlcmUgJChkb2N1bWVudCkucmVhZHkoKSBpcyBjYWxsZWRcbi8vIGFmdGVyIHRoZSBicm93c2VyIGV2ZW50IGhhcyBhbHJlYWR5IG9jY3VycmVkLlxuLy8gU3VwcG9ydDogSUUgPD05IC0gMTAgb25seVxuLy8gT2xkZXIgSUUgc29tZXRpbWVzIHNpZ25hbHMgXCJpbnRlcmFjdGl2ZVwiIHRvbyBzb29uXG5pZiAoIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIiB8fFxuXHQoIGRvY3VtZW50LnJlYWR5U3RhdGUgIT09IFwibG9hZGluZ1wiICYmICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwgKSApIHtcblxuXHQvLyBIYW5kbGUgaXQgYXN5bmNocm9ub3VzbHkgdG8gYWxsb3cgc2NyaXB0cyB0aGUgb3Bwb3J0dW5pdHkgdG8gZGVsYXkgcmVhZHlcblx0d2luZG93LnNldFRpbWVvdXQoIGpRdWVyeS5yZWFkeSApO1xuXG59IGVsc2Uge1xuXG5cdC8vIFVzZSB0aGUgaGFuZHkgZXZlbnQgY2FsbGJhY2tcblx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggXCJET01Db250ZW50TG9hZGVkXCIsIGNvbXBsZXRlZCApO1xuXG5cdC8vIEEgZmFsbGJhY2sgdG8gd2luZG93Lm9ubG9hZCwgdGhhdCB3aWxsIGFsd2F5cyB3b3JrXG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkICk7XG59XG5cblxuXG5cbi8vIE11bHRpZnVuY3Rpb25hbCBtZXRob2QgdG8gZ2V0IGFuZCBzZXQgdmFsdWVzIG9mIGEgY29sbGVjdGlvblxuLy8gVGhlIHZhbHVlL3MgY2FuIG9wdGlvbmFsbHkgYmUgZXhlY3V0ZWQgaWYgaXQncyBhIGZ1bmN0aW9uXG52YXIgYWNjZXNzID0gZnVuY3Rpb24oIGVsZW1zLCBmbiwga2V5LCB2YWx1ZSwgY2hhaW5hYmxlLCBlbXB0eUdldCwgcmF3ICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gZWxlbXMubGVuZ3RoLFxuXHRcdGJ1bGsgPSBrZXkgPT0gbnVsbDtcblxuXHQvLyBTZXRzIG1hbnkgdmFsdWVzXG5cdGlmICggdG9UeXBlKCBrZXkgKSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xuXHRcdGZvciAoIGkgaW4ga2V5ICkge1xuXHRcdFx0YWNjZXNzKCBlbGVtcywgZm4sIGksIGtleVsgaSBdLCB0cnVlLCBlbXB0eUdldCwgcmF3ICk7XG5cdFx0fVxuXG5cdC8vIFNldHMgb25lIHZhbHVlXG5cdH0gZWxzZSBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcblxuXHRcdGlmICggIWlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyYXcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICggYnVsayApIHtcblxuXHRcdFx0Ly8gQnVsayBvcGVyYXRpb25zIHJ1biBhZ2FpbnN0IHRoZSBlbnRpcmUgc2V0XG5cdFx0XHRpZiAoIHJhdyApIHtcblx0XHRcdFx0Zm4uY2FsbCggZWxlbXMsIHZhbHVlICk7XG5cdFx0XHRcdGZuID0gbnVsbDtcblxuXHRcdFx0Ly8gLi4uZXhjZXB0IHdoZW4gZXhlY3V0aW5nIGZ1bmN0aW9uIHZhbHVlc1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YnVsayA9IGZuO1xuXHRcdFx0XHRmbiA9IGZ1bmN0aW9uKCBlbGVtLCBrZXksIHZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiBidWxrLmNhbGwoIGpRdWVyeSggZWxlbSApLCB2YWx1ZSApO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggZm4gKSB7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0Zm4oXG5cdFx0XHRcdFx0ZWxlbXNbIGkgXSwga2V5LCByYXcgP1xuXHRcdFx0XHRcdHZhbHVlIDpcblx0XHRcdFx0XHR2YWx1ZS5jYWxsKCBlbGVtc1sgaSBdLCBpLCBmbiggZWxlbXNbIGkgXSwga2V5ICkgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmICggY2hhaW5hYmxlICkge1xuXHRcdHJldHVybiBlbGVtcztcblx0fVxuXG5cdC8vIEdldHNcblx0aWYgKCBidWxrICkge1xuXHRcdHJldHVybiBmbi5jYWxsKCBlbGVtcyApO1xuXHR9XG5cblx0cmV0dXJuIGxlbiA/IGZuKCBlbGVtc1sgMCBdLCBrZXkgKSA6IGVtcHR5R2V0O1xufTtcblxuXG4vLyBNYXRjaGVzIGRhc2hlZCBzdHJpbmcgZm9yIGNhbWVsaXppbmdcbnZhciBybXNQcmVmaXggPSAvXi1tcy0vLFxuXHRyZGFzaEFscGhhID0gLy0oW2Etel0pL2c7XG5cbi8vIFVzZWQgYnkgY2FtZWxDYXNlIGFzIGNhbGxiYWNrIHRvIHJlcGxhY2UoKVxuZnVuY3Rpb24gZmNhbWVsQ2FzZSggYWxsLCBsZXR0ZXIgKSB7XG5cdHJldHVybiBsZXR0ZXIudG9VcHBlckNhc2UoKTtcbn1cblxuLy8gQ29udmVydCBkYXNoZWQgdG8gY2FtZWxDYXNlOyB1c2VkIGJ5IHRoZSBjc3MgYW5kIGRhdGEgbW9kdWxlc1xuLy8gU3VwcG9ydDogSUUgPD05IC0gMTEsIEVkZ2UgMTIgLSAxNVxuLy8gTWljcm9zb2Z0IGZvcmdvdCB0byBodW1wIHRoZWlyIHZlbmRvciBwcmVmaXggKCM5NTcyKVxuZnVuY3Rpb24gY2FtZWxDYXNlKCBzdHJpbmcgKSB7XG5cdHJldHVybiBzdHJpbmcucmVwbGFjZSggcm1zUHJlZml4LCBcIm1zLVwiICkucmVwbGFjZSggcmRhc2hBbHBoYSwgZmNhbWVsQ2FzZSApO1xufVxudmFyIGFjY2VwdERhdGEgPSBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0Ly8gQWNjZXB0cyBvbmx5OlxuXHQvLyAgLSBOb2RlXG5cdC8vICAgIC0gTm9kZS5FTEVNRU5UX05PREVcblx0Ly8gICAgLSBOb2RlLkRPQ1VNRU5UX05PREVcblx0Ly8gIC0gT2JqZWN0XG5cdC8vICAgIC0gQW55XG5cdHJldHVybiBvd25lci5ub2RlVHlwZSA9PT0gMSB8fCBvd25lci5ub2RlVHlwZSA9PT0gOSB8fCAhKCArb3duZXIubm9kZVR5cGUgKTtcbn07XG5cblxuXG5cbmZ1bmN0aW9uIERhdGEoKSB7XG5cdHRoaXMuZXhwYW5kbyA9IGpRdWVyeS5leHBhbmRvICsgRGF0YS51aWQrKztcbn1cblxuRGF0YS51aWQgPSAxO1xuXG5EYXRhLnByb3RvdHlwZSA9IHtcblxuXHRjYWNoZTogZnVuY3Rpb24oIG93bmVyICkge1xuXG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIG93bmVyIG9iamVjdCBhbHJlYWR5IGhhcyBhIGNhY2hlXG5cdFx0dmFyIHZhbHVlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXG5cdFx0Ly8gSWYgbm90LCBjcmVhdGUgb25lXG5cdFx0aWYgKCAhdmFsdWUgKSB7XG5cdFx0XHR2YWx1ZSA9IHt9O1xuXG5cdFx0XHQvLyBXZSBjYW4gYWNjZXB0IGRhdGEgZm9yIG5vbi1lbGVtZW50IG5vZGVzIGluIG1vZGVybiBicm93c2Vycyxcblx0XHRcdC8vIGJ1dCB3ZSBzaG91bGQgbm90LCBzZWUgIzgzMzUuXG5cdFx0XHQvLyBBbHdheXMgcmV0dXJuIGFuIGVtcHR5IG9iamVjdC5cblx0XHRcdGlmICggYWNjZXB0RGF0YSggb3duZXIgKSApIHtcblxuXHRcdFx0XHQvLyBJZiBpdCBpcyBhIG5vZGUgdW5saWtlbHkgdG8gYmUgc3RyaW5naWZ5LWVkIG9yIGxvb3BlZCBvdmVyXG5cdFx0XHRcdC8vIHVzZSBwbGFpbiBhc3NpZ25tZW50XG5cdFx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdmFsdWU7XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIHNlY3VyZSBpdCBpbiBhIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5XG5cdFx0XHRcdC8vIGNvbmZpZ3VyYWJsZSBtdXN0IGJlIHRydWUgdG8gYWxsb3cgdGhlIHByb3BlcnR5IHRvIGJlXG5cdFx0XHRcdC8vIGRlbGV0ZWQgd2hlbiBkYXRhIGlzIHJlbW92ZWRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIG93bmVyLCB0aGlzLmV4cGFuZG8sIHtcblx0XHRcdFx0XHRcdHZhbHVlOiB2YWx1ZSxcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZVxuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB2YWx1ZTtcblx0fSxcblx0c2V0OiBmdW5jdGlvbiggb3duZXIsIGRhdGEsIHZhbHVlICkge1xuXHRcdHZhciBwcm9wLFxuXHRcdFx0Y2FjaGUgPSB0aGlzLmNhY2hlKCBvd25lciApO1xuXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCBrZXksIHZhbHVlIF0gYXJnc1xuXHRcdC8vIEFsd2F5cyB1c2UgY2FtZWxDYXNlIGtleSAoZ2gtMjI1Nylcblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0Y2FjaGVbIGNhbWVsQ2FzZSggZGF0YSApIF0gPSB2YWx1ZTtcblxuXHRcdC8vIEhhbmRsZTogWyBvd25lciwgeyBwcm9wZXJ0aWVzIH0gXSBhcmdzXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gQ29weSB0aGUgcHJvcGVydGllcyBvbmUtYnktb25lIHRvIHRoZSBjYWNoZSBvYmplY3Rcblx0XHRcdGZvciAoIHByb3AgaW4gZGF0YSApIHtcblx0XHRcdFx0Y2FjaGVbIGNhbWVsQ2FzZSggcHJvcCApIF0gPSBkYXRhWyBwcm9wIF07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBjYWNoZTtcblx0fSxcblx0Z2V0OiBmdW5jdGlvbiggb3duZXIsIGtleSApIHtcblx0XHRyZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgP1xuXHRcdFx0dGhpcy5jYWNoZSggb3duZXIgKSA6XG5cblx0XHRcdC8vIEFsd2F5cyB1c2UgY2FtZWxDYXNlIGtleSAoZ2gtMjI1Nylcblx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSAmJiBvd25lclsgdGhpcy5leHBhbmRvIF1bIGNhbWVsQ2FzZSgga2V5ICkgXTtcblx0fSxcblx0YWNjZXNzOiBmdW5jdGlvbiggb3duZXIsIGtleSwgdmFsdWUgKSB7XG5cblx0XHQvLyBJbiBjYXNlcyB3aGVyZSBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIE5vIGtleSB3YXMgc3BlY2lmaWVkXG5cdFx0Ly8gICAyLiBBIHN0cmluZyBrZXkgd2FzIHNwZWNpZmllZCwgYnV0IG5vIHZhbHVlIHByb3ZpZGVkXG5cdFx0Ly9cblx0XHQvLyBUYWtlIHRoZSBcInJlYWRcIiBwYXRoIGFuZCBhbGxvdyB0aGUgZ2V0IG1ldGhvZCB0byBkZXRlcm1pbmVcblx0XHQvLyB3aGljaCB2YWx1ZSB0byByZXR1cm4sIHJlc3BlY3RpdmVseSBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIFRoZSBlbnRpcmUgY2FjaGUgb2JqZWN0XG5cdFx0Ly8gICAyLiBUaGUgZGF0YSBzdG9yZWQgYXQgdGhlIGtleVxuXHRcdC8vXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHQoICgga2V5ICYmIHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIgKSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgKSB7XG5cblx0XHRcdHJldHVybiB0aGlzLmdldCggb3duZXIsIGtleSApO1xuXHRcdH1cblxuXHRcdC8vIFdoZW4gdGhlIGtleSBpcyBub3QgYSBzdHJpbmcsIG9yIGJvdGggYSBrZXkgYW5kIHZhbHVlXG5cdFx0Ly8gYXJlIHNwZWNpZmllZCwgc2V0IG9yIGV4dGVuZCAoZXhpc3Rpbmcgb2JqZWN0cykgd2l0aCBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIEFuIG9iamVjdCBvZiBwcm9wZXJ0aWVzXG5cdFx0Ly8gICAyLiBBIGtleSBhbmQgdmFsdWVcblx0XHQvL1xuXHRcdHRoaXMuc2V0KCBvd25lciwga2V5LCB2YWx1ZSApO1xuXG5cdFx0Ly8gU2luY2UgdGhlIFwic2V0XCIgcGF0aCBjYW4gaGF2ZSB0d28gcG9zc2libGUgZW50cnkgcG9pbnRzXG5cdFx0Ly8gcmV0dXJuIHRoZSBleHBlY3RlZCBkYXRhIGJhc2VkIG9uIHdoaWNoIHBhdGggd2FzIHRha2VuWypdXG5cdFx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IGtleTtcblx0fSxcblx0cmVtb3ZlOiBmdW5jdGlvbiggb3duZXIsIGtleSApIHtcblx0XHR2YXIgaSxcblx0XHRcdGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXG5cdFx0aWYgKCBjYWNoZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICgga2V5ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQgYXJyYXkgb3Igc3BhY2Ugc2VwYXJhdGVkIHN0cmluZyBvZiBrZXlzXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIGtleSApICkge1xuXG5cdFx0XHRcdC8vIElmIGtleSBpcyBhbiBhcnJheSBvZiBrZXlzLi4uXG5cdFx0XHRcdC8vIFdlIGFsd2F5cyBzZXQgY2FtZWxDYXNlIGtleXMsIHNvIHJlbW92ZSB0aGF0LlxuXHRcdFx0XHRrZXkgPSBrZXkubWFwKCBjYW1lbENhc2UgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGtleSA9IGNhbWVsQ2FzZSgga2V5ICk7XG5cblx0XHRcdFx0Ly8gSWYgYSBrZXkgd2l0aCB0aGUgc3BhY2VzIGV4aXN0cywgdXNlIGl0LlxuXHRcdFx0XHQvLyBPdGhlcndpc2UsIGNyZWF0ZSBhbiBhcnJheSBieSBtYXRjaGluZyBub24td2hpdGVzcGFjZVxuXHRcdFx0XHRrZXkgPSBrZXkgaW4gY2FjaGUgP1xuXHRcdFx0XHRcdFsga2V5IF0gOlxuXHRcdFx0XHRcdCgga2V5Lm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW10gKTtcblx0XHRcdH1cblxuXHRcdFx0aSA9IGtleS5sZW5ndGg7XG5cblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRkZWxldGUgY2FjaGVbIGtleVsgaSBdIF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIHRoZSBleHBhbmRvIGlmIHRoZXJlJ3Mgbm8gbW9yZSBkYXRhXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fCBqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKSApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NVxuXHRcdFx0Ly8gV2Via2l0ICYgQmxpbmsgcGVyZm9ybWFuY2Ugc3VmZmVycyB3aGVuIGRlbGV0aW5nIHByb3BlcnRpZXNcblx0XHRcdC8vIGZyb20gRE9NIG5vZGVzLCBzbyBzZXQgdG8gdW5kZWZpbmVkIGluc3RlYWRcblx0XHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM3ODYwNyAoYnVnIHJlc3RyaWN0ZWQpXG5cdFx0XHRpZiAoIG93bmVyLm5vZGVUeXBlICkge1xuXHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWxldGUgb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0aGFzRGF0YTogZnVuY3Rpb24oIG93bmVyICkge1xuXHRcdHZhciBjYWNoZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblx0XHRyZXR1cm4gY2FjaGUgIT09IHVuZGVmaW5lZCAmJiAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICk7XG5cdH1cbn07XG52YXIgZGF0YVByaXYgPSBuZXcgRGF0YSgpO1xuXG52YXIgZGF0YVVzZXIgPSBuZXcgRGF0YSgpO1xuXG5cblxuLy9cdEltcGxlbWVudGF0aW9uIFN1bW1hcnlcbi8vXG4vL1x0MS4gRW5mb3JjZSBBUEkgc3VyZmFjZSBhbmQgc2VtYW50aWMgY29tcGF0aWJpbGl0eSB3aXRoIDEuOS54IGJyYW5jaFxuLy9cdDIuIEltcHJvdmUgdGhlIG1vZHVsZSdzIG1haW50YWluYWJpbGl0eSBieSByZWR1Y2luZyB0aGUgc3RvcmFnZVxuLy9cdFx0cGF0aHMgdG8gYSBzaW5nbGUgbWVjaGFuaXNtLlxuLy9cdDMuIFVzZSB0aGUgc2FtZSBzaW5nbGUgbWVjaGFuaXNtIHRvIHN1cHBvcnQgXCJwcml2YXRlXCIgYW5kIFwidXNlclwiIGRhdGEuXG4vL1x0NC4gX05ldmVyXyBleHBvc2UgXCJwcml2YXRlXCIgZGF0YSB0byB1c2VyIGNvZGUgKFRPRE86IERyb3AgX2RhdGEsIF9yZW1vdmVEYXRhKVxuLy9cdDUuIEF2b2lkIGV4cG9zaW5nIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb24gdXNlciBvYmplY3RzIChlZy4gZXhwYW5kbyBwcm9wZXJ0aWVzKVxuLy9cdDYuIFByb3ZpZGUgYSBjbGVhciBwYXRoIGZvciBpbXBsZW1lbnRhdGlvbiB1cGdyYWRlIHRvIFdlYWtNYXAgaW4gMjAxNFxuXG52YXIgcmJyYWNlID0gL14oPzpcXHtbXFx3XFxXXSpcXH18XFxbW1xcd1xcV10qXFxdKSQvLFxuXHRybXVsdGlEYXNoID0gL1tBLVpdL2c7XG5cbmZ1bmN0aW9uIGdldERhdGEoIGRhdGEgKSB7XG5cdGlmICggZGF0YSA9PT0gXCJ0cnVlXCIgKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRpZiAoIGRhdGEgPT09IFwiZmFsc2VcIiApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRpZiAoIGRhdGEgPT09IFwibnVsbFwiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gT25seSBjb252ZXJ0IHRvIGEgbnVtYmVyIGlmIGl0IGRvZXNuJ3QgY2hhbmdlIHRoZSBzdHJpbmdcblx0aWYgKCBkYXRhID09PSArZGF0YSArIFwiXCIgKSB7XG5cdFx0cmV0dXJuICtkYXRhO1xuXHR9XG5cblx0aWYgKCByYnJhY2UudGVzdCggZGF0YSApICkge1xuXHRcdHJldHVybiBKU09OLnBhcnNlKCBkYXRhICk7XG5cdH1cblxuXHRyZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gZGF0YUF0dHIoIGVsZW0sIGtleSwgZGF0YSApIHtcblx0dmFyIG5hbWU7XG5cblx0Ly8gSWYgbm90aGluZyB3YXMgZm91bmQgaW50ZXJuYWxseSwgdHJ5IHRvIGZldGNoIGFueVxuXHQvLyBkYXRhIGZyb20gdGhlIEhUTUw1IGRhdGEtKiBhdHRyaWJ1dGVcblx0aWYgKCBkYXRhID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRuYW1lID0gXCJkYXRhLVwiICsga2V5LnJlcGxhY2UoIHJtdWx0aURhc2gsIFwiLSQmXCIgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdGRhdGEgPSBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApO1xuXG5cdFx0aWYgKCB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGRhdGEgPSBnZXREYXRhKCBkYXRhICk7XG5cdFx0XHR9IGNhdGNoICggZSApIHt9XG5cblx0XHRcdC8vIE1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGRhdGEgc28gaXQgaXNuJ3QgY2hhbmdlZCBsYXRlclxuXHRcdFx0ZGF0YVVzZXIuc2V0KCBlbGVtLCBrZXksIGRhdGEgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGRhdGE7XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0aGFzRGF0YTogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRhdGFVc2VyLmhhc0RhdGEoIGVsZW0gKSB8fCBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICk7XG5cdH0sXG5cblx0ZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIGRhdGFVc2VyLmFjY2VzcyggZWxlbSwgbmFtZSwgZGF0YSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFVc2VyLnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9LFxuXG5cdC8vIFRPRE86IE5vdyB0aGF0IGFsbCBjYWxscyB0byBfZGF0YSBhbmQgX3JlbW92ZURhdGEgaGF2ZSBiZWVuIHJlcGxhY2VkXG5cdC8vIHdpdGggZGlyZWN0IGNhbGxzIHRvIGRhdGFQcml2IG1ldGhvZHMsIHRoZXNlIGNhbiBiZSBkZXByZWNhdGVkLlxuXHRfZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmFjY2VzcyggZWxlbSwgbmFtZSwgZGF0YSApO1xuXHR9LFxuXG5cdF9yZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIG5hbWUgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGRhdGE6IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXHRcdHZhciBpLCBuYW1lLCBkYXRhLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdGF0dHJzID0gZWxlbSAmJiBlbGVtLmF0dHJpYnV0ZXM7XG5cblx0XHQvLyBHZXRzIGFsbCB2YWx1ZXNcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB0aGlzLmxlbmd0aCApIHtcblx0XHRcdFx0ZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSApO1xuXG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAhZGF0YVByaXYuZ2V0KCBlbGVtLCBcImhhc0RhdGFBdHRyc1wiICkgKSB7XG5cdFx0XHRcdFx0aSA9IGF0dHJzLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgMTEgb25seVxuXHRcdFx0XHRcdFx0Ly8gVGhlIGF0dHJzIGVsZW1lbnRzIGNhbiBiZSBudWxsICgjMTQ4OTQpXG5cdFx0XHRcdFx0XHRpZiAoIGF0dHJzWyBpIF0gKSB7XG5cdFx0XHRcdFx0XHRcdG5hbWUgPSBhdHRyc1sgaSBdLm5hbWU7XG5cdFx0XHRcdFx0XHRcdGlmICggbmFtZS5pbmRleE9mKCBcImRhdGEtXCIgKSA9PT0gMCApIHtcblx0XHRcdFx0XHRcdFx0XHRuYW1lID0gY2FtZWxDYXNlKCBuYW1lLnNsaWNlKCA1ICkgKTtcblx0XHRcdFx0XHRcdFx0XHRkYXRhQXR0ciggZWxlbSwgbmFtZSwgZGF0YVsgbmFtZSBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCBlbGVtLCBcImhhc0RhdGFBdHRyc1wiLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0cyBtdWx0aXBsZSB2YWx1ZXNcblx0XHRpZiAoIHR5cGVvZiBrZXkgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGF0YVVzZXIuc2V0KCB0aGlzLCBrZXkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgZGF0YTtcblxuXHRcdFx0Ly8gVGhlIGNhbGxpbmcgalF1ZXJ5IG9iamVjdCAoZWxlbWVudCBtYXRjaGVzKSBpcyBub3QgZW1wdHlcblx0XHRcdC8vIChhbmQgdGhlcmVmb3JlIGhhcyBhbiBlbGVtZW50IGFwcGVhcnMgYXQgdGhpc1sgMCBdKSBhbmQgdGhlXG5cdFx0XHQvLyBgdmFsdWVgIHBhcmFtZXRlciB3YXMgbm90IHVuZGVmaW5lZC4gQW4gZW1wdHkgalF1ZXJ5IG9iamVjdFxuXHRcdFx0Ly8gd2lsbCByZXN1bHQgaW4gYHVuZGVmaW5lZGAgZm9yIGVsZW0gPSB0aGlzWyAwIF0gd2hpY2ggd2lsbFxuXHRcdFx0Ly8gdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFuIGF0dGVtcHQgdG8gcmVhZCBhIGRhdGEgY2FjaGUgaXMgbWFkZS5cblx0XHRcdGlmICggZWxlbSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdC8vIEF0dGVtcHQgdG8gZ2V0IGRhdGEgZnJvbSB0aGUgY2FjaGVcblx0XHRcdFx0Ly8gVGhlIGtleSB3aWxsIGFsd2F5cyBiZSBjYW1lbENhc2VkIGluIERhdGFcblx0XHRcdFx0ZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSwga2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBcImRpc2NvdmVyXCIgdGhlIGRhdGEgaW5cblx0XHRcdFx0Ly8gSFRNTDUgY3VzdG9tIGRhdGEtKiBhdHRyc1xuXHRcdFx0XHRkYXRhID0gZGF0YUF0dHIoIGVsZW0sIGtleSApO1xuXHRcdFx0XHRpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gZGF0YTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFdlIHRyaWVkIHJlYWxseSBoYXJkLCBidXQgdGhlIGRhdGEgZG9lc24ndCBleGlzdC5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXQgdGhlIGRhdGEuLi5cblx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHN0b3JlIHRoZSBjYW1lbENhc2VkIGtleVxuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSwgdmFsdWUgKTtcblx0XHRcdH0gKTtcblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEsIG51bGwsIHRydWUgKTtcblx0fSxcblxuXHRyZW1vdmVEYXRhOiBmdW5jdGlvbigga2V5ICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0ZGF0YVVzZXIucmVtb3ZlKCB0aGlzLCBrZXkgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgcXVldWU7XG5cblx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHR0eXBlID0gKCB0eXBlIHx8IFwiZnhcIiApICsgXCJxdWV1ZVwiO1xuXHRcdFx0cXVldWUgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIHR5cGUgKTtcblxuXHRcdFx0Ly8gU3BlZWQgdXAgZGVxdWV1ZSBieSBnZXR0aW5nIG91dCBxdWlja2x5IGlmIHRoaXMgaXMganVzdCBhIGxvb2t1cFxuXHRcdFx0aWYgKCBkYXRhICkge1xuXHRcdFx0XHRpZiAoICFxdWV1ZSB8fCBBcnJheS5pc0FycmF5KCBkYXRhICkgKSB7XG5cdFx0XHRcdFx0cXVldWUgPSBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIHR5cGUsIGpRdWVyeS5tYWtlQXJyYXkoIGRhdGEgKSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHF1ZXVlLnB1c2goIGRhdGEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHF1ZXVlIHx8IFtdO1xuXHRcdH1cblx0fSxcblxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHtcblx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0XHR2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIGVsZW0sIHR5cGUgKSxcblx0XHRcdHN0YXJ0TGVuZ3RoID0gcXVldWUubGVuZ3RoLFxuXHRcdFx0Zm4gPSBxdWV1ZS5zaGlmdCgpLFxuXHRcdFx0aG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIHR5cGUgKSxcblx0XHRcdG5leHQgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIGVsZW0sIHR5cGUgKTtcblx0XHRcdH07XG5cblx0XHQvLyBJZiB0aGUgZnggcXVldWUgaXMgZGVxdWV1ZWQsIGFsd2F5cyByZW1vdmUgdGhlIHByb2dyZXNzIHNlbnRpbmVsXG5cdFx0aWYgKCBmbiA9PT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCk7XG5cdFx0XHRzdGFydExlbmd0aC0tO1xuXHRcdH1cblxuXHRcdGlmICggZm4gKSB7XG5cblx0XHRcdC8vIEFkZCBhIHByb2dyZXNzIHNlbnRpbmVsIHRvIHByZXZlbnQgdGhlIGZ4IHF1ZXVlIGZyb20gYmVpbmdcblx0XHRcdC8vIGF1dG9tYXRpY2FsbHkgZGVxdWV1ZWRcblx0XHRcdGlmICggdHlwZSA9PT0gXCJmeFwiICkge1xuXHRcdFx0XHRxdWV1ZS51bnNoaWZ0KCBcImlucHJvZ3Jlc3NcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDbGVhciB1cCB0aGUgbGFzdCBxdWV1ZSBzdG9wIGZ1bmN0aW9uXG5cdFx0XHRkZWxldGUgaG9va3Muc3RvcDtcblx0XHRcdGZuLmNhbGwoIGVsZW0sIG5leHQsIGhvb2tzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhc3RhcnRMZW5ndGggJiYgaG9va3MgKSB7XG5cdFx0XHRob29rcy5lbXB0eS5maXJlKCk7XG5cdFx0fVxuXHR9LFxuXG5cdC8vIE5vdCBwdWJsaWMgLSBnZW5lcmF0ZSBhIHF1ZXVlSG9va3Mgb2JqZWN0LCBvciByZXR1cm4gdGhlIGN1cnJlbnQgb25lXG5cdF9xdWV1ZUhvb2tzOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHtcblx0XHR2YXIga2V5ID0gdHlwZSArIFwicXVldWVIb29rc1wiO1xuXHRcdHJldHVybiBkYXRhUHJpdi5nZXQoIGVsZW0sIGtleSApIHx8IGRhdGFQcml2LmFjY2VzcyggZWxlbSwga2V5LCB7XG5cdFx0XHRlbXB0eTogalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICkuYWRkKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBbIHR5cGUgKyBcInF1ZXVlXCIsIGtleSBdICk7XG5cdFx0XHR9IClcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRxdWV1ZTogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIHNldHRlciA9IDI7XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZGF0YSA9IHR5cGU7XG5cdFx0XHR0eXBlID0gXCJmeFwiO1xuXHRcdFx0c2V0dGVyLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoIDwgc2V0dGVyICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5xdWV1ZSggdGhpc1sgMCBdLCB0eXBlICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRhdGEgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzIDpcblx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgZGF0YSApO1xuXG5cdFx0XHRcdC8vIEVuc3VyZSBhIGhvb2tzIGZvciB0aGlzIHF1ZXVlXG5cdFx0XHRcdGpRdWVyeS5fcXVldWVIb29rcyggdGhpcywgdHlwZSApO1xuXG5cdFx0XHRcdGlmICggdHlwZSA9PT0gXCJmeFwiICYmIHF1ZXVlWyAwIF0gIT09IFwiaW5wcm9ncmVzc1wiICkge1xuXHRcdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0fSxcblx0ZGVxdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdH0gKTtcblx0fSxcblx0Y2xlYXJRdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xuXHR9LFxuXG5cdC8vIEdldCBhIHByb21pc2UgcmVzb2x2ZWQgd2hlbiBxdWV1ZXMgb2YgYSBjZXJ0YWluIHR5cGVcblx0Ly8gYXJlIGVtcHRpZWQgKGZ4IGlzIHRoZSB0eXBlIGJ5IGRlZmF1bHQpXG5cdHByb21pc2U6IGZ1bmN0aW9uKCB0eXBlLCBvYmogKSB7XG5cdFx0dmFyIHRtcCxcblx0XHRcdGNvdW50ID0gMSxcblx0XHRcdGRlZmVyID0galF1ZXJ5LkRlZmVycmVkKCksXG5cdFx0XHRlbGVtZW50cyA9IHRoaXMsXG5cdFx0XHRpID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRyZXNvbHZlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggISggLS1jb3VudCApICkge1xuXHRcdFx0XHRcdGRlZmVyLnJlc29sdmVXaXRoKCBlbGVtZW50cywgWyBlbGVtZW50cyBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0b2JqID0gdHlwZTtcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0dG1wID0gZGF0YVByaXYuZ2V0KCBlbGVtZW50c1sgaSBdLCB0eXBlICsgXCJxdWV1ZUhvb2tzXCIgKTtcblx0XHRcdGlmICggdG1wICYmIHRtcC5lbXB0eSApIHtcblx0XHRcdFx0Y291bnQrKztcblx0XHRcdFx0dG1wLmVtcHR5LmFkZCggcmVzb2x2ZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXNvbHZlKCk7XG5cdFx0cmV0dXJuIGRlZmVyLnByb21pc2UoIG9iaiApO1xuXHR9XG59ICk7XG52YXIgcG51bSA9ICggL1srLV0/KD86XFxkKlxcLnwpXFxkKyg/OltlRV1bKy1dP1xcZCt8KS8gKS5zb3VyY2U7XG5cbnZhciByY3NzTnVtID0gbmV3IFJlZ0V4cCggXCJeKD86KFsrLV0pPXwpKFwiICsgcG51bSArIFwiKShbYS16JV0qKSRcIiwgXCJpXCIgKTtcblxuXG52YXIgY3NzRXhwYW5kID0gWyBcIlRvcFwiLCBcIlJpZ2h0XCIsIFwiQm90dG9tXCIsIFwiTGVmdFwiIF07XG5cbnZhciBkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cblxuXG5cdHZhciBpc0F0dGFjaGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKTtcblx0XHR9LFxuXHRcdGNvbXBvc2VkID0geyBjb21wb3NlZDogdHJ1ZSB9O1xuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTIgLSAxOCssIGlPUyAxMC4wIC0gMTAuMiBvbmx5XG5cdC8vIENoZWNrIGF0dGFjaG1lbnQgYWNyb3NzIHNoYWRvdyBET00gYm91bmRhcmllcyB3aGVuIHBvc3NpYmxlIChnaC0zNTA0KVxuXHQvLyBTdXBwb3J0OiBpT1MgMTAuMC0xMC4yIG9ubHlcblx0Ly8gRWFybHkgaU9TIDEwIHZlcnNpb25zIHN1cHBvcnQgYGF0dGFjaFNoYWRvd2AgYnV0IG5vdCBgZ2V0Um9vdE5vZGVgLFxuXHQvLyBsZWFkaW5nIHRvIGVycm9ycy4gV2UgbmVlZCB0byBjaGVjayBmb3IgYGdldFJvb3ROb2RlYC5cblx0aWYgKCBkb2N1bWVudEVsZW1lbnQuZ2V0Um9vdE5vZGUgKSB7XG5cdFx0aXNBdHRhY2hlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICkgfHxcblx0XHRcdFx0ZWxlbS5nZXRSb290Tm9kZSggY29tcG9zZWQgKSA9PT0gZWxlbS5vd25lckRvY3VtZW50O1xuXHRcdH07XG5cdH1cbnZhciBpc0hpZGRlbldpdGhpblRyZWUgPSBmdW5jdGlvbiggZWxlbSwgZWwgKSB7XG5cblx0XHQvLyBpc0hpZGRlbldpdGhpblRyZWUgbWlnaHQgYmUgY2FsbGVkIGZyb20galF1ZXJ5I2ZpbHRlciBmdW5jdGlvbjtcblx0XHQvLyBpbiB0aGF0IGNhc2UsIGVsZW1lbnQgd2lsbCBiZSBzZWNvbmQgYXJndW1lbnRcblx0XHRlbGVtID0gZWwgfHwgZWxlbTtcblxuXHRcdC8vIElubGluZSBzdHlsZSB0cnVtcHMgYWxsXG5cdFx0cmV0dXJuIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJub25lXCIgfHxcblx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJcIiAmJlxuXG5cdFx0XHQvLyBPdGhlcndpc2UsIGNoZWNrIGNvbXB1dGVkIHN0eWxlXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDMgLSA0NVxuXHRcdFx0Ly8gRGlzY29ubmVjdGVkIGVsZW1lbnRzIGNhbiBoYXZlIGNvbXB1dGVkIGRpc3BsYXk6IG5vbmUsIHNvIGZpcnN0IGNvbmZpcm0gdGhhdCBlbGVtIGlzXG5cdFx0XHQvLyBpbiB0aGUgZG9jdW1lbnQuXG5cdFx0XHRpc0F0dGFjaGVkKCBlbGVtICkgJiZcblxuXHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSA9PT0gXCJub25lXCI7XG5cdH07XG5cbnZhciBzd2FwID0gZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGNhbGxiYWNrLCBhcmdzICkge1xuXHR2YXIgcmV0LCBuYW1lLFxuXHRcdG9sZCA9IHt9O1xuXG5cdC8vIFJlbWVtYmVyIHRoZSBvbGQgdmFsdWVzLCBhbmQgaW5zZXJ0IHRoZSBuZXcgb25lc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0b2xkWyBuYW1lIF0gPSBlbGVtLnN0eWxlWyBuYW1lIF07XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdO1xuXHR9XG5cblx0cmV0ID0gY2FsbGJhY2suYXBwbHkoIGVsZW0sIGFyZ3MgfHwgW10gKTtcblxuXHQvLyBSZXZlcnQgdGhlIG9sZCB2YWx1ZXNcblx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9sZFsgbmFtZSBdO1xuXHR9XG5cblx0cmV0dXJuIHJldDtcbn07XG5cblxuXG5cbmZ1bmN0aW9uIGFkanVzdENTUyggZWxlbSwgcHJvcCwgdmFsdWVQYXJ0cywgdHdlZW4gKSB7XG5cdHZhciBhZGp1c3RlZCwgc2NhbGUsXG5cdFx0bWF4SXRlcmF0aW9ucyA9IDIwLFxuXHRcdGN1cnJlbnRWYWx1ZSA9IHR3ZWVuID9cblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gdHdlZW4uY3VyKCk7XG5cdFx0XHR9IDpcblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4galF1ZXJ5LmNzcyggZWxlbSwgcHJvcCwgXCJcIiApO1xuXHRcdFx0fSxcblx0XHRpbml0aWFsID0gY3VycmVudFZhbHVlKCksXG5cdFx0dW5pdCA9IHZhbHVlUGFydHMgJiYgdmFsdWVQYXJ0c1sgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApLFxuXG5cdFx0Ly8gU3RhcnRpbmcgdmFsdWUgY29tcHV0YXRpb24gaXMgcmVxdWlyZWQgZm9yIHBvdGVudGlhbCB1bml0IG1pc21hdGNoZXNcblx0XHRpbml0aWFsSW5Vbml0ID0gZWxlbS5ub2RlVHlwZSAmJlxuXHRcdFx0KCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gfHwgdW5pdCAhPT0gXCJweFwiICYmICtpbml0aWFsICkgJiZcblx0XHRcdHJjc3NOdW0uZXhlYyggalF1ZXJ5LmNzcyggZWxlbSwgcHJvcCApICk7XG5cblx0aWYgKCBpbml0aWFsSW5Vbml0ICYmIGluaXRpYWxJblVuaXRbIDMgXSAhPT0gdW5pdCApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD01NFxuXHRcdC8vIEhhbHZlIHRoZSBpdGVyYXRpb24gdGFyZ2V0IHZhbHVlIHRvIHByZXZlbnQgaW50ZXJmZXJlbmNlIGZyb20gQ1NTIHVwcGVyIGJvdW5kcyAoZ2gtMjE0NClcblx0XHRpbml0aWFsID0gaW5pdGlhbCAvIDI7XG5cblx0XHQvLyBUcnVzdCB1bml0cyByZXBvcnRlZCBieSBqUXVlcnkuY3NzXG5cdFx0dW5pdCA9IHVuaXQgfHwgaW5pdGlhbEluVW5pdFsgMyBdO1xuXG5cdFx0Ly8gSXRlcmF0aXZlbHkgYXBwcm94aW1hdGUgZnJvbSBhIG5vbnplcm8gc3RhcnRpbmcgcG9pbnRcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWwgfHwgMTtcblxuXHRcdHdoaWxlICggbWF4SXRlcmF0aW9ucy0tICkge1xuXG5cdFx0XHQvLyBFdmFsdWF0ZSBhbmQgdXBkYXRlIG91ciBiZXN0IGd1ZXNzIChkb3VibGluZyBndWVzc2VzIHRoYXQgemVybyBvdXQpLlxuXHRcdFx0Ly8gRmluaXNoIGlmIHRoZSBzY2FsZSBlcXVhbHMgb3IgY3Jvc3NlcyAxIChtYWtpbmcgdGhlIG9sZCpuZXcgcHJvZHVjdCBub24tcG9zaXRpdmUpLlxuXHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBpbml0aWFsSW5Vbml0ICsgdW5pdCApO1xuXHRcdFx0aWYgKCAoIDEgLSBzY2FsZSApICogKCAxIC0gKCBzY2FsZSA9IGN1cnJlbnRWYWx1ZSgpIC8gaW5pdGlhbCB8fCAwLjUgKSApIDw9IDAgKSB7XG5cdFx0XHRcdG1heEl0ZXJhdGlvbnMgPSAwO1xuXHRcdFx0fVxuXHRcdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgLyBzY2FsZTtcblxuXHRcdH1cblxuXHRcdGluaXRpYWxJblVuaXQgPSBpbml0aWFsSW5Vbml0ICogMjtcblx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XG5cblx0XHQvLyBNYWtlIHN1cmUgd2UgdXBkYXRlIHRoZSB0d2VlbiBwcm9wZXJ0aWVzIGxhdGVyIG9uXG5cdFx0dmFsdWVQYXJ0cyA9IHZhbHVlUGFydHMgfHwgW107XG5cdH1cblxuXHRpZiAoIHZhbHVlUGFydHMgKSB7XG5cdFx0aW5pdGlhbEluVW5pdCA9ICtpbml0aWFsSW5Vbml0IHx8ICtpbml0aWFsIHx8IDA7XG5cblx0XHQvLyBBcHBseSByZWxhdGl2ZSBvZmZzZXQgKCs9Ly09KSBpZiBzcGVjaWZpZWRcblx0XHRhZGp1c3RlZCA9IHZhbHVlUGFydHNbIDEgXSA/XG5cdFx0XHRpbml0aWFsSW5Vbml0ICsgKCB2YWx1ZVBhcnRzWyAxIF0gKyAxICkgKiB2YWx1ZVBhcnRzWyAyIF0gOlxuXHRcdFx0K3ZhbHVlUGFydHNbIDIgXTtcblx0XHRpZiAoIHR3ZWVuICkge1xuXHRcdFx0dHdlZW4udW5pdCA9IHVuaXQ7XG5cdFx0XHR0d2Vlbi5zdGFydCA9IGluaXRpYWxJblVuaXQ7XG5cdFx0XHR0d2Vlbi5lbmQgPSBhZGp1c3RlZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFkanVzdGVkO1xufVxuXG5cbnZhciBkZWZhdWx0RGlzcGxheU1hcCA9IHt9O1xuXG5mdW5jdGlvbiBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApIHtcblx0dmFyIHRlbXAsXG5cdFx0ZG9jID0gZWxlbS5vd25lckRvY3VtZW50LFxuXHRcdG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZSxcblx0XHRkaXNwbGF5ID0gZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF07XG5cblx0aWYgKCBkaXNwbGF5ICkge1xuXHRcdHJldHVybiBkaXNwbGF5O1xuXHR9XG5cblx0dGVtcCA9IGRvYy5ib2R5LmFwcGVuZENoaWxkKCBkb2MuY3JlYXRlRWxlbWVudCggbm9kZU5hbWUgKSApO1xuXHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggdGVtcCwgXCJkaXNwbGF5XCIgKTtcblxuXHR0ZW1wLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHRlbXAgKTtcblxuXHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdGRpc3BsYXkgPSBcImJsb2NrXCI7XG5cdH1cblx0ZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF0gPSBkaXNwbGF5O1xuXG5cdHJldHVybiBkaXNwbGF5O1xufVxuXG5mdW5jdGlvbiBzaG93SGlkZSggZWxlbWVudHMsIHNob3cgKSB7XG5cdHZhciBkaXNwbGF5LCBlbGVtLFxuXHRcdHZhbHVlcyA9IFtdLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cblx0Ly8gRGV0ZXJtaW5lIG5ldyBkaXNwbGF5IHZhbHVlIGZvciBlbGVtZW50cyB0aGF0IG5lZWQgdG8gY2hhbmdlXG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1lbnRzWyBpbmRleCBdO1xuXHRcdGlmICggIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRkaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5O1xuXHRcdGlmICggc2hvdyApIHtcblxuXHRcdFx0Ly8gU2luY2Ugd2UgZm9yY2UgdmlzaWJpbGl0eSB1cG9uIGNhc2NhZGUtaGlkZGVuIGVsZW1lbnRzLCBhbiBpbW1lZGlhdGUgKGFuZCBzbG93KVxuXHRcdFx0Ly8gY2hlY2sgaXMgcmVxdWlyZWQgaW4gdGhpcyBmaXJzdCBsb29wIHVubGVzcyB3ZSBoYXZlIGEgbm9uZW1wdHkgZGlzcGxheSB2YWx1ZSAoZWl0aGVyXG5cdFx0XHQvLyBpbmxpbmUgb3IgYWJvdXQtdG8tYmUtcmVzdG9yZWQpXG5cdFx0XHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZGlzcGxheVwiICkgfHwgbnVsbDtcblx0XHRcdFx0aWYgKCAhdmFsdWVzWyBpbmRleCBdICkge1xuXHRcdFx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICggZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmIGlzSGlkZGVuV2l0aGluVHJlZSggZWxlbSApICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIGRpc3BsYXkgIT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBcIm5vbmVcIjtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB3aGF0IHdlJ3JlIG92ZXJ3cml0aW5nXG5cdFx0XHRcdGRhdGFQcml2LnNldCggZWxlbSwgXCJkaXNwbGF5XCIsIGRpc3BsYXkgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBTZXQgdGhlIGRpc3BsYXkgb2YgdGhlIGVsZW1lbnRzIGluIGEgc2Vjb25kIGxvb3AgdG8gYXZvaWQgY29uc3RhbnQgcmVmbG93XG5cdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCB2YWx1ZXNbIGluZGV4IF0gIT0gbnVsbCApIHtcblx0XHRcdGVsZW1lbnRzWyBpbmRleCBdLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZXNbIGluZGV4IF07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnRzO1xufVxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHNob3c6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcywgdHJ1ZSApO1xuXHR9LFxuXHRoaWRlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMgKTtcblx0fSxcblx0dG9nZ2xlOiBmdW5jdGlvbiggc3RhdGUgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggaXNIaWRkZW5XaXRoaW5UcmVlKCB0aGlzICkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnNob3coKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmhpZGUoKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcbnZhciByY2hlY2thYmxlVHlwZSA9ICggL14oPzpjaGVja2JveHxyYWRpbykkL2kgKTtcblxudmFyIHJ0YWdOYW1lID0gKCAvPChbYS16XVteXFwvXFwwPlxceDIwXFx0XFxyXFxuXFxmXSopL2kgKTtcblxudmFyIHJzY3JpcHRUeXBlID0gKCAvXiR8Xm1vZHVsZSR8XFwvKD86amF2YXxlY21hKXNjcmlwdC9pICk7XG5cblxuXG4vLyBXZSBoYXZlIHRvIGNsb3NlIHRoZXNlIHRhZ3MgdG8gc3VwcG9ydCBYSFRNTCAoIzEzMjAwKVxudmFyIHdyYXBNYXAgPSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0b3B0aW9uOiBbIDEsIFwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPlwiLCBcIjwvc2VsZWN0PlwiIF0sXG5cblx0Ly8gWEhUTUwgcGFyc2VycyBkbyBub3QgbWFnaWNhbGx5IGluc2VydCBlbGVtZW50cyBpbiB0aGVcblx0Ly8gc2FtZSB3YXkgdGhhdCB0YWcgc291cCBwYXJzZXJzIGRvLiBTbyB3ZSBjYW5ub3Qgc2hvcnRlblxuXHQvLyB0aGlzIGJ5IG9taXR0aW5nIDx0Ym9keT4gb3Igb3RoZXIgcmVxdWlyZWQgZWxlbWVudHMuXG5cdHRoZWFkOiBbIDEsIFwiPHRhYmxlPlwiLCBcIjwvdGFibGU+XCIgXSxcblx0Y29sOiBbIDIsIFwiPHRhYmxlPjxjb2xncm91cD5cIiwgXCI8L2NvbGdyb3VwPjwvdGFibGU+XCIgXSxcblx0dHI6IFsgMiwgXCI8dGFibGU+PHRib2R5PlwiLCBcIjwvdGJvZHk+PC90YWJsZT5cIiBdLFxuXHR0ZDogWyAzLCBcIjx0YWJsZT48dGJvZHk+PHRyPlwiLCBcIjwvdHI+PC90Ym9keT48L3RhYmxlPlwiIF0sXG5cblx0X2RlZmF1bHQ6IFsgMCwgXCJcIiwgXCJcIiBdXG59O1xuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxud3JhcE1hcC5vcHRncm91cCA9IHdyYXBNYXAub3B0aW9uO1xuXG53cmFwTWFwLnRib2R5ID0gd3JhcE1hcC50Zm9vdCA9IHdyYXBNYXAuY29sZ3JvdXAgPSB3cmFwTWFwLmNhcHRpb24gPSB3cmFwTWFwLnRoZWFkO1xud3JhcE1hcC50aCA9IHdyYXBNYXAudGQ7XG5cblxuZnVuY3Rpb24gZ2V0QWxsKCBjb250ZXh0LCB0YWcgKSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHQvLyBVc2UgdHlwZW9mIHRvIGF2b2lkIHplcm8tYXJndW1lbnQgbWV0aG9kIGludm9jYXRpb24gb24gaG9zdCBvYmplY3RzICgjMTUxNTEpXG5cdHZhciByZXQ7XG5cblx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRyZXQgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgfHwgXCIqXCIgKTtcblxuXHR9IGVsc2UgaWYgKCB0eXBlb2YgY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdHJldCA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnIHx8IFwiKlwiICk7XG5cblx0fSBlbHNlIHtcblx0XHRyZXQgPSBbXTtcblx0fVxuXG5cdGlmICggdGFnID09PSB1bmRlZmluZWQgfHwgdGFnICYmIG5vZGVOYW1lKCBjb250ZXh0LCB0YWcgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbIGNvbnRleHQgXSwgcmV0ICk7XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufVxuXG5cbi8vIE1hcmsgc2NyaXB0cyBhcyBoYXZpbmcgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZFxuZnVuY3Rpb24gc2V0R2xvYmFsRXZhbCggZWxlbXMsIHJlZkVsZW1lbnRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZGF0YVByaXYuc2V0KFxuXHRcdFx0ZWxlbXNbIGkgXSxcblx0XHRcdFwiZ2xvYmFsRXZhbFwiLFxuXHRcdFx0IXJlZkVsZW1lbnRzIHx8IGRhdGFQcml2LmdldCggcmVmRWxlbWVudHNbIGkgXSwgXCJnbG9iYWxFdmFsXCIgKVxuXHRcdCk7XG5cdH1cbn1cblxuXG52YXIgcmh0bWwgPSAvPHwmIz9cXHcrOy87XG5cbmZ1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoIGVsZW1zLCBjb250ZXh0LCBzY3JpcHRzLCBzZWxlY3Rpb24sIGlnbm9yZWQgKSB7XG5cdHZhciBlbGVtLCB0bXAsIHRhZywgd3JhcCwgYXR0YWNoZWQsIGosXG5cdFx0ZnJhZ21lbnQgPSBjb250ZXh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRub2RlcyA9IFtdLFxuXHRcdGkgPSAwLFxuXHRcdGwgPSBlbGVtcy5sZW5ndGg7XG5cblx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdGVsZW0gPSBlbGVtc1sgaSBdO1xuXG5cdFx0aWYgKCBlbGVtIHx8IGVsZW0gPT09IDAgKSB7XG5cblx0XHRcdC8vIEFkZCBub2RlcyBkaXJlY3RseVxuXHRcdFx0aWYgKCB0b1R5cGUoIGVsZW0gKSA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCBlbGVtLm5vZGVUeXBlID8gWyBlbGVtIF0gOiBlbGVtICk7XG5cblx0XHRcdC8vIENvbnZlcnQgbm9uLWh0bWwgaW50byBhIHRleHQgbm9kZVxuXHRcdFx0fSBlbHNlIGlmICggIXJodG1sLnRlc3QoIGVsZW0gKSApIHtcblx0XHRcdFx0bm9kZXMucHVzaCggY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbSApICk7XG5cblx0XHRcdC8vIENvbnZlcnQgaHRtbCBpbnRvIERPTSBub2Rlc1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dG1wID0gdG1wIHx8IGZyYWdtZW50LmFwcGVuZENoaWxkKCBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApO1xuXG5cdFx0XHRcdC8vIERlc2VyaWFsaXplIGEgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25cblx0XHRcdFx0dGFnID0gKCBydGFnTmFtZS5leGVjKCBlbGVtICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdHdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFwTWFwLl9kZWZhdWx0O1xuXHRcdFx0XHR0bXAuaW5uZXJIVE1MID0gd3JhcFsgMSBdICsgalF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIGVsZW0gKSArIHdyYXBbIDIgXTtcblxuXHRcdFx0XHQvLyBEZXNjZW5kIHRocm91Z2ggd3JhcHBlcnMgdG8gdGhlIHJpZ2h0IGNvbnRlbnRcblx0XHRcdFx0aiA9IHdyYXBbIDAgXTtcblx0XHRcdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRcdFx0dG1wID0gdG1wLmxhc3RDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIHRtcC5jaGlsZE5vZGVzICk7XG5cblx0XHRcdFx0Ly8gUmVtZW1iZXIgdGhlIHRvcC1sZXZlbCBjb250YWluZXJcblx0XHRcdFx0dG1wID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcblxuXHRcdFx0XHQvLyBFbnN1cmUgdGhlIGNyZWF0ZWQgbm9kZXMgYXJlIG9ycGhhbmVkICgjMTIzOTIpXG5cdFx0XHRcdHRtcC50ZXh0Q29udGVudCA9IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmVtb3ZlIHdyYXBwZXIgZnJvbSBmcmFnbWVudFxuXHRmcmFnbWVudC50ZXh0Q29udGVudCA9IFwiXCI7XG5cblx0aSA9IDA7XG5cdHdoaWxlICggKCBlbGVtID0gbm9kZXNbIGkrKyBdICkgKSB7XG5cblx0XHQvLyBTa2lwIGVsZW1lbnRzIGFscmVhZHkgaW4gdGhlIGNvbnRleHQgY29sbGVjdGlvbiAodHJhYy00MDg3KVxuXHRcdGlmICggc2VsZWN0aW9uICYmIGpRdWVyeS5pbkFycmF5KCBlbGVtLCBzZWxlY3Rpb24gKSA+IC0xICkge1xuXHRcdFx0aWYgKCBpZ25vcmVkICkge1xuXHRcdFx0XHRpZ25vcmVkLnB1c2goIGVsZW0gKTtcblx0XHRcdH1cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGF0dGFjaGVkID0gaXNBdHRhY2hlZCggZWxlbSApO1xuXG5cdFx0Ly8gQXBwZW5kIHRvIGZyYWdtZW50XG5cdFx0dG1wID0gZ2V0QWxsKCBmcmFnbWVudC5hcHBlbmRDaGlsZCggZWxlbSApLCBcInNjcmlwdFwiICk7XG5cblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XG5cdFx0aWYgKCBhdHRhY2hlZCApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIHRtcCApO1xuXHRcdH1cblxuXHRcdC8vIENhcHR1cmUgZXhlY3V0YWJsZXNcblx0XHRpZiAoIHNjcmlwdHMgKSB7XG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gdG1wWyBqKysgXSApICkge1xuXHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIGVsZW0udHlwZSB8fCBcIlwiICkgKSB7XG5cdFx0XHRcdFx0c2NyaXB0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZnJhZ21lbnQ7XG59XG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxuXHRcdGRpdiA9IGZyYWdtZW50LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKSxcblx0XHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHlcblx0Ly8gQ2hlY2sgc3RhdGUgbG9zdCBpZiB0aGUgbmFtZSBpcyBzZXQgKCMxMTIxNylcblx0Ly8gU3VwcG9ydDogV2luZG93cyBXZWIgQXBwcyAoV1dBKVxuXHQvLyBgbmFtZWAgYW5kIGB0eXBlYCBtdXN0IHVzZSAuc2V0QXR0cmlidXRlIGZvciBXV0EgKCMxNDkwMSlcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgXCJyYWRpb1wiICk7XG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJjaGVja2VkXCIsIFwiY2hlY2tlZFwiICk7XG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwidFwiICk7XG5cblx0ZGl2LmFwcGVuZENoaWxkKCBpbnB1dCApO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjEgb25seVxuXHQvLyBPbGRlciBXZWJLaXQgZG9lc24ndCBjbG9uZSBjaGVja2VkIHN0YXRlIGNvcnJlY3RseSBpbiBmcmFnbWVudHNcblx0c3VwcG9ydC5jaGVja0Nsb25lID0gZGl2LmNsb25lTm9kZSggdHJ1ZSApLmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5jaGVja2VkO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBNYWtlIHN1cmUgdGV4dGFyZWEgKGFuZCBjaGVja2JveCkgZGVmYXVsdFZhbHVlIGlzIHByb3Blcmx5IGNsb25lZFxuXHRkaXYuaW5uZXJIVE1MID0gXCI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+XCI7XG5cdHN1cHBvcnQubm9DbG9uZUNoZWNrZWQgPSAhIWRpdi5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuZGVmYXVsdFZhbHVlO1xufSApKCk7XG5cblxudmFyXG5cdHJrZXlFdmVudCA9IC9ea2V5Lyxcblx0cm1vdXNlRXZlbnQgPSAvXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnV8ZHJhZ3xkcm9wKXxjbGljay8sXG5cdHJ0eXBlbmFtZXNwYWNlID0gL14oW14uXSopKD86XFwuKC4rKXwpLztcblxuZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHtcblx0cmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJldHVybkZhbHNlKCkge1xuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDExK1xuLy8gZm9jdXMoKSBhbmQgYmx1cigpIGFyZSBhc3luY2hyb25vdXMsIGV4Y2VwdCB3aGVuIHRoZXkgYXJlIG5vLW9wLlxuLy8gU28gZXhwZWN0IGZvY3VzIHRvIGJlIHN5bmNocm9ub3VzIHdoZW4gdGhlIGVsZW1lbnQgaXMgYWxyZWFkeSBhY3RpdmUsXG4vLyBhbmQgYmx1ciB0byBiZSBzeW5jaHJvbm91cyB3aGVuIHRoZSBlbGVtZW50IGlzIG5vdCBhbHJlYWR5IGFjdGl2ZS5cbi8vIChmb2N1cyBhbmQgYmx1ciBhcmUgYWx3YXlzIHN5bmNocm9ub3VzIGluIG90aGVyIHN1cHBvcnRlZCBicm93c2Vycyxcbi8vIHRoaXMganVzdCBkZWZpbmVzIHdoZW4gd2UgY2FuIGNvdW50IG9uIGl0KS5cbmZ1bmN0aW9uIGV4cGVjdFN5bmMoIGVsZW0sIHR5cGUgKSB7XG5cdHJldHVybiAoIGVsZW0gPT09IHNhZmVBY3RpdmVFbGVtZW50KCkgKSA9PT0gKCB0eXBlID09PSBcImZvY3VzXCIgKTtcbn1cblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbi8vIEFjY2Vzc2luZyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGNhbiB0aHJvdyB1bmV4cGVjdGVkbHlcbi8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMzM5M1xuZnVuY3Rpb24gc2FmZUFjdGl2ZUVsZW1lbnQoKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cdH0gY2F0Y2ggKCBlcnIgKSB7IH1cbn1cblxuZnVuY3Rpb24gb24oIGVsZW0sIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIG9uZSApIHtcblx0dmFyIG9yaWdGbiwgdHlwZTtcblxuXHQvLyBUeXBlcyBjYW4gYmUgYSBtYXAgb2YgdHlwZXMvaGFuZGxlcnNcblx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyAoIHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRhdGEgKVxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLU9iamVjdCwgZGF0YSApXG5cdFx0XHRkYXRhID0gZGF0YSB8fCBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xuXHRcdFx0b24oIGVsZW0sIHR5cGUsIHNlbGVjdG9yLCBkYXRhLCB0eXBlc1sgdHlwZSBdLCBvbmUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIGRhdGEgPT0gbnVsbCAmJiBmbiA9PSBudWxsICkge1xuXG5cdFx0Ly8gKCB0eXBlcywgZm4gKVxuXHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0ZGF0YSA9IHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKCBmbiA9PSBudWxsICkge1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBzZWxlY3RvciwgZm4gKVxuXHRcdFx0Zm4gPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBkYXRhLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0fSBlbHNlIGlmICggIWZuICkge1xuXHRcdHJldHVybiBlbGVtO1xuXHR9XG5cblx0aWYgKCBvbmUgPT09IDEgKSB7XG5cdFx0b3JpZ0ZuID0gZm47XG5cdFx0Zm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdC8vIENhbiB1c2UgYW4gZW1wdHkgc2V0LCBzaW5jZSBldmVudCBjb250YWlucyB0aGUgaW5mb1xuXHRcdFx0alF1ZXJ5KCkub2ZmKCBldmVudCApO1xuXHRcdFx0cmV0dXJuIG9yaWdGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fTtcblxuXHRcdC8vIFVzZSBzYW1lIGd1aWQgc28gY2FsbGVyIGNhbiByZW1vdmUgdXNpbmcgb3JpZ0ZuXG5cdFx0Zm4uZ3VpZCA9IG9yaWdGbi5ndWlkIHx8ICggb3JpZ0ZuLmd1aWQgPSBqUXVlcnkuZ3VpZCsrICk7XG5cdH1cblx0cmV0dXJuIGVsZW0uZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0alF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgdHlwZXMsIGZuLCBkYXRhLCBzZWxlY3RvciApO1xuXHR9ICk7XG59XG5cbi8qXG4gKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBldmVudHMgLS0gbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuXG4gKiBQcm9wcyB0byBEZWFuIEVkd2FyZHMnIGFkZEV2ZW50IGxpYnJhcnkgZm9yIG1hbnkgb2YgdGhlIGlkZWFzLlxuICovXG5qUXVlcnkuZXZlbnQgPSB7XG5cblx0Z2xvYmFsOiB7fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgZGF0YSwgc2VsZWN0b3IgKSB7XG5cblx0XHR2YXIgaGFuZGxlT2JqSW4sIGV2ZW50SGFuZGxlLCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHQvLyBEb24ndCBhdHRhY2ggZXZlbnRzIHRvIG5vRGF0YSBvciB0ZXh0L2NvbW1lbnQgbm9kZXMgKGJ1dCBhbGxvdyBwbGFpbiBvYmplY3RzKVxuXHRcdGlmICggIWVsZW1EYXRhICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBvYmplY3Qgb2YgY3VzdG9tIGRhdGEgaW4gbGlldSBvZiB0aGUgaGFuZGxlclxuXHRcdGlmICggaGFuZGxlci5oYW5kbGVyICkge1xuXHRcdFx0aGFuZGxlT2JqSW4gPSBoYW5kbGVyO1xuXHRcdFx0aGFuZGxlciA9IGhhbmRsZU9iakluLmhhbmRsZXI7XG5cdFx0XHRzZWxlY3RvciA9IGhhbmRsZU9iakluLnNlbGVjdG9yO1xuXHRcdH1cblxuXHRcdC8vIEVuc3VyZSB0aGF0IGludmFsaWQgc2VsZWN0b3JzIHRocm93IGV4Y2VwdGlvbnMgYXQgYXR0YWNoIHRpbWVcblx0XHQvLyBFdmFsdWF0ZSBhZ2FpbnN0IGRvY3VtZW50RWxlbWVudCBpbiBjYXNlIGVsZW0gaXMgYSBub24tZWxlbWVudCBub2RlIChlLmcuLCBkb2N1bWVudClcblx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBkb2N1bWVudEVsZW1lbnQsIHNlbGVjdG9yICk7XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIGhhbmRsZXIgaGFzIGEgdW5pcXVlIElELCB1c2VkIHRvIGZpbmQvcmVtb3ZlIGl0IGxhdGVyXG5cdFx0aWYgKCAhaGFuZGxlci5ndWlkICkge1xuXHRcdFx0aGFuZGxlci5ndWlkID0galF1ZXJ5Lmd1aWQrKztcblx0XHR9XG5cblx0XHQvLyBJbml0IHRoZSBlbGVtZW50J3MgZXZlbnQgc3RydWN0dXJlIGFuZCBtYWluIGhhbmRsZXIsIGlmIHRoaXMgaXMgdGhlIGZpcnN0XG5cdFx0aWYgKCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyA9IHt9O1xuXHRcdH1cblx0XHRpZiAoICEoIGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlICkgKSB7XG5cdFx0XHRldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSA9IGZ1bmN0aW9uKCBlICkge1xuXG5cdFx0XHRcdC8vIERpc2NhcmQgdGhlIHNlY29uZCBldmVudCBvZiBhIGpRdWVyeS5ldmVudC50cmlnZ2VyKCkgYW5kXG5cdFx0XHRcdC8vIHdoZW4gYW4gZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGEgcGFnZSBoYXMgdW5sb2FkZWRcblx0XHRcdFx0cmV0dXJuIHR5cGVvZiBqUXVlcnkgIT09IFwidW5kZWZpbmVkXCIgJiYgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCAhPT0gZS50eXBlID9cblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQuZGlzcGF0Y2guYXBwbHkoIGVsZW0sIGFyZ3VtZW50cyApIDogdW5kZWZpbmVkO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHQvLyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGFyYXRlZCBieSBhIHNwYWNlXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107XG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTtcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFRoZXJlICptdXN0KiBiZSBhIHR5cGUsIG5vIGF0dGFjaGluZyBuYW1lc3BhY2Utb25seSBoYW5kbGVyc1xuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGV2ZW50IGNoYW5nZXMgaXRzIHR5cGUsIHVzZSB0aGUgc3BlY2lhbCBldmVudCBoYW5kbGVycyBmb3IgdGhlIGNoYW5nZWQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIElmIHNlbGVjdG9yIGRlZmluZWQsIGRldGVybWluZSBzcGVjaWFsIGV2ZW50IGFwaSB0eXBlLCBvdGhlcndpc2UgZ2l2ZW4gdHlwZVxuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXG5cdFx0XHQvLyBVcGRhdGUgc3BlY2lhbCBiYXNlZCBvbiBuZXdseSByZXNldCB0eXBlXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblxuXHRcdFx0Ly8gaGFuZGxlT2JqIGlzIHBhc3NlZCB0byBhbGwgZXZlbnQgaGFuZGxlcnNcblx0XHRcdGhhbmRsZU9iaiA9IGpRdWVyeS5leHRlbmQoIHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0b3JpZ1R5cGU6IG9yaWdUeXBlLFxuXHRcdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0XHRoYW5kbGVyOiBoYW5kbGVyLFxuXHRcdFx0XHRndWlkOiBoYW5kbGVyLmd1aWQsXG5cdFx0XHRcdHNlbGVjdG9yOiBzZWxlY3Rvcixcblx0XHRcdFx0bmVlZHNDb250ZXh0OiBzZWxlY3RvciAmJiBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSxcblx0XHRcdFx0bmFtZXNwYWNlOiBuYW1lc3BhY2VzLmpvaW4oIFwiLlwiIClcblx0XHRcdH0sIGhhbmRsZU9iakluICk7XG5cblx0XHRcdC8vIEluaXQgdGhlIGV2ZW50IGhhbmRsZXIgcXVldWUgaWYgd2UncmUgdGhlIGZpcnN0XG5cdFx0XHRpZiAoICEoIGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gKSApIHtcblx0XHRcdFx0aGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSA9IFtdO1xuXHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50ID0gMDtcblxuXHRcdFx0XHQvLyBPbmx5IHVzZSBhZGRFdmVudExpc3RlbmVyIGlmIHRoZSBzcGVjaWFsIGV2ZW50cyBoYW5kbGVyIHJldHVybnMgZmFsc2Vcblx0XHRcdFx0aWYgKCAhc3BlY2lhbC5zZXR1cCB8fFxuXHRcdFx0XHRcdHNwZWNpYWwuc2V0dXAuY2FsbCggZWxlbSwgZGF0YSwgbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciApIHtcblx0XHRcdFx0XHRcdGVsZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBzcGVjaWFsLmFkZCApIHtcblx0XHRcdFx0c3BlY2lhbC5hZGQuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XG5cblx0XHRcdFx0aWYgKCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCApIHtcblx0XHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlci5ndWlkID0gaGFuZGxlci5ndWlkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCB0byB0aGUgZWxlbWVudCdzIGhhbmRsZXIgbGlzdCwgZGVsZWdhdGVzIGluIGZyb250XG5cdFx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGhhbmRsZXJzLmRlbGVnYXRlQ291bnQrKywgMCwgaGFuZGxlT2JqICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRoYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gS2VlcCB0cmFjayBvZiB3aGljaCBldmVudHMgaGF2ZSBldmVyIGJlZW4gdXNlZCwgZm9yIGV2ZW50IG9wdGltaXphdGlvblxuXHRcdFx0alF1ZXJ5LmV2ZW50Lmdsb2JhbFsgdHlwZSBdID0gdHJ1ZTtcblx0XHR9XG5cblx0fSxcblxuXHQvLyBEZXRhY2ggYW4gZXZlbnQgb3Igc2V0IG9mIGV2ZW50cyBmcm9tIGFuIGVsZW1lbnRcblx0cmVtb3ZlOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIHNlbGVjdG9yLCBtYXBwZWRUeXBlcyApIHtcblxuXHRcdHZhciBqLCBvcmlnQ291bnQsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICkgJiYgZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHRpZiAoICFlbGVtRGF0YSB8fCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBPbmNlIGZvciBlYWNoIHR5cGUubmFtZXNwYWNlIGluIHR5cGVzOyB0eXBlIG1heSBiZSBvbWl0dGVkXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107XG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTtcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFVuYmluZCBhbGwgZXZlbnRzIChvbiB0aGlzIG5hbWVzcGFjZSwgaWYgcHJvdmlkZWQpIGZvciB0aGUgZWxlbWVudFxuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSArIHR5cGVzWyB0IF0sIGhhbmRsZXIsIHNlbGVjdG9yLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXHRcdFx0aGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSB8fCBbXTtcblx0XHRcdHRtcCA9IHRtcFsgMiBdICYmXG5cdFx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApO1xuXG5cdFx0XHQvLyBSZW1vdmUgbWF0Y2hpbmcgZXZlbnRzXG5cdFx0XHRvcmlnQ291bnQgPSBqID0gaGFuZGxlcnMubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBqIF07XG5cblx0XHRcdFx0aWYgKCAoIG1hcHBlZFR5cGVzIHx8IG9yaWdUeXBlID09PSBoYW5kbGVPYmoub3JpZ1R5cGUgKSAmJlxuXHRcdFx0XHRcdCggIWhhbmRsZXIgfHwgaGFuZGxlci5ndWlkID09PSBoYW5kbGVPYmouZ3VpZCApICYmXG5cdFx0XHRcdFx0KCAhdG1wIHx8IHRtcC50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSAmJlxuXHRcdFx0XHRcdCggIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSBoYW5kbGVPYmouc2VsZWN0b3IgfHxcblx0XHRcdFx0XHRcdHNlbGVjdG9yID09PSBcIioqXCIgJiYgaGFuZGxlT2JqLnNlbGVjdG9yICkgKSB7XG5cdFx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBqLCAxICk7XG5cblx0XHRcdFx0XHRpZiAoIGhhbmRsZU9iai5zZWxlY3RvciApIHtcblx0XHRcdFx0XHRcdGhhbmRsZXJzLmRlbGVnYXRlQ291bnQtLTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBzcGVjaWFsLnJlbW92ZSApIHtcblx0XHRcdFx0XHRcdHNwZWNpYWwucmVtb3ZlLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZW1vdmUgZ2VuZXJpYyBldmVudCBoYW5kbGVyIGlmIHdlIHJlbW92ZWQgc29tZXRoaW5nIGFuZCBubyBtb3JlIGhhbmRsZXJzIGV4aXN0XG5cdFx0XHQvLyAoYXZvaWRzIHBvdGVudGlhbCBmb3IgZW5kbGVzcyByZWN1cnNpb24gZHVyaW5nIHJlbW92YWwgb2Ygc3BlY2lhbCBldmVudCBoYW5kbGVycylcblx0XHRcdGlmICggb3JpZ0NvdW50ICYmICFoYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRcdGlmICggIXNwZWNpYWwudGVhcmRvd24gfHxcblx0XHRcdFx0XHRzcGVjaWFsLnRlYXJkb3duLmNhbGwoIGVsZW0sIG5hbWVzcGFjZXMsIGVsZW1EYXRhLmhhbmRsZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZWxlbURhdGEuaGFuZGxlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkZWxldGUgZXZlbnRzWyB0eXBlIF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIGRhdGEgYW5kIHRoZSBleHBhbmRvIGlmIGl0J3Mgbm8gbG9uZ2VyIHVzZWRcblx0XHRpZiAoIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBldmVudHMgKSApIHtcblx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgXCJoYW5kbGUgZXZlbnRzXCIgKTtcblx0XHR9XG5cdH0sXG5cblx0ZGlzcGF0Y2g6IGZ1bmN0aW9uKCBuYXRpdmVFdmVudCApIHtcblxuXHRcdC8vIE1ha2UgYSB3cml0YWJsZSBqUXVlcnkuRXZlbnQgZnJvbSB0aGUgbmF0aXZlIGV2ZW50IG9iamVjdFxuXHRcdHZhciBldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIG5hdGl2ZUV2ZW50ICk7XG5cblx0XHR2YXIgaSwgaiwgcmV0LCBtYXRjaGVkLCBoYW5kbGVPYmosIGhhbmRsZXJRdWV1ZSxcblx0XHRcdGFyZ3MgPSBuZXcgQXJyYXkoIGFyZ3VtZW50cy5sZW5ndGggKSxcblx0XHRcdGhhbmRsZXJzID0gKCBkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZXZlbnRzXCIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gfHwgW10sXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGV2ZW50LnR5cGUgXSB8fCB7fTtcblxuXHRcdC8vIFVzZSB0aGUgZml4LWVkIGpRdWVyeS5FdmVudCByYXRoZXIgdGhhbiB0aGUgKHJlYWQtb25seSkgbmF0aXZlIGV2ZW50XG5cdFx0YXJnc1sgMCBdID0gZXZlbnQ7XG5cblx0XHRmb3IgKCBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdGFyZ3NbIGkgXSA9IGFyZ3VtZW50c1sgaSBdO1xuXHRcdH1cblxuXHRcdGV2ZW50LmRlbGVnYXRlVGFyZ2V0ID0gdGhpcztcblxuXHRcdC8vIENhbGwgdGhlIHByZURpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZSwgYW5kIGxldCBpdCBiYWlsIGlmIGRlc2lyZWRcblx0XHRpZiAoIHNwZWNpYWwucHJlRGlzcGF0Y2ggJiYgc3BlY2lhbC5wcmVEaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgaGFuZGxlcnNcblx0XHRoYW5kbGVyUXVldWUgPSBqUXVlcnkuZXZlbnQuaGFuZGxlcnMuY2FsbCggdGhpcywgZXZlbnQsIGhhbmRsZXJzICk7XG5cblx0XHQvLyBSdW4gZGVsZWdhdGVzIGZpcnN0OyB0aGV5IG1heSB3YW50IHRvIHN0b3AgcHJvcGFnYXRpb24gYmVuZWF0aCB1c1xuXHRcdGkgPSAwO1xuXHRcdHdoaWxlICggKCBtYXRjaGVkID0gaGFuZGxlclF1ZXVlWyBpKysgXSApICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0ZXZlbnQuY3VycmVudFRhcmdldCA9IG1hdGNoZWQuZWxlbTtcblxuXHRcdFx0aiA9IDA7XG5cdFx0XHR3aGlsZSAoICggaGFuZGxlT2JqID0gbWF0Y2hlZC5oYW5kbGVyc1sgaisrIF0gKSAmJlxuXHRcdFx0XHQhZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblxuXHRcdFx0XHQvLyBJZiB0aGUgZXZlbnQgaXMgbmFtZXNwYWNlZCwgdGhlbiBlYWNoIGhhbmRsZXIgaXMgb25seSBpbnZva2VkIGlmIGl0IGlzXG5cdFx0XHRcdC8vIHNwZWNpYWxseSB1bml2ZXJzYWwgb3IgaXRzIG5hbWVzcGFjZXMgYXJlIGEgc3VwZXJzZXQgb2YgdGhlIGV2ZW50J3MuXG5cdFx0XHRcdGlmICggIWV2ZW50LnJuYW1lc3BhY2UgfHwgaGFuZGxlT2JqLm5hbWVzcGFjZSA9PT0gZmFsc2UgfHxcblx0XHRcdFx0XHRldmVudC5ybmFtZXNwYWNlLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApIHtcblxuXHRcdFx0XHRcdGV2ZW50LmhhbmRsZU9iaiA9IGhhbmRsZU9iajtcblx0XHRcdFx0XHRldmVudC5kYXRhID0gaGFuZGxlT2JqLmRhdGE7XG5cblx0XHRcdFx0XHRyZXQgPSAoICggalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGhhbmRsZU9iai5vcmlnVHlwZSBdIHx8IHt9ICkuaGFuZGxlIHx8XG5cdFx0XHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlciApLmFwcGx5KCBtYXRjaGVkLmVsZW0sIGFyZ3MgKTtcblxuXHRcdFx0XHRcdGlmICggcmV0ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZXZlbnQucmVzdWx0ID0gcmV0ICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWxsIHRoZSBwb3N0RGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlXG5cdFx0aWYgKCBzcGVjaWFsLnBvc3REaXNwYXRjaCApIHtcblx0XHRcdHNwZWNpYWwucG9zdERpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LnJlc3VsdDtcblx0fSxcblxuXHRoYW5kbGVyczogZnVuY3Rpb24oIGV2ZW50LCBoYW5kbGVycyApIHtcblx0XHR2YXIgaSwgaGFuZGxlT2JqLCBzZWwsIG1hdGNoZWRIYW5kbGVycywgbWF0Y2hlZFNlbGVjdG9ycyxcblx0XHRcdGhhbmRsZXJRdWV1ZSA9IFtdLFxuXHRcdFx0ZGVsZWdhdGVDb3VudCA9IGhhbmRsZXJzLmRlbGVnYXRlQ291bnQsXG5cdFx0XHRjdXIgPSBldmVudC50YXJnZXQ7XG5cblx0XHQvLyBGaW5kIGRlbGVnYXRlIGhhbmRsZXJzXG5cdFx0aWYgKCBkZWxlZ2F0ZUNvdW50ICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OVxuXHRcdFx0Ly8gQmxhY2staG9sZSBTVkcgPHVzZT4gaW5zdGFuY2UgdHJlZXMgKHRyYWMtMTMxODApXG5cdFx0XHRjdXIubm9kZVR5cGUgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTQyXG5cdFx0XHQvLyBTdXBwcmVzcyBzcGVjLXZpb2xhdGluZyBjbGlja3MgaW5kaWNhdGluZyBhIG5vbi1wcmltYXJ5IHBvaW50ZXIgYnV0dG9uICh0cmFjLTM4NjEpXG5cdFx0XHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudC10eXBlLWNsaWNrXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSBvbmx5XG5cdFx0XHQvLyAuLi5idXQgbm90IGFycm93IGtleSBcImNsaWNrc1wiIG9mIHJhZGlvIGlucHV0cywgd2hpY2ggY2FuIGhhdmUgYGJ1dHRvbmAgLTEgKGdoLTIzNDMpXG5cdFx0XHQhKCBldmVudC50eXBlID09PSBcImNsaWNrXCIgJiYgZXZlbnQuYnV0dG9uID49IDEgKSApIHtcblxuXHRcdFx0Zm9yICggOyBjdXIgIT09IHRoaXM7IGN1ciA9IGN1ci5wYXJlbnROb2RlIHx8IHRoaXMgKSB7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgY2hlY2sgbm9uLWVsZW1lbnRzICgjMTMyMDgpXG5cdFx0XHRcdC8vIERvbid0IHByb2Nlc3MgY2xpY2tzIG9uIGRpc2FibGVkIGVsZW1lbnRzICgjNjkxMSwgIzgxNjUsICMxMTM4MiwgIzExNzY0KVxuXHRcdFx0XHRpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSAmJiAhKCBldmVudC50eXBlID09PSBcImNsaWNrXCIgJiYgY3VyLmRpc2FibGVkID09PSB0cnVlICkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlZEhhbmRsZXJzID0gW107XG5cdFx0XHRcdFx0bWF0Y2hlZFNlbGVjdG9ycyA9IHt9O1xuXHRcdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgZGVsZWdhdGVDb3VudDsgaSsrICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlT2JqID0gaGFuZGxlcnNbIGkgXTtcblxuXHRcdFx0XHRcdFx0Ly8gRG9uJ3QgY29uZmxpY3Qgd2l0aCBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKCMxMzIwMylcblx0XHRcdFx0XHRcdHNlbCA9IGhhbmRsZU9iai5zZWxlY3RvciArIFwiIFwiO1xuXG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0XHRcdG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdID0gaGFuZGxlT2JqLm5lZWRzQ29udGV4dCA/XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5KCBzZWwsIHRoaXMgKS5pbmRleCggY3VyICkgPiAtMSA6XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LmZpbmQoIHNlbCwgdGhpcywgbnVsbCwgWyBjdXIgXSApLmxlbmd0aDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gKSB7XG5cdFx0XHRcdFx0XHRcdG1hdGNoZWRIYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBtYXRjaGVkSGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogY3VyLCBoYW5kbGVyczogbWF0Y2hlZEhhbmRsZXJzIH0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBZGQgdGhlIHJlbWFpbmluZyAoZGlyZWN0bHktYm91bmQpIGhhbmRsZXJzXG5cdFx0Y3VyID0gdGhpcztcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgPCBoYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRoYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBoYW5kbGVycy5zbGljZSggZGVsZWdhdGVDb3VudCApIH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaGFuZGxlclF1ZXVlO1xuXHR9LFxuXG5cdGFkZFByb3A6IGZ1bmN0aW9uKCBuYW1lLCBob29rICkge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggalF1ZXJ5LkV2ZW50LnByb3RvdHlwZSwgbmFtZSwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblxuXHRcdFx0Z2V0OiBpc0Z1bmN0aW9uKCBob29rICkgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGhvb2soIHRoaXMub3JpZ2luYWxFdmVudCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50WyBuYW1lIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCB0aGlzLCBuYW1lLCB7XG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0Zml4OiBmdW5jdGlvbiggb3JpZ2luYWxFdmVudCApIHtcblx0XHRyZXR1cm4gb3JpZ2luYWxFdmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/XG5cdFx0XHRvcmlnaW5hbEV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIG9yaWdpbmFsRXZlbnQgKTtcblx0fSxcblxuXHRzcGVjaWFsOiB7XG5cdFx0bG9hZDoge1xuXG5cdFx0XHQvLyBQcmV2ZW50IHRyaWdnZXJlZCBpbWFnZS5sb2FkIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2FkXG5cdFx0XHRub0J1YmJsZTogdHJ1ZVxuXHRcdH0sXG5cdFx0Y2xpY2s6IHtcblxuXHRcdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgdG8gZW5zdXJlIGNvcnJlY3Qgc3RhdGUgZm9yIGNoZWNrYWJsZSBpbnB1dHNcblx0XHRcdHNldHVwOiBmdW5jdGlvbiggZGF0YSApIHtcblxuXHRcdFx0XHQvLyBGb3IgbXV0dWFsIGNvbXByZXNzaWJpbGl0eSB3aXRoIF9kZWZhdWx0LCByZXBsYWNlIGB0aGlzYCBhY2Nlc3Mgd2l0aCBhIGxvY2FsIHZhci5cblx0XHRcdFx0Ly8gYHx8IGRhdGFgIGlzIGRlYWQgY29kZSBtZWFudCBvbmx5IHRvIHByZXNlcnZlIHRoZSB2YXJpYWJsZSB0aHJvdWdoIG1pbmlmaWNhdGlvbi5cblx0XHRcdFx0dmFyIGVsID0gdGhpcyB8fCBkYXRhO1xuXG5cdFx0XHRcdC8vIENsYWltIHRoZSBmaXJzdCBoYW5kbGVyXG5cdFx0XHRcdGlmICggcmNoZWNrYWJsZVR5cGUudGVzdCggZWwudHlwZSApICYmXG5cdFx0XHRcdFx0ZWwuY2xpY2sgJiYgbm9kZU5hbWUoIGVsLCBcImlucHV0XCIgKSApIHtcblxuXHRcdFx0XHRcdC8vIGRhdGFQcml2LnNldCggZWwsIFwiY2xpY2tcIiwgLi4uIClcblx0XHRcdFx0XHRsZXZlcmFnZU5hdGl2ZSggZWwsIFwiY2xpY2tcIiwgcmV0dXJuVHJ1ZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSxcblx0XHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCBkYXRhICkge1xuXG5cdFx0XHRcdC8vIEZvciBtdXR1YWwgY29tcHJlc3NpYmlsaXR5IHdpdGggX2RlZmF1bHQsIHJlcGxhY2UgYHRoaXNgIGFjY2VzcyB3aXRoIGEgbG9jYWwgdmFyLlxuXHRcdFx0XHQvLyBgfHwgZGF0YWAgaXMgZGVhZCBjb2RlIG1lYW50IG9ubHkgdG8gcHJlc2VydmUgdGhlIHZhcmlhYmxlIHRocm91Z2ggbWluaWZpY2F0aW9uLlxuXHRcdFx0XHR2YXIgZWwgPSB0aGlzIHx8IGRhdGE7XG5cblx0XHRcdFx0Ly8gRm9yY2Ugc2V0dXAgYmVmb3JlIHRyaWdnZXJpbmcgYSBjbGlja1xuXHRcdFx0XHRpZiAoIHJjaGVja2FibGVUeXBlLnRlc3QoIGVsLnR5cGUgKSAmJlxuXHRcdFx0XHRcdGVsLmNsaWNrICYmIG5vZGVOYW1lKCBlbCwgXCJpbnB1dFwiICkgKSB7XG5cblx0XHRcdFx0XHRsZXZlcmFnZU5hdGl2ZSggZWwsIFwiY2xpY2tcIiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0sXG5cblx0XHRcdC8vIEZvciBjcm9zcy1icm93c2VyIGNvbnNpc3RlbmN5LCBzdXBwcmVzcyBuYXRpdmUgLmNsaWNrKCkgb24gbGlua3Ncblx0XHRcdC8vIEFsc28gcHJldmVudCBpdCBpZiB3ZSdyZSBjdXJyZW50bHkgaW5zaWRlIGEgbGV2ZXJhZ2VkIG5hdGl2ZS1ldmVudCBzdGFja1xuXHRcdFx0X2RlZmF1bHQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0XHRcdFx0cmV0dXJuIHJjaGVja2FibGVUeXBlLnRlc3QoIHRhcmdldC50eXBlICkgJiZcblx0XHRcdFx0XHR0YXJnZXQuY2xpY2sgJiYgbm9kZU5hbWUoIHRhcmdldCwgXCJpbnB1dFwiICkgJiZcblx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRhcmdldCwgXCJjbGlja1wiICkgfHxcblx0XHRcdFx0XHRub2RlTmFtZSggdGFyZ2V0LCBcImFcIiApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRiZWZvcmV1bmxvYWQ6IHtcblx0XHRcdHBvc3REaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggMjArXG5cdFx0XHRcdC8vIEZpcmVmb3ggZG9lc24ndCBhbGVydCBpZiB0aGUgcmV0dXJuVmFsdWUgZmllbGQgaXMgbm90IHNldC5cblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgIT09IHVuZGVmaW5lZCAmJiBldmVudC5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdGV2ZW50Lm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWUgPSBldmVudC5yZXN1bHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8vIEVuc3VyZSB0aGUgcHJlc2VuY2Ugb2YgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBoYW5kbGVzIG1hbnVhbGx5LXRyaWdnZXJlZFxuLy8gc3ludGhldGljIGV2ZW50cyBieSBpbnRlcnJ1cHRpbmcgcHJvZ3Jlc3MgdW50aWwgcmVpbnZva2VkIGluIHJlc3BvbnNlIHRvXG4vLyAqbmF0aXZlKiBldmVudHMgdGhhdCBpdCBmaXJlcyBkaXJlY3RseSwgZW5zdXJpbmcgdGhhdCBzdGF0ZSBjaGFuZ2VzIGhhdmVcbi8vIGFscmVhZHkgb2NjdXJyZWQgYmVmb3JlIG90aGVyIGxpc3RlbmVycyBhcmUgaW52b2tlZC5cbmZ1bmN0aW9uIGxldmVyYWdlTmF0aXZlKCBlbCwgdHlwZSwgZXhwZWN0U3luYyApIHtcblxuXHQvLyBNaXNzaW5nIGV4cGVjdFN5bmMgaW5kaWNhdGVzIGEgdHJpZ2dlciBjYWxsLCB3aGljaCBtdXN0IGZvcmNlIHNldHVwIHRocm91Z2ggalF1ZXJ5LmV2ZW50LmFkZFxuXHRpZiAoICFleHBlY3RTeW5jICkge1xuXHRcdGlmICggZGF0YVByaXYuZ2V0KCBlbCwgdHlwZSApID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQuYWRkKCBlbCwgdHlwZSwgcmV0dXJuVHJ1ZSApO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBSZWdpc3RlciB0aGUgY29udHJvbGxlciBhcyBhIHNwZWNpYWwgdW5pdmVyc2FsIGhhbmRsZXIgZm9yIGFsbCBldmVudCBuYW1lc3BhY2VzXG5cdGRhdGFQcml2LnNldCggZWwsIHR5cGUsIGZhbHNlICk7XG5cdGpRdWVyeS5ldmVudC5hZGQoIGVsLCB0eXBlLCB7XG5cdFx0bmFtZXNwYWNlOiBmYWxzZSxcblx0XHRoYW5kbGVyOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR2YXIgbm90QXN5bmMsIHJlc3VsdCxcblx0XHRcdFx0c2F2ZWQgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0aWYgKCAoIGV2ZW50LmlzVHJpZ2dlciAmIDEgKSAmJiB0aGlzWyB0eXBlIF0gKSB7XG5cblx0XHRcdFx0Ly8gSW50ZXJydXB0IHByb2Nlc3Npbmcgb2YgdGhlIG91dGVyIHN5bnRoZXRpYyAudHJpZ2dlcigpZWQgZXZlbnRcblx0XHRcdFx0Ly8gU2F2ZWQgZGF0YSBzaG91bGQgYmUgZmFsc2UgaW4gc3VjaCBjYXNlcywgYnV0IG1pZ2h0IGJlIGEgbGVmdG92ZXIgY2FwdHVyZSBvYmplY3Rcblx0XHRcdFx0Ly8gZnJvbSBhbiBhc3luYyBuYXRpdmUgaGFuZGxlciAoZ2gtNDM1MClcblx0XHRcdFx0aWYgKCAhc2F2ZWQubGVuZ3RoICkge1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgYXJndW1lbnRzIGZvciB1c2Ugd2hlbiBoYW5kbGluZyB0aGUgaW5uZXIgbmF0aXZlIGV2ZW50XG5cdFx0XHRcdFx0Ly8gVGhlcmUgd2lsbCBhbHdheXMgYmUgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IChhbiBldmVudCBvYmplY3QpLCBzbyB0aGlzIGFycmF5XG5cdFx0XHRcdFx0Ly8gd2lsbCBub3QgYmUgY29uZnVzZWQgd2l0aCBhIGxlZnRvdmVyIGNhcHR1cmUgb2JqZWN0LlxuXHRcdFx0XHRcdHNhdmVkID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCBzYXZlZCApO1xuXG5cdFx0XHRcdFx0Ly8gVHJpZ2dlciB0aGUgbmF0aXZlIGV2ZW50IGFuZCBjYXB0dXJlIGl0cyByZXN1bHRcblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcblx0XHRcdFx0XHQvLyBmb2N1cygpIGFuZCBibHVyKCkgYXJlIGFzeW5jaHJvbm91c1xuXHRcdFx0XHRcdG5vdEFzeW5jID0gZXhwZWN0U3luYyggdGhpcywgdHlwZSApO1xuXHRcdFx0XHRcdHRoaXNbIHR5cGUgXSgpO1xuXHRcdFx0XHRcdHJlc3VsdCA9IGRhdGFQcml2LmdldCggdGhpcywgdHlwZSApO1xuXHRcdFx0XHRcdGlmICggc2F2ZWQgIT09IHJlc3VsdCB8fCBub3RBc3luYyApIHtcblx0XHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwgZmFsc2UgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVzdWx0ID0ge307XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggc2F2ZWQgIT09IHJlc3VsdCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSBvdXRlciBzeW50aGV0aWMgZXZlbnRcblx0XHRcdFx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHQudmFsdWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoaXMgaXMgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IGZvciBhbiBldmVudCB3aXRoIGEgYnViYmxpbmcgc3Vycm9nYXRlXG5cdFx0XHRcdC8vIChmb2N1cyBvciBibHVyKSwgYXNzdW1lIHRoYXQgdGhlIHN1cnJvZ2F0ZSBhbHJlYWR5IHByb3BhZ2F0ZWQgZnJvbSB0cmlnZ2VyaW5nIHRoZVxuXHRcdFx0XHQvLyBuYXRpdmUgZXZlbnQgYW5kIHByZXZlbnQgdGhhdCBmcm9tIGhhcHBlbmluZyBhZ2FpbiBoZXJlLlxuXHRcdFx0XHQvLyBUaGlzIHRlY2huaWNhbGx5IGdldHMgdGhlIG9yZGVyaW5nIHdyb25nIHcuci50LiB0byBgLnRyaWdnZXIoKWAgKGluIHdoaWNoIHRoZVxuXHRcdFx0XHQvLyBidWJibGluZyBzdXJyb2dhdGUgcHJvcGFnYXRlcyAqYWZ0ZXIqIHRoZSBub24tYnViYmxpbmcgYmFzZSksIGJ1dCB0aGF0IHNlZW1zXG5cdFx0XHRcdC8vIGxlc3MgYmFkIHRoYW4gZHVwbGljYXRpb24uXG5cdFx0XHRcdH0gZWxzZSBpZiAoICggalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fSApLmRlbGVnYXRlVHlwZSApIHtcblx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgbmF0aXZlIGV2ZW50IHRyaWdnZXJlZCBhYm92ZSwgZXZlcnl0aGluZyBpcyBub3cgaW4gb3JkZXJcblx0XHRcdC8vIEZpcmUgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IHdpdGggdGhlIG9yaWdpbmFsIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggc2F2ZWQubGVuZ3RoICkge1xuXG5cdFx0XHRcdC8vIC4uLmFuZCBjYXB0dXJlIHRoZSByZXN1bHRcblx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCB7XG5cdFx0XHRcdFx0dmFsdWU6IGpRdWVyeS5ldmVudC50cmlnZ2VyKFxuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcblx0XHRcdFx0XHRcdC8vIEV4dGVuZCB3aXRoIHRoZSBwcm90b3R5cGUgdG8gcmVzZXQgdGhlIGFib3ZlIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpXG5cdFx0XHRcdFx0XHRqUXVlcnkuZXh0ZW5kKCBzYXZlZFsgMCBdLCBqUXVlcnkuRXZlbnQucHJvdG90eXBlICksXG5cdFx0XHRcdFx0XHRzYXZlZC5zbGljZSggMSApLFxuXHRcdFx0XHRcdFx0dGhpc1xuXHRcdFx0XHRcdClcblx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdC8vIEFib3J0IGhhbmRsaW5nIG9mIHRoZSBuYXRpdmUgZXZlbnRcblx0XHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9ICk7XG59XG5cbmpRdWVyeS5yZW1vdmVFdmVudCA9IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7XG5cblx0Ly8gVGhpcyBcImlmXCIgaXMgbmVlZGVkIGZvciBwbGFpbiBvYmplY3RzXG5cdGlmICggZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyICkge1xuXHRcdGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlICk7XG5cdH1cbn07XG5cbmpRdWVyeS5FdmVudCA9IGZ1bmN0aW9uKCBzcmMsIHByb3BzICkge1xuXG5cdC8vIEFsbG93IGluc3RhbnRpYXRpb24gd2l0aG91dCB0aGUgJ25ldycga2V5d29yZFxuXHRpZiAoICEoIHRoaXMgaW5zdGFuY2VvZiBqUXVlcnkuRXZlbnQgKSApIHtcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5FdmVudCggc3JjLCBwcm9wcyApO1xuXHR9XG5cblx0Ly8gRXZlbnQgb2JqZWN0XG5cdGlmICggc3JjICYmIHNyYy50eXBlICkge1xuXHRcdHRoaXMub3JpZ2luYWxFdmVudCA9IHNyYztcblx0XHR0aGlzLnR5cGUgPSBzcmMudHlwZTtcblxuXHRcdC8vIEV2ZW50cyBidWJibGluZyB1cCB0aGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVlbiBtYXJrZWQgYXMgcHJldmVudGVkXG5cdFx0Ly8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhlIGNvcnJlY3QgdmFsdWUuXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBzcmMuZGVmYXVsdFByZXZlbnRlZCB8fFxuXHRcdFx0XHRzcmMuZGVmYXVsdFByZXZlbnRlZCA9PT0gdW5kZWZpbmVkICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5XG5cdFx0XHRcdHNyYy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0cmV0dXJuVHJ1ZSA6XG5cdFx0XHRyZXR1cm5GYWxzZTtcblxuXHRcdC8vIENyZWF0ZSB0YXJnZXQgcHJvcGVydGllc1xuXHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA8PTYgLSA3IG9ubHlcblx0XHQvLyBUYXJnZXQgc2hvdWxkIG5vdCBiZSBhIHRleHQgbm9kZSAoIzUwNCwgIzEzMTQzKVxuXHRcdHRoaXMudGFyZ2V0ID0gKCBzcmMudGFyZ2V0ICYmIHNyYy50YXJnZXQubm9kZVR5cGUgPT09IDMgKSA/XG5cdFx0XHRzcmMudGFyZ2V0LnBhcmVudE5vZGUgOlxuXHRcdFx0c3JjLnRhcmdldDtcblxuXHRcdHRoaXMuY3VycmVudFRhcmdldCA9IHNyYy5jdXJyZW50VGFyZ2V0O1xuXHRcdHRoaXMucmVsYXRlZFRhcmdldCA9IHNyYy5yZWxhdGVkVGFyZ2V0O1xuXG5cdC8vIEV2ZW50IHR5cGVcblx0fSBlbHNlIHtcblx0XHR0aGlzLnR5cGUgPSBzcmM7XG5cdH1cblxuXHQvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBwcm9wZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdFxuXHRpZiAoIHByb3BzICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRoaXMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBDcmVhdGUgYSB0aW1lc3RhbXAgaWYgaW5jb21pbmcgZXZlbnQgZG9lc24ndCBoYXZlIG9uZVxuXHR0aGlzLnRpbWVTdGFtcCA9IHNyYyAmJiBzcmMudGltZVN0YW1wIHx8IERhdGUubm93KCk7XG5cblx0Ly8gTWFyayBpdCBhcyBmaXhlZFxuXHR0aGlzWyBqUXVlcnkuZXhwYW5kbyBdID0gdHJ1ZTtcbn07XG5cbi8vIGpRdWVyeS5FdmVudCBpcyBiYXNlZCBvbiBET00zIEV2ZW50cyBhcyBzcGVjaWZpZWQgYnkgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgQmluZGluZ1xuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbFxualF1ZXJ5LkV2ZW50LnByb3RvdHlwZSA9IHtcblx0Y29uc3RydWN0b3I6IGpRdWVyeS5FdmVudCxcblx0aXNEZWZhdWx0UHJldmVudGVkOiByZXR1cm5GYWxzZSxcblx0aXNQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuXHRpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXG5cdGlzU2ltdWxhdGVkOiBmYWxzZSxcblxuXHRwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9LFxuXHRzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdH1cblx0fSxcblx0c3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cblx0XHR0aGlzLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9XG59O1xuXG4vLyBJbmNsdWRlcyBhbGwgY29tbW9uIGV2ZW50IHByb3BzIGluY2x1ZGluZyBLZXlFdmVudCBhbmQgTW91c2VFdmVudCBzcGVjaWZpYyBwcm9wc1xualF1ZXJ5LmVhY2goIHtcblx0YWx0S2V5OiB0cnVlLFxuXHRidWJibGVzOiB0cnVlLFxuXHRjYW5jZWxhYmxlOiB0cnVlLFxuXHRjaGFuZ2VkVG91Y2hlczogdHJ1ZSxcblx0Y3RybEtleTogdHJ1ZSxcblx0ZGV0YWlsOiB0cnVlLFxuXHRldmVudFBoYXNlOiB0cnVlLFxuXHRtZXRhS2V5OiB0cnVlLFxuXHRwYWdlWDogdHJ1ZSxcblx0cGFnZVk6IHRydWUsXG5cdHNoaWZ0S2V5OiB0cnVlLFxuXHR2aWV3OiB0cnVlLFxuXHRcImNoYXJcIjogdHJ1ZSxcblx0Y29kZTogdHJ1ZSxcblx0Y2hhckNvZGU6IHRydWUsXG5cdGtleTogdHJ1ZSxcblx0a2V5Q29kZTogdHJ1ZSxcblx0YnV0dG9uOiB0cnVlLFxuXHRidXR0b25zOiB0cnVlLFxuXHRjbGllbnRYOiB0cnVlLFxuXHRjbGllbnRZOiB0cnVlLFxuXHRvZmZzZXRYOiB0cnVlLFxuXHRvZmZzZXRZOiB0cnVlLFxuXHRwb2ludGVySWQ6IHRydWUsXG5cdHBvaW50ZXJUeXBlOiB0cnVlLFxuXHRzY3JlZW5YOiB0cnVlLFxuXHRzY3JlZW5ZOiB0cnVlLFxuXHR0YXJnZXRUb3VjaGVzOiB0cnVlLFxuXHR0b0VsZW1lbnQ6IHRydWUsXG5cdHRvdWNoZXM6IHRydWUsXG5cblx0d2hpY2g6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHR2YXIgYnV0dG9uID0gZXZlbnQuYnV0dG9uO1xuXG5cdFx0Ly8gQWRkIHdoaWNoIGZvciBrZXkgZXZlbnRzXG5cdFx0aWYgKCBldmVudC53aGljaCA9PSBudWxsICYmIHJrZXlFdmVudC50ZXN0KCBldmVudC50eXBlICkgKSB7XG5cdFx0XHRyZXR1cm4gZXZlbnQuY2hhckNvZGUgIT0gbnVsbCA/IGV2ZW50LmNoYXJDb2RlIDogZXZlbnQua2V5Q29kZTtcblx0XHR9XG5cblx0XHQvLyBBZGQgd2hpY2ggZm9yIGNsaWNrOiAxID09PSBsZWZ0OyAyID09PSBtaWRkbGU7IDMgPT09IHJpZ2h0XG5cdFx0aWYgKCAhZXZlbnQud2hpY2ggJiYgYnV0dG9uICE9PSB1bmRlZmluZWQgJiYgcm1vdXNlRXZlbnQudGVzdCggZXZlbnQudHlwZSApICkge1xuXHRcdFx0aWYgKCBidXR0b24gJiAxICkge1xuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBidXR0b24gJiAyICkge1xuXHRcdFx0XHRyZXR1cm4gMztcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBidXR0b24gJiA0ICkge1xuXHRcdFx0XHRyZXR1cm4gMjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LndoaWNoO1xuXHR9XG59LCBqUXVlcnkuZXZlbnQuYWRkUHJvcCApO1xuXG5qUXVlcnkuZWFjaCggeyBmb2N1czogXCJmb2N1c2luXCIsIGJsdXI6IFwiZm9jdXNvdXRcIiB9LCBmdW5jdGlvbiggdHlwZSwgZGVsZWdhdGVUeXBlICkge1xuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdID0ge1xuXG5cdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgaWYgcG9zc2libGUgc28gYmx1ci9mb2N1cyBzZXF1ZW5jZSBpcyBjb3JyZWN0XG5cdFx0c2V0dXA6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBDbGFpbSB0aGUgZmlyc3QgaGFuZGxlclxuXHRcdFx0Ly8gZGF0YVByaXYuc2V0KCB0aGlzLCBcImZvY3VzXCIsIC4uLiApXG5cdFx0XHQvLyBkYXRhUHJpdi5zZXQoIHRoaXMsIFwiYmx1clwiLCAuLi4gKVxuXHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIHRoaXMsIHR5cGUsIGV4cGVjdFN5bmMgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBGb3JjZSBzZXR1cCBiZWZvcmUgdHJpZ2dlclxuXHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdGRlbGVnYXRlVHlwZTogZGVsZWdhdGVUeXBlXG5cdH07XG59ICk7XG5cbi8vIENyZWF0ZSBtb3VzZWVudGVyL2xlYXZlIGV2ZW50cyB1c2luZyBtb3VzZW92ZXIvb3V0IGFuZCBldmVudC10aW1lIGNoZWNrc1xuLy8gc28gdGhhdCBldmVudCBkZWxlZ2F0aW9uIHdvcmtzIGluIGpRdWVyeS5cbi8vIERvIHRoZSBzYW1lIGZvciBwb2ludGVyZW50ZXIvcG9pbnRlcmxlYXZlIGFuZCBwb2ludGVyb3Zlci9wb2ludGVyb3V0XG4vL1xuLy8gU3VwcG9ydDogU2FmYXJpIDcgb25seVxuLy8gU2FmYXJpIHNlbmRzIG1vdXNlZW50ZXIgdG9vIG9mdGVuOyBzZWU6XG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NzAyNThcbi8vIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGJ1ZyAoaXQgZXhpc3RlZCBpbiBvbGRlciBDaHJvbWUgdmVyc2lvbnMgYXMgd2VsbCkuXG5qUXVlcnkuZWFjaCgge1xuXHRtb3VzZWVudGVyOiBcIm1vdXNlb3ZlclwiLFxuXHRtb3VzZWxlYXZlOiBcIm1vdXNlb3V0XCIsXG5cdHBvaW50ZXJlbnRlcjogXCJwb2ludGVyb3ZlclwiLFxuXHRwb2ludGVybGVhdmU6IFwicG9pbnRlcm91dFwiXG59LCBmdW5jdGlvbiggb3JpZywgZml4ICkge1xuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgb3JpZyBdID0ge1xuXHRcdGRlbGVnYXRlVHlwZTogZml4LFxuXHRcdGJpbmRUeXBlOiBmaXgsXG5cblx0XHRoYW5kbGU6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciByZXQsXG5cdFx0XHRcdHRhcmdldCA9IHRoaXMsXG5cdFx0XHRcdHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0LFxuXHRcdFx0XHRoYW5kbGVPYmogPSBldmVudC5oYW5kbGVPYmo7XG5cblx0XHRcdC8vIEZvciBtb3VzZWVudGVyL2xlYXZlIGNhbGwgdGhlIGhhbmRsZXIgaWYgcmVsYXRlZCBpcyBvdXRzaWRlIHRoZSB0YXJnZXQuXG5cdFx0XHQvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUgbW91c2UgbGVmdC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvd1xuXHRcdFx0aWYgKCAhcmVsYXRlZCB8fCAoIHJlbGF0ZWQgIT09IHRhcmdldCAmJiAhalF1ZXJ5LmNvbnRhaW5zKCB0YXJnZXQsIHJlbGF0ZWQgKSApICkge1xuXHRcdFx0XHRldmVudC50eXBlID0gaGFuZGxlT2JqLm9yaWdUeXBlO1xuXHRcdFx0XHRyZXQgPSBoYW5kbGVPYmouaGFuZGxlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBmaXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdG9uOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTtcblx0fSxcblx0b25lOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIDEgKTtcblx0fSxcblx0b2ZmOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBmbiApIHtcblx0XHR2YXIgaGFuZGxlT2JqLCB0eXBlO1xuXHRcdGlmICggdHlwZXMgJiYgdHlwZXMucHJldmVudERlZmF1bHQgJiYgdHlwZXMuaGFuZGxlT2JqICkge1xuXG5cdFx0XHQvLyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQgalF1ZXJ5LkV2ZW50XG5cdFx0XHRoYW5kbGVPYmogPSB0eXBlcy5oYW5kbGVPYmo7XG5cdFx0XHRqUXVlcnkoIHR5cGVzLmRlbGVnYXRlVGFyZ2V0ICkub2ZmKFxuXHRcdFx0XHRoYW5kbGVPYmoubmFtZXNwYWNlID9cblx0XHRcdFx0XHRoYW5kbGVPYmoub3JpZ1R5cGUgKyBcIi5cIiArIGhhbmRsZU9iai5uYW1lc3BhY2UgOlxuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSxcblx0XHRcdFx0aGFuZGxlT2JqLnNlbGVjdG9yLFxuXHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlclxuXHRcdFx0KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcy1vYmplY3QgWywgc2VsZWN0b3JdIClcblx0XHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRcdHRoaXMub2ZmKCB0eXBlLCBzZWxlY3RvciwgdHlwZXNbIHR5cGUgXSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggc2VsZWN0b3IgPT09IGZhbHNlIHx8IHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzIFssIGZuXSApXG5cdFx0XHRmbiA9IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggZm4gPT09IGZhbHNlICkge1xuXHRcdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCB0eXBlcywgZm4sIHNlbGVjdG9yICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cblxudmFyXG5cblx0LyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuXG5cdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZXNsaW50L2VzbGludC9pc3N1ZXMvMzIyOVxuXHRyeGh0bWxUYWcgPSAvPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbYS16XVteXFwvXFwwPlxceDIwXFx0XFxyXFxuXFxmXSopW14+XSopXFwvPi9naSxcblxuXHQvKiBlc2xpbnQtZW5hYmxlICovXG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMCAtIDExLCBFZGdlIDEyIC0gMTMgb25seVxuXHQvLyBJbiBJRS9FZGdlIHVzaW5nIHJlZ2V4IGdyb3VwcyBoZXJlIGNhdXNlcyBzZXZlcmUgc2xvd2Rvd25zLlxuXHQvLyBTZWUgaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2svZGV0YWlscy8xNzM2NTEyL1xuXHRybm9Jbm5lcmh0bWwgPSAvPHNjcmlwdHw8c3R5bGV8PGxpbmsvaSxcblxuXHQvLyBjaGVja2VkPVwiY2hlY2tlZFwiIG9yIGNoZWNrZWRcblx0cmNoZWNrZWQgPSAvY2hlY2tlZFxccyooPzpbXj1dfD1cXHMqLmNoZWNrZWQuKS9pLFxuXHRyY2xlYW5TY3JpcHQgPSAvXlxccyo8ISg/OlxcW0NEQVRBXFxbfC0tKXwoPzpcXF1cXF18LS0pPlxccyokL2c7XG5cbi8vIFByZWZlciBhIHRib2R5IG92ZXIgaXRzIHBhcmVudCB0YWJsZSBmb3IgY29udGFpbmluZyBuZXcgcm93c1xuZnVuY3Rpb24gbWFuaXB1bGF0aW9uVGFyZ2V0KCBlbGVtLCBjb250ZW50ICkge1xuXHRpZiAoIG5vZGVOYW1lKCBlbGVtLCBcInRhYmxlXCIgKSAmJlxuXHRcdG5vZGVOYW1lKCBjb250ZW50Lm5vZGVUeXBlICE9PSAxMSA/IGNvbnRlbnQgOiBjb250ZW50LmZpcnN0Q2hpbGQsIFwidHJcIiApICkge1xuXG5cdFx0cmV0dXJuIGpRdWVyeSggZWxlbSApLmNoaWxkcmVuKCBcInRib2R5XCIgKVsgMCBdIHx8IGVsZW07XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxuLy8gUmVwbGFjZS9yZXN0b3JlIHRoZSB0eXBlIGF0dHJpYnV0ZSBvZiBzY3JpcHQgZWxlbWVudHMgZm9yIHNhZmUgRE9NIG1hbmlwdWxhdGlvblxuZnVuY3Rpb24gZGlzYWJsZVNjcmlwdCggZWxlbSApIHtcblx0ZWxlbS50eXBlID0gKCBlbGVtLmdldEF0dHJpYnV0ZSggXCJ0eXBlXCIgKSAhPT0gbnVsbCApICsgXCIvXCIgKyBlbGVtLnR5cGU7XG5cdHJldHVybiBlbGVtO1xufVxuZnVuY3Rpb24gcmVzdG9yZVNjcmlwdCggZWxlbSApIHtcblx0aWYgKCAoIGVsZW0udHlwZSB8fCBcIlwiICkuc2xpY2UoIDAsIDUgKSA9PT0gXCJ0cnVlL1wiICkge1xuXHRcdGVsZW0udHlwZSA9IGVsZW0udHlwZS5zbGljZSggNSApO1xuXHR9IGVsc2Uge1xuXHRcdGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBcInR5cGVcIiApO1xuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbmZ1bmN0aW9uIGNsb25lQ29weUV2ZW50KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBpLCBsLCB0eXBlLCBwZGF0YU9sZCwgcGRhdGFDdXIsIHVkYXRhT2xkLCB1ZGF0YUN1ciwgZXZlbnRzO1xuXG5cdGlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyAxLiBDb3B5IHByaXZhdGUgZGF0YTogZXZlbnRzLCBoYW5kbGVycywgZXRjLlxuXHRpZiAoIGRhdGFQcml2Lmhhc0RhdGEoIHNyYyApICkge1xuXHRcdHBkYXRhT2xkID0gZGF0YVByaXYuYWNjZXNzKCBzcmMgKTtcblx0XHRwZGF0YUN1ciA9IGRhdGFQcml2LnNldCggZGVzdCwgcGRhdGFPbGQgKTtcblx0XHRldmVudHMgPSBwZGF0YU9sZC5ldmVudHM7XG5cblx0XHRpZiAoIGV2ZW50cyApIHtcblx0XHRcdGRlbGV0ZSBwZGF0YUN1ci5oYW5kbGU7XG5cdFx0XHRwZGF0YUN1ci5ldmVudHMgPSB7fTtcblxuXHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XG5cdFx0XHRcdGZvciAoIGkgPSAwLCBsID0gZXZlbnRzWyB0eXBlIF0ubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5hZGQoIGRlc3QsIHR5cGUsIGV2ZW50c1sgdHlwZSBdWyBpIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIDIuIENvcHkgdXNlciBkYXRhXG5cdGlmICggZGF0YVVzZXIuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0dWRhdGFPbGQgPSBkYXRhVXNlci5hY2Nlc3MoIHNyYyApO1xuXHRcdHVkYXRhQ3VyID0galF1ZXJ5LmV4dGVuZCgge30sIHVkYXRhT2xkICk7XG5cblx0XHRkYXRhVXNlci5zZXQoIGRlc3QsIHVkYXRhQ3VyICk7XG5cdH1cbn1cblxuLy8gRml4IElFIGJ1Z3MsIHNlZSBzdXBwb3J0IHRlc3RzXG5mdW5jdGlvbiBmaXhJbnB1dCggc3JjLCBkZXN0ICkge1xuXHR2YXIgbm9kZU5hbWUgPSBkZXN0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0Ly8gRmFpbHMgdG8gcGVyc2lzdCB0aGUgY2hlY2tlZCBzdGF0ZSBvZiBhIGNsb25lZCBjaGVja2JveCBvciByYWRpbyBidXR0b24uXG5cdGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJiByY2hlY2thYmxlVHlwZS50ZXN0KCBzcmMudHlwZSApICkge1xuXHRcdGRlc3QuY2hlY2tlZCA9IHNyYy5jaGVja2VkO1xuXG5cdC8vIEZhaWxzIHRvIHJldHVybiB0aGUgc2VsZWN0ZWQgb3B0aW9uIHRvIHRoZSBkZWZhdWx0IHNlbGVjdGVkIHN0YXRlIHdoZW4gY2xvbmluZyBvcHRpb25zXG5cdH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgfHwgbm9kZU5hbWUgPT09IFwidGV4dGFyZWFcIiApIHtcblx0XHRkZXN0LmRlZmF1bHRWYWx1ZSA9IHNyYy5kZWZhdWx0VmFsdWU7XG5cdH1cbn1cblxuZnVuY3Rpb24gZG9tTWFuaXAoIGNvbGxlY3Rpb24sIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICkge1xuXG5cdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0YXJncyA9IGNvbmNhdC5hcHBseSggW10sIGFyZ3MgKTtcblxuXHR2YXIgZnJhZ21lbnQsIGZpcnN0LCBzY3JpcHRzLCBoYXNTY3JpcHRzLCBub2RlLCBkb2MsXG5cdFx0aSA9IDAsXG5cdFx0bCA9IGNvbGxlY3Rpb24ubGVuZ3RoLFxuXHRcdGlOb0Nsb25lID0gbCAtIDEsXG5cdFx0dmFsdWUgPSBhcmdzWyAwIF0sXG5cdFx0dmFsdWVJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHQvLyBXZSBjYW4ndCBjbG9uZU5vZGUgZnJhZ21lbnRzIHRoYXQgY29udGFpbiBjaGVja2VkLCBpbiBXZWJLaXRcblx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gfHxcblx0XHRcdCggbCA+IDEgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCFzdXBwb3J0LmNoZWNrQ2xvbmUgJiYgcmNoZWNrZWQudGVzdCggdmFsdWUgKSApICkge1xuXHRcdHJldHVybiBjb2xsZWN0aW9uLmVhY2goIGZ1bmN0aW9uKCBpbmRleCApIHtcblx0XHRcdHZhciBzZWxmID0gY29sbGVjdGlvbi5lcSggaW5kZXggKTtcblx0XHRcdGlmICggdmFsdWVJc0Z1bmN0aW9uICkge1xuXHRcdFx0XHRhcmdzWyAwIF0gPSB2YWx1ZS5jYWxsKCB0aGlzLCBpbmRleCwgc2VsZi5odG1sKCkgKTtcblx0XHRcdH1cblx0XHRcdGRvbU1hbmlwKCBzZWxmLCBhcmdzLCBjYWxsYmFjaywgaWdub3JlZCApO1xuXHRcdH0gKTtcblx0fVxuXG5cdGlmICggbCApIHtcblx0XHRmcmFnbWVudCA9IGJ1aWxkRnJhZ21lbnQoIGFyZ3MsIGNvbGxlY3Rpb25bIDAgXS5vd25lckRvY3VtZW50LCBmYWxzZSwgY29sbGVjdGlvbiwgaWdub3JlZCApO1xuXHRcdGZpcnN0ID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcblxuXHRcdGlmICggZnJhZ21lbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEgKSB7XG5cdFx0XHRmcmFnbWVudCA9IGZpcnN0O1xuXHRcdH1cblxuXHRcdC8vIFJlcXVpcmUgZWl0aGVyIG5ldyBjb250ZW50IG9yIGFuIGludGVyZXN0IGluIGlnbm9yZWQgZWxlbWVudHMgdG8gaW52b2tlIHRoZSBjYWxsYmFja1xuXHRcdGlmICggZmlyc3QgfHwgaWdub3JlZCApIHtcblx0XHRcdHNjcmlwdHMgPSBqUXVlcnkubWFwKCBnZXRBbGwoIGZyYWdtZW50LCBcInNjcmlwdFwiICksIGRpc2FibGVTY3JpcHQgKTtcblx0XHRcdGhhc1NjcmlwdHMgPSBzY3JpcHRzLmxlbmd0aDtcblxuXHRcdFx0Ly8gVXNlIHRoZSBvcmlnaW5hbCBmcmFnbWVudCBmb3IgdGhlIGxhc3QgaXRlbVxuXHRcdFx0Ly8gaW5zdGVhZCBvZiB0aGUgZmlyc3QgYmVjYXVzZSBpdCBjYW4gZW5kIHVwXG5cdFx0XHQvLyBiZWluZyBlbXB0aWVkIGluY29ycmVjdGx5IGluIGNlcnRhaW4gc2l0dWF0aW9ucyAoIzgwNzApLlxuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRub2RlID0gZnJhZ21lbnQ7XG5cblx0XHRcdFx0aWYgKCBpICE9PSBpTm9DbG9uZSApIHtcblx0XHRcdFx0XHRub2RlID0galF1ZXJ5LmNsb25lKCBub2RlLCB0cnVlLCB0cnVlICk7XG5cblx0XHRcdFx0XHQvLyBLZWVwIHJlZmVyZW5jZXMgdG8gY2xvbmVkIHNjcmlwdHMgZm9yIGxhdGVyIHJlc3RvcmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggc2NyaXB0cywgZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYWxsYmFjay5jYWxsKCBjb2xsZWN0aW9uWyBpIF0sIG5vZGUsIGkgKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXHRcdFx0XHRkb2MgPSBzY3JpcHRzWyBzY3JpcHRzLmxlbmd0aCAtIDEgXS5vd25lckRvY3VtZW50O1xuXG5cdFx0XHRcdC8vIFJlZW5hYmxlIHNjcmlwdHNcblx0XHRcdFx0alF1ZXJ5Lm1hcCggc2NyaXB0cywgcmVzdG9yZVNjcmlwdCApO1xuXG5cdFx0XHRcdC8vIEV2YWx1YXRlIGV4ZWN1dGFibGUgc2NyaXB0cyBvbiBmaXJzdCBkb2N1bWVudCBpbnNlcnRpb25cblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBoYXNTY3JpcHRzOyBpKysgKSB7XG5cdFx0XHRcdFx0bm9kZSA9IHNjcmlwdHNbIGkgXTtcblx0XHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIG5vZGUudHlwZSB8fCBcIlwiICkgJiZcblx0XHRcdFx0XHRcdCFkYXRhUHJpdi5hY2Nlc3MoIG5vZGUsIFwiZ2xvYmFsRXZhbFwiICkgJiZcblx0XHRcdFx0XHRcdGpRdWVyeS5jb250YWlucyggZG9jLCBub2RlICkgKSB7XG5cblx0XHRcdFx0XHRcdGlmICggbm9kZS5zcmMgJiYgKCBub2RlLnR5cGUgfHwgXCJcIiApLnRvTG93ZXJDYXNlKCkgICE9PSBcIm1vZHVsZVwiICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIE9wdGlvbmFsIEFKQVggZGVwZW5kZW5jeSwgYnV0IHdvbid0IHJ1biBzY3JpcHRzIGlmIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5Ll9ldmFsVXJsICYmICFub2RlLm5vTW9kdWxlICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5fZXZhbFVybCggbm9kZS5zcmMsIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5vbmNlOiBub2RlLm5vbmNlIHx8IG5vZGUuZ2V0QXR0cmlidXRlKCBcIm5vbmNlXCIgKVxuXHRcdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0RE9NRXZhbCggbm9kZS50ZXh0Q29udGVudC5yZXBsYWNlKCByY2xlYW5TY3JpcHQsIFwiXCIgKSwgbm9kZSwgZG9jICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGNvbGxlY3Rpb247XG59XG5cbmZ1bmN0aW9uIHJlbW92ZSggZWxlbSwgc2VsZWN0b3IsIGtlZXBEYXRhICkge1xuXHR2YXIgbm9kZSxcblx0XHRub2RlcyA9IHNlbGVjdG9yID8galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIGVsZW0gKSA6IGVsZW0sXG5cdFx0aSA9IDA7XG5cblx0Zm9yICggOyAoIG5vZGUgPSBub2Rlc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdGlmICggIWtlZXBEYXRhICYmIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIG5vZGUgKSApO1xuXHRcdH1cblxuXHRcdGlmICggbm9kZS5wYXJlbnROb2RlICkge1xuXHRcdFx0aWYgKCBrZWVwRGF0YSAmJiBpc0F0dGFjaGVkKCBub2RlICkgKSB7XG5cdFx0XHRcdHNldEdsb2JhbEV2YWwoIGdldEFsbCggbm9kZSwgXCJzY3JpcHRcIiApICk7XG5cdFx0XHR9XG5cdFx0XHRub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIG5vZGUgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRodG1sUHJlZmlsdGVyOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHRyZXR1cm4gaHRtbC5yZXBsYWNlKCByeGh0bWxUYWcsIFwiPCQxPjwvJDI+XCIgKTtcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oIGVsZW0sIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdHZhciBpLCBsLCBzcmNFbGVtZW50cywgZGVzdEVsZW1lbnRzLFxuXHRcdFx0Y2xvbmUgPSBlbGVtLmNsb25lTm9kZSggdHJ1ZSApLFxuXHRcdFx0aW5QYWdlID0gaXNBdHRhY2hlZCggZWxlbSApO1xuXG5cdFx0Ly8gRml4IElFIGNsb25pbmcgaXNzdWVzXG5cdFx0aWYgKCAhc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCAmJiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgZWxlbS5ub2RlVHlwZSA9PT0gMTEgKSAmJlxuXHRcdFx0XHQhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIFdlIGVzY2hldyBTaXp6bGUgaGVyZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29uczogaHR0cHM6Ly9qc3BlcmYuY29tL2dldGFsbC12cy1zaXp6bGUvMlxuXHRcdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSApO1xuXHRcdFx0c3JjRWxlbWVudHMgPSBnZXRBbGwoIGVsZW0gKTtcblxuXHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGZpeElucHV0KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENvcHkgdGhlIGV2ZW50cyBmcm9tIHRoZSBvcmlnaW5hbCB0byB0aGUgY2xvbmVcblx0XHRpZiAoIGRhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRpZiAoIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdFx0XHRzcmNFbGVtZW50cyA9IHNyY0VsZW1lbnRzIHx8IGdldEFsbCggZWxlbSApO1xuXHRcdFx0XHRkZXN0RWxlbWVudHMgPSBkZXN0RWxlbWVudHMgfHwgZ2V0QWxsKCBjbG9uZSApO1xuXG5cdFx0XHRcdGZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdGNsb25lQ29weUV2ZW50KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjbG9uZUNvcHlFdmVudCggZWxlbSwgY2xvbmUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XG5cdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSwgXCJzY3JpcHRcIiApO1xuXHRcdGlmICggZGVzdEVsZW1lbnRzLmxlbmd0aCA+IDAgKSB7XG5cdFx0XHRzZXRHbG9iYWxFdmFsKCBkZXN0RWxlbWVudHMsICFpblBhZ2UgJiYgZ2V0QWxsKCBlbGVtLCBcInNjcmlwdFwiICkgKTtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gdGhlIGNsb25lZCBzZXRcblx0XHRyZXR1cm4gY2xvbmU7XG5cdH0sXG5cblx0Y2xlYW5EYXRhOiBmdW5jdGlvbiggZWxlbXMgKSB7XG5cdFx0dmFyIGRhdGEsIGVsZW0sIHR5cGUsXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWwsXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgKCBlbGVtID0gZWxlbXNbIGkgXSApICE9PSB1bmRlZmluZWQ7IGkrKyApIHtcblx0XHRcdGlmICggYWNjZXB0RGF0YSggZWxlbSApICkge1xuXHRcdFx0XHRpZiAoICggZGF0YSA9IGVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSApICkge1xuXHRcdFx0XHRcdGlmICggZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRmb3IgKCB0eXBlIGluIGRhdGEuZXZlbnRzICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWxbIHR5cGUgXSApIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGF2b2lkIGpRdWVyeS5ldmVudC5yZW1vdmUncyBvdmVyaGVhZFxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZGF0YS5oYW5kbGUgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDUrXG5cdFx0XHRcdFx0Ly8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlXG5cdFx0XHRcdFx0ZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdICkge1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRkZXRhY2g6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yICk7XG5cdH0sXG5cblx0dGV4dDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0alF1ZXJ5LnRleHQoIHRoaXMgKSA6XG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRcdHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0LmFwcGVuZENoaWxkKCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdHByZXBlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7XG5cdFx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoIGVsZW0sIHRhcmdldC5maXJzdENoaWxkICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGJlZm9yZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0YWZ0ZXI6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzLm5leHRTaWJsaW5nICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGVtcHR5OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZWxlbSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoIGVsZW0gPSB0aGlzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gUHJldmVudCBtZW1vcnkgbGVha3Ncblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7XG5cblx0XHRcdFx0Ly8gUmVtb3ZlIGFueSByZW1haW5pbmcgbm9kZXNcblx0XHRcdFx0ZWxlbS50ZXh0Q29udGVudCA9IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHRkYXRhQW5kRXZlbnRzID0gZGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZmFsc2UgOiBkYXRhQW5kRXZlbnRzO1xuXHRcdGRlZXBEYXRhQW5kRXZlbnRzID0gZGVlcERhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGRhdGFBbmRFdmVudHMgOiBkZWVwRGF0YUFuZEV2ZW50cztcblxuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNsb25lKCB0aGlzLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApO1xuXHRcdH0gKTtcblx0fSxcblxuXHRodG1sOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGVsZW0gPSB0aGlzWyAwIF0gfHwge30sXG5cdFx0XHRcdGkgPSAwLFxuXHRcdFx0XHRsID0gdGhpcy5sZW5ndGg7XG5cblx0XHRcdGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5pbm5lckhUTUw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNlZSBpZiB3ZSBjYW4gdGFrZSBhIHNob3J0Y3V0IGFuZCBqdXN0IHVzZSBpbm5lckhUTUxcblx0XHRcdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmICFybm9Jbm5lcmh0bWwudGVzdCggdmFsdWUgKSAmJlxuXHRcdFx0XHQhd3JhcE1hcFsgKCBydGFnTmFtZS5leGVjKCB2YWx1ZSApIHx8IFsgXCJcIiwgXCJcIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpIF0gKSB7XG5cblx0XHRcdFx0dmFsdWUgPSBqUXVlcnkuaHRtbFByZWZpbHRlciggdmFsdWUgKTtcblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRcdGVsZW0gPSB0aGlzWyBpIF0gfHwge307XG5cblx0XHRcdFx0XHRcdC8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrc1xuXHRcdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcblx0XHRcdFx0XHRcdFx0ZWxlbS5pbm5lckhUTUwgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlbGVtID0gMDtcblxuXHRcdFx0XHQvLyBJZiB1c2luZyBpbm5lckhUTUwgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRob2Rcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5hcHBlbmQoIHZhbHVlICk7XG5cdFx0XHR9XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fSxcblxuXHRyZXBsYWNlV2l0aDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGlnbm9yZWQgPSBbXTtcblxuXHRcdC8vIE1ha2UgdGhlIGNoYW5nZXMsIHJlcGxhY2luZyBlYWNoIG5vbi1pZ25vcmVkIGNvbnRleHQgZWxlbWVudCB3aXRoIHRoZSBuZXcgY29udGVudFxuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG5cblx0XHRcdGlmICggalF1ZXJ5LmluQXJyYXkoIHRoaXMsIGlnbm9yZWQgKSA8IDAgKSB7XG5cdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggdGhpcyApICk7XG5cdFx0XHRcdGlmICggcGFyZW50ICkge1xuXHRcdFx0XHRcdHBhcmVudC5yZXBsYWNlQ2hpbGQoIGVsZW0sIHRoaXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gRm9yY2UgY2FsbGJhY2sgaW52b2NhdGlvblxuXHRcdH0sIGlnbm9yZWQgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCgge1xuXHRhcHBlbmRUbzogXCJhcHBlbmRcIixcblx0cHJlcGVuZFRvOiBcInByZXBlbmRcIixcblx0aW5zZXJ0QmVmb3JlOiBcImJlZm9yZVwiLFxuXHRpbnNlcnRBZnRlcjogXCJhZnRlclwiLFxuXHRyZXBsYWNlQWxsOiBcInJlcGxhY2VXaXRoXCJcbn0sIGZ1bmN0aW9uKCBuYW1lLCBvcmlnaW5hbCApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGVsZW1zLFxuXHRcdFx0cmV0ID0gW10sXG5cdFx0XHRpbnNlcnQgPSBqUXVlcnkoIHNlbGVjdG9yICksXG5cdFx0XHRsYXN0ID0gaW5zZXJ0Lmxlbmd0aCAtIDEsXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgaSA8PSBsYXN0OyBpKysgKSB7XG5cdFx0XHRlbGVtcyA9IGkgPT09IGxhc3QgPyB0aGlzIDogdGhpcy5jbG9uZSggdHJ1ZSApO1xuXHRcdFx0alF1ZXJ5KCBpbnNlcnRbIGkgXSApWyBvcmlnaW5hbCBdKCBlbGVtcyApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdC8vIC5nZXQoKSBiZWNhdXNlIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdHB1c2guYXBwbHkoIHJldCwgZWxlbXMuZ2V0KCkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCApO1xuXHR9O1xufSApO1xudmFyIHJudW1ub25weCA9IG5ldyBSZWdFeHAoIFwiXihcIiArIHBudW0gKyBcIikoPyFweClbYS16JV0rJFwiLCBcImlcIiApO1xuXG52YXIgZ2V0U3R5bGVzID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHksIEZpcmVmb3ggPD0zMCAoIzE1MDk4LCAjMTQxNTApXG5cdFx0Ly8gSUUgdGhyb3dzIG9uIGVsZW1lbnRzIGNyZWF0ZWQgaW4gcG9wdXBzXG5cdFx0Ly8gRkYgbWVhbndoaWxlIHRocm93cyBvbiBmcmFtZSBlbGVtZW50cyB0aHJvdWdoIFwiZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZVwiXG5cdFx0dmFyIHZpZXcgPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG5cblx0XHRpZiAoICF2aWV3IHx8ICF2aWV3Lm9wZW5lciApIHtcblx0XHRcdHZpZXcgPSB3aW5kb3c7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSApO1xuXHR9O1xuXG52YXIgcmJveFN0eWxlID0gbmV3IFJlZ0V4cCggY3NzRXhwYW5kLmpvaW4oIFwifFwiICksIFwiaVwiICk7XG5cblxuXG4oIGZ1bmN0aW9uKCkge1xuXG5cdC8vIEV4ZWN1dGluZyBib3RoIHBpeGVsUG9zaXRpb24gJiBib3hTaXppbmdSZWxpYWJsZSB0ZXN0cyByZXF1aXJlIG9ubHkgb25lIGxheW91dFxuXHQvLyBzbyB0aGV5J3JlIGV4ZWN1dGVkIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSB0aGUgc2Vjb25kIGNvbXB1dGF0aW9uLlxuXHRmdW5jdGlvbiBjb21wdXRlU3R5bGVUZXN0cygpIHtcblxuXHRcdC8vIFRoaXMgaXMgYSBzaW5nbGV0b24sIHdlIG5lZWQgdG8gZXhlY3V0ZSBpdCBvbmx5IG9uY2Vcblx0XHRpZiAoICFkaXYgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDtcIiArXG5cdFx0XHRcIm1hcmdpbi10b3A6MXB4O3BhZGRpbmc6MDtib3JkZXI6MFwiO1xuXHRcdGRpdi5zdHlsZS5jc3NUZXh0ID1cblx0XHRcdFwicG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6c2Nyb2xsO1wiICtcblx0XHRcdFwibWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDtcIiArXG5cdFx0XHRcIndpZHRoOjYwJTt0b3A6MSVcIjtcblx0XHRkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGNvbnRhaW5lciApLmFwcGVuZENoaWxkKCBkaXYgKTtcblxuXHRcdHZhciBkaXZTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYgKTtcblx0XHRwaXhlbFBvc2l0aW9uVmFsID0gZGl2U3R5bGUudG9wICE9PSBcIjElXCI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBGaXJlZm94IDw9MyAtIDQ0XG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0VmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5tYXJnaW5MZWZ0ICkgPT09IDEyO1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seSwgU2FmYXJpIDw9OS4xIC0gMTAuMSwgaU9TIDw9Ny4wIC0gOS4zXG5cdFx0Ly8gU29tZSBzdHlsZXMgY29tZSBiYWNrIHdpdGggcGVyY2VudGFnZSB2YWx1ZXMsIGV2ZW4gdGhvdWdoIHRoZXkgc2hvdWxkbid0XG5cdFx0ZGl2LnN0eWxlLnJpZ2h0ID0gXCI2MCVcIjtcblx0XHRwaXhlbEJveFN0eWxlc1ZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUucmlnaHQgKSA9PT0gMzY7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seVxuXHRcdC8vIERldGVjdCBtaXNyZXBvcnRpbmcgb2YgY29udGVudCBkaW1lbnNpb25zIGZvciBib3gtc2l6aW5nOmJvcmRlci1ib3ggZWxlbWVudHNcblx0XHRib3hTaXppbmdSZWxpYWJsZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUud2lkdGggKSA9PT0gMzY7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHQvLyBEZXRlY3Qgb3ZlcmZsb3c6c2Nyb2xsIHNjcmV3aW5lc3MgKGdoLTM2OTkpXG5cdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9NjRcblx0XHQvLyBEb24ndCBnZXQgdHJpY2tlZCB3aGVuIHpvb20gYWZmZWN0cyBvZmZzZXRXaWR0aCAoZ2gtNDAyOSlcblx0XHRkaXYuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cdFx0c2Nyb2xsYm94U2l6ZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2Lm9mZnNldFdpZHRoIC8gMyApID09PSAxMjtcblxuXHRcdGRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggY29udGFpbmVyICk7XG5cblx0XHQvLyBOdWxsaWZ5IHRoZSBkaXYgc28gaXQgd291bGRuJ3QgYmUgc3RvcmVkIGluIHRoZSBtZW1vcnkgYW5kXG5cdFx0Ly8gaXQgd2lsbCBhbHNvIGJlIGEgc2lnbiB0aGF0IGNoZWNrcyBhbHJlYWR5IHBlcmZvcm1lZFxuXHRcdGRpdiA9IG51bGw7XG5cdH1cblxuXHRmdW5jdGlvbiByb3VuZFBpeGVsTWVhc3VyZXMoIG1lYXN1cmUgKSB7XG5cdFx0cmV0dXJuIE1hdGgucm91bmQoIHBhcnNlRmxvYXQoIG1lYXN1cmUgKSApO1xuXHR9XG5cblx0dmFyIHBpeGVsUG9zaXRpb25WYWwsIGJveFNpemluZ1JlbGlhYmxlVmFsLCBzY3JvbGxib3hTaXplVmFsLCBwaXhlbEJveFN0eWxlc1ZhbCxcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnRWYWwsXG5cdFx0Y29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLFxuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKTtcblxuXHQvLyBGaW5pc2ggZWFybHkgaW4gbGltaXRlZCAobm9uLWJyb3dzZXIpIGVudmlyb25tZW50c1xuXHRpZiAoICFkaXYuc3R5bGUgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHQvLyBTdHlsZSBvZiBjbG9uZWQgZWxlbWVudCBhZmZlY3RzIHNvdXJjZSBlbGVtZW50IGNsb25lZCAoIzg5MDgpXG5cdGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9IFwiY29udGVudC1ib3hcIjtcblx0ZGl2LmNsb25lTm9kZSggdHJ1ZSApLnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJcIjtcblx0c3VwcG9ydC5jbGVhckNsb25lU3R5bGUgPSBkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPT09IFwiY29udGVudC1ib3hcIjtcblxuXHRqUXVlcnkuZXh0ZW5kKCBzdXBwb3J0LCB7XG5cdFx0Ym94U2l6aW5nUmVsaWFibGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBib3hTaXppbmdSZWxpYWJsZVZhbDtcblx0XHR9LFxuXHRcdHBpeGVsQm94U3R5bGVzOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcGl4ZWxCb3hTdHlsZXNWYWw7XG5cdFx0fSxcblx0XHRwaXhlbFBvc2l0aW9uOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcGl4ZWxQb3NpdGlvblZhbDtcblx0XHR9LFxuXHRcdHJlbGlhYmxlTWFyZ2luTGVmdDogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHJlbGlhYmxlTWFyZ2luTGVmdFZhbDtcblx0XHR9LFxuXHRcdHNjcm9sbGJveFNpemU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBzY3JvbGxib3hTaXplVmFsO1xuXHRcdH1cblx0fSApO1xufSApKCk7XG5cblxuZnVuY3Rpb24gY3VyQ1NTKCBlbGVtLCBuYW1lLCBjb21wdXRlZCApIHtcblx0dmFyIHdpZHRoLCBtaW5XaWR0aCwgbWF4V2lkdGgsIHJldCxcblxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggNTErXG5cdFx0Ly8gUmV0cmlldmluZyBzdHlsZSBiZWZvcmUgY29tcHV0ZWQgc29tZWhvd1xuXHRcdC8vIGZpeGVzIGFuIGlzc3VlIHdpdGggZ2V0dGluZyB3cm9uZyB2YWx1ZXNcblx0XHQvLyBvbiBkZXRhY2hlZCBlbGVtZW50c1xuXHRcdHN0eWxlID0gZWxlbS5zdHlsZTtcblxuXHRjb21wdXRlZCA9IGNvbXB1dGVkIHx8IGdldFN0eWxlcyggZWxlbSApO1xuXG5cdC8vIGdldFByb3BlcnR5VmFsdWUgaXMgbmVlZGVkIGZvcjpcblx0Ly8gICAuY3NzKCdmaWx0ZXInKSAoSUUgOSBvbmx5LCAjMTI1MzcpXG5cdC8vICAgLmNzcygnLS1jdXN0b21Qcm9wZXJ0eSkgKCMzMTQ0KVxuXHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdHJldCA9IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoIG5hbWUgKSB8fCBjb21wdXRlZFsgbmFtZSBdO1xuXG5cdFx0aWYgKCByZXQgPT09IFwiXCIgJiYgIWlzQXR0YWNoZWQoIGVsZW0gKSApIHtcblx0XHRcdHJldCA9IGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIEEgdHJpYnV0ZSB0byB0aGUgXCJhd2Vzb21lIGhhY2sgYnkgRGVhbiBFZHdhcmRzXCJcblx0XHQvLyBBbmRyb2lkIEJyb3dzZXIgcmV0dXJucyBwZXJjZW50YWdlIGZvciBzb21lIHZhbHVlcyxcblx0XHQvLyBidXQgd2lkdGggc2VlbXMgdG8gYmUgcmVsaWFibHkgcGl4ZWxzLlxuXHRcdC8vIFRoaXMgaXMgYWdhaW5zdCB0aGUgQ1NTT00gZHJhZnQgc3BlYzpcblx0XHQvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI3Jlc29sdmVkLXZhbHVlc1xuXHRcdGlmICggIXN1cHBvcnQucGl4ZWxCb3hTdHlsZXMoKSAmJiBybnVtbm9ucHgudGVzdCggcmV0ICkgJiYgcmJveFN0eWxlLnRlc3QoIG5hbWUgKSApIHtcblxuXHRcdFx0Ly8gUmVtZW1iZXIgdGhlIG9yaWdpbmFsIHZhbHVlc1xuXHRcdFx0d2lkdGggPSBzdHlsZS53aWR0aDtcblx0XHRcdG1pbldpZHRoID0gc3R5bGUubWluV2lkdGg7XG5cdFx0XHRtYXhXaWR0aCA9IHN0eWxlLm1heFdpZHRoO1xuXG5cdFx0XHQvLyBQdXQgaW4gdGhlIG5ldyB2YWx1ZXMgdG8gZ2V0IGEgY29tcHV0ZWQgdmFsdWUgb3V0XG5cdFx0XHRzdHlsZS5taW5XaWR0aCA9IHN0eWxlLm1heFdpZHRoID0gc3R5bGUud2lkdGggPSByZXQ7XG5cdFx0XHRyZXQgPSBjb21wdXRlZC53aWR0aDtcblxuXHRcdFx0Ly8gUmV2ZXJ0IHRoZSBjaGFuZ2VkIHZhbHVlc1xuXHRcdFx0c3R5bGUud2lkdGggPSB3aWR0aDtcblx0XHRcdHN0eWxlLm1pbldpZHRoID0gbWluV2lkdGg7XG5cdFx0XHRzdHlsZS5tYXhXaWR0aCA9IG1heFdpZHRoO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXQgIT09IHVuZGVmaW5lZCA/XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdFx0Ly8gSUUgcmV0dXJucyB6SW5kZXggdmFsdWUgYXMgYW4gaW50ZWdlci5cblx0XHRyZXQgKyBcIlwiIDpcblx0XHRyZXQ7XG59XG5cblxuZnVuY3Rpb24gYWRkR2V0SG9va0lmKCBjb25kaXRpb25GbiwgaG9va0ZuICkge1xuXG5cdC8vIERlZmluZSB0aGUgaG9vaywgd2UnbGwgY2hlY2sgb24gdGhlIGZpcnN0IHJ1biBpZiBpdCdzIHJlYWxseSBuZWVkZWQuXG5cdHJldHVybiB7XG5cdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggY29uZGl0aW9uRm4oKSApIHtcblxuXHRcdFx0XHQvLyBIb29rIG5vdCBuZWVkZWQgKG9yIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBpdCBkdWVcblx0XHRcdFx0Ly8gdG8gbWlzc2luZyBkZXBlbmRlbmN5KSwgcmVtb3ZlIGl0LlxuXHRcdFx0XHRkZWxldGUgdGhpcy5nZXQ7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSG9vayBuZWVkZWQ7IHJlZGVmaW5lIGl0IHNvIHRoYXQgdGhlIHN1cHBvcnQgdGVzdCBpcyBub3QgZXhlY3V0ZWQgYWdhaW4uXG5cdFx0XHRyZXR1cm4gKCB0aGlzLmdldCA9IGhvb2tGbiApLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9XG5cdH07XG59XG5cblxudmFyIGNzc1ByZWZpeGVzID0gWyBcIldlYmtpdFwiLCBcIk1velwiLCBcIm1zXCIgXSxcblx0ZW1wdHlTdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKS5zdHlsZSxcblx0dmVuZG9yUHJvcHMgPSB7fTtcblxuLy8gUmV0dXJuIGEgdmVuZG9yLXByZWZpeGVkIHByb3BlcnR5IG9yIHVuZGVmaW5lZFxuZnVuY3Rpb24gdmVuZG9yUHJvcE5hbWUoIG5hbWUgKSB7XG5cblx0Ly8gQ2hlY2sgZm9yIHZlbmRvciBwcmVmaXhlZCBuYW1lc1xuXHR2YXIgY2FwTmFtZSA9IG5hbWVbIDAgXS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSggMSApLFxuXHRcdGkgPSBjc3NQcmVmaXhlcy5sZW5ndGg7XG5cblx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0bmFtZSA9IGNzc1ByZWZpeGVzWyBpIF0gKyBjYXBOYW1lO1xuXHRcdGlmICggbmFtZSBpbiBlbXB0eVN0eWxlICkge1xuXHRcdFx0cmV0dXJuIG5hbWU7XG5cdFx0fVxuXHR9XG59XG5cbi8vIFJldHVybiBhIHBvdGVudGlhbGx5LW1hcHBlZCBqUXVlcnkuY3NzUHJvcHMgb3IgdmVuZG9yIHByZWZpeGVkIHByb3BlcnR5XG5mdW5jdGlvbiBmaW5hbFByb3BOYW1lKCBuYW1lICkge1xuXHR2YXIgZmluYWwgPSBqUXVlcnkuY3NzUHJvcHNbIG5hbWUgXSB8fCB2ZW5kb3JQcm9wc1sgbmFtZSBdO1xuXG5cdGlmICggZmluYWwgKSB7XG5cdFx0cmV0dXJuIGZpbmFsO1xuXHR9XG5cdGlmICggbmFtZSBpbiBlbXB0eVN0eWxlICkge1xuXHRcdHJldHVybiBuYW1lO1xuXHR9XG5cdHJldHVybiB2ZW5kb3JQcm9wc1sgbmFtZSBdID0gdmVuZG9yUHJvcE5hbWUoIG5hbWUgKSB8fCBuYW1lO1xufVxuXG5cbnZhclxuXG5cdC8vIFN3YXBwYWJsZSBpZiBkaXNwbGF5IGlzIG5vbmUgb3Igc3RhcnRzIHdpdGggdGFibGVcblx0Ly8gZXhjZXB0IFwidGFibGVcIiwgXCJ0YWJsZS1jZWxsXCIsIG9yIFwidGFibGUtY2FwdGlvblwiXG5cdC8vIFNlZSBoZXJlIGZvciBkaXNwbGF5IHZhbHVlczogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MvZGlzcGxheVxuXHRyZGlzcGxheXN3YXAgPSAvXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sXG5cdHJjdXN0b21Qcm9wID0gL14tLS8sXG5cdGNzc1Nob3cgPSB7IHBvc2l0aW9uOiBcImFic29sdXRlXCIsIHZpc2liaWxpdHk6IFwiaGlkZGVuXCIsIGRpc3BsYXk6IFwiYmxvY2tcIiB9LFxuXHRjc3NOb3JtYWxUcmFuc2Zvcm0gPSB7XG5cdFx0bGV0dGVyU3BhY2luZzogXCIwXCIsXG5cdFx0Zm9udFdlaWdodDogXCI0MDBcIlxuXHR9O1xuXG5mdW5jdGlvbiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICkge1xuXG5cdC8vIEFueSByZWxhdGl2ZSAoKy8tKSB2YWx1ZXMgaGF2ZSBhbHJlYWR5IGJlZW5cblx0Ly8gbm9ybWFsaXplZCBhdCB0aGlzIHBvaW50XG5cdHZhciBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApO1xuXHRyZXR1cm4gbWF0Y2hlcyA/XG5cblx0XHQvLyBHdWFyZCBhZ2FpbnN0IHVuZGVmaW5lZCBcInN1YnRyYWN0XCIsIGUuZy4sIHdoZW4gdXNlZCBhcyBpbiBjc3NIb29rc1xuXHRcdE1hdGgubWF4KCAwLCBtYXRjaGVzWyAyIF0gLSAoIHN1YnRyYWN0IHx8IDAgKSApICsgKCBtYXRjaGVzWyAzIF0gfHwgXCJweFwiICkgOlxuXHRcdHZhbHVlO1xufVxuXG5mdW5jdGlvbiBib3hNb2RlbEFkanVzdG1lbnQoIGVsZW0sIGRpbWVuc2lvbiwgYm94LCBpc0JvcmRlckJveCwgc3R5bGVzLCBjb21wdXRlZFZhbCApIHtcblx0dmFyIGkgPSBkaW1lbnNpb24gPT09IFwid2lkdGhcIiA/IDEgOiAwLFxuXHRcdGV4dHJhID0gMCxcblx0XHRkZWx0YSA9IDA7XG5cblx0Ly8gQWRqdXN0bWVudCBtYXkgbm90IGJlIG5lY2Vzc2FyeVxuXHRpZiAoIGJveCA9PT0gKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApICkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Zm9yICggOyBpIDwgNDsgaSArPSAyICkge1xuXG5cdFx0Ly8gQm90aCBib3ggbW9kZWxzIGV4Y2x1ZGUgbWFyZ2luXG5cdFx0aWYgKCBib3ggPT09IFwibWFyZ2luXCIgKSB7XG5cdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBib3ggKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZ2V0IGhlcmUgd2l0aCBhIGNvbnRlbnQtYm94LCB3ZSdyZSBzZWVraW5nIFwicGFkZGluZ1wiIG9yIFwiYm9yZGVyXCIgb3IgXCJtYXJnaW5cIlxuXHRcdGlmICggIWlzQm9yZGVyQm94ICkge1xuXG5cdFx0XHQvLyBBZGQgcGFkZGluZ1xuXHRcdFx0ZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJwYWRkaW5nXCIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cblx0XHRcdC8vIEZvciBcImJvcmRlclwiIG9yIFwibWFyZ2luXCIsIGFkZCBib3JkZXJcblx0XHRcdGlmICggYm94ICE9PSBcInBhZGRpbmdcIiApIHtcblx0XHRcdFx0ZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblxuXHRcdFx0Ly8gQnV0IHN0aWxsIGtlZXAgdHJhY2sgb2YgaXQgb3RoZXJ3aXNlXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRleHRyYSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZ2V0IGhlcmUgd2l0aCBhIGJvcmRlci1ib3ggKGNvbnRlbnQgKyBwYWRkaW5nICsgYm9yZGVyKSwgd2UncmUgc2Vla2luZyBcImNvbnRlbnRcIiBvclxuXHRcdC8vIFwicGFkZGluZ1wiIG9yIFwibWFyZ2luXCJcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBGb3IgXCJjb250ZW50XCIsIHN1YnRyYWN0IHBhZGRpbmdcblx0XHRcdGlmICggYm94ID09PSBcImNvbnRlbnRcIiApIHtcblx0XHRcdFx0ZGVsdGEgLT0galF1ZXJ5LmNzcyggZWxlbSwgXCJwYWRkaW5nXCIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZvciBcImNvbnRlbnRcIiBvciBcInBhZGRpbmdcIiwgc3VidHJhY3QgYm9yZGVyXG5cdFx0XHRpZiAoIGJveCAhPT0gXCJtYXJnaW5cIiApIHtcblx0XHRcdFx0ZGVsdGEgLT0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBBY2NvdW50IGZvciBwb3NpdGl2ZSBjb250ZW50LWJveCBzY3JvbGwgZ3V0dGVyIHdoZW4gcmVxdWVzdGVkIGJ5IHByb3ZpZGluZyBjb21wdXRlZFZhbFxuXHRpZiAoICFpc0JvcmRlckJveCAmJiBjb21wdXRlZFZhbCA+PSAwICkge1xuXG5cdFx0Ly8gb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGlzIGEgcm91bmRlZCBzdW0gb2YgY29udGVudCwgcGFkZGluZywgc2Nyb2xsIGd1dHRlciwgYW5kIGJvcmRlclxuXHRcdC8vIEFzc3VtaW5nIGludGVnZXIgc2Nyb2xsIGd1dHRlciwgc3VidHJhY3QgdGhlIHJlc3QgYW5kIHJvdW5kIGRvd25cblx0XHRkZWx0YSArPSBNYXRoLm1heCggMCwgTWF0aC5jZWlsKFxuXHRcdFx0ZWxlbVsgXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdIC1cblx0XHRcdGNvbXB1dGVkVmFsIC1cblx0XHRcdGRlbHRhIC1cblx0XHRcdGV4dHJhIC1cblx0XHRcdDAuNVxuXG5cdFx0Ly8gSWYgb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGlzIHVua25vd24sIHRoZW4gd2UgY2FuJ3QgZGV0ZXJtaW5lIGNvbnRlbnQtYm94IHNjcm9sbCBndXR0ZXJcblx0XHQvLyBVc2UgYW4gZXhwbGljaXQgemVybyB0byBhdm9pZCBOYU4gKGdoLTM5NjQpXG5cdFx0KSApIHx8IDA7XG5cdH1cblxuXHRyZXR1cm4gZGVsdGE7XG59XG5cbmZ1bmN0aW9uIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKSB7XG5cblx0Ly8gU3RhcnQgd2l0aCBjb21wdXRlZCBzdHlsZVxuXHR2YXIgc3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cblx0XHQvLyBUbyBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LCBvbmx5IGZldGNoIGJveFNpemluZyBpZiB3ZSBuZWVkIGl0IChnaC00MzIyKS5cblx0XHQvLyBGYWtlIGNvbnRlbnQtYm94IHVudGlsIHdlIGtub3cgaXQncyBuZWVkZWQgdG8ga25vdyB0aGUgdHJ1ZSB2YWx1ZS5cblx0XHRib3hTaXppbmdOZWVkZWQgPSAhc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpIHx8IGV4dHJhLFxuXHRcdGlzQm9yZGVyQm94ID0gYm94U2l6aW5nTmVlZGVkICYmXG5cdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdHZhbHVlSXNCb3JkZXJCb3ggPSBpc0JvcmRlckJveCxcblxuXHRcdHZhbCA9IGN1ckNTUyggZWxlbSwgZGltZW5zaW9uLCBzdHlsZXMgKSxcblx0XHRvZmZzZXRQcm9wID0gXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKTtcblxuXHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NTRcblx0Ly8gUmV0dXJuIGEgY29uZm91bmRpbmcgbm9uLXBpeGVsIHZhbHVlIG9yIGZlaWduIGlnbm9yYW5jZSwgYXMgYXBwcm9wcmlhdGUuXG5cdGlmICggcm51bW5vbnB4LnRlc3QoIHZhbCApICkge1xuXHRcdGlmICggIWV4dHJhICkge1xuXHRcdFx0cmV0dXJuIHZhbDtcblx0XHR9XG5cdFx0dmFsID0gXCJhdXRvXCI7XG5cdH1cblxuXG5cdC8vIEZhbGwgYmFjayB0byBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgd2hlbiB2YWx1ZSBpcyBcImF1dG9cIlxuXHQvLyBUaGlzIGhhcHBlbnMgZm9yIGlubGluZSBlbGVtZW50cyB3aXRoIG5vIGV4cGxpY2l0IHNldHRpbmcgKGdoLTM1NzEpXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjEgLSA0LjMgb25seVxuXHQvLyBBbHNvIHVzZSBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgZm9yIG1pc3JlcG9ydGVkIGlubGluZSBkaW1lbnNpb25zIChnaC0zNjAyKVxuXHQvLyBTdXBwb3J0OiBJRSA5LTExIG9ubHlcblx0Ly8gQWxzbyB1c2Ugb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGZvciB3aGVuIGJveCBzaXppbmcgaXMgdW5yZWxpYWJsZVxuXHQvLyBXZSB1c2UgZ2V0Q2xpZW50UmVjdHMoKSB0byBjaGVjayBmb3IgaGlkZGVuL2Rpc2Nvbm5lY3RlZC5cblx0Ly8gSW4gdGhvc2UgY2FzZXMsIHRoZSBjb21wdXRlZCB2YWx1ZSBjYW4gYmUgdHJ1c3RlZCB0byBiZSBib3JkZXItYm94XG5cdGlmICggKCAhc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpICYmIGlzQm9yZGVyQm94IHx8XG5cdFx0dmFsID09PSBcImF1dG9cIiB8fFxuXHRcdCFwYXJzZUZsb2F0KCB2YWwgKSAmJiBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImlubGluZVwiICkgJiZcblx0XHRlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICkge1xuXG5cdFx0aXNCb3JkZXJCb3ggPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiO1xuXG5cdFx0Ly8gV2hlcmUgYXZhaWxhYmxlLCBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgYXBwcm94aW1hdGUgYm9yZGVyIGJveCBkaW1lbnNpb25zLlxuXHRcdC8vIFdoZXJlIG5vdCBhdmFpbGFibGUgKGUuZy4sIFNWRyksIGFzc3VtZSB1bnJlbGlhYmxlIGJveC1zaXppbmcgYW5kIGludGVycHJldCB0aGVcblx0XHQvLyByZXRyaWV2ZWQgdmFsdWUgYXMgYSBjb250ZW50IGJveCBkaW1lbnNpb24uXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IG9mZnNldFByb3AgaW4gZWxlbTtcblx0XHRpZiAoIHZhbHVlSXNCb3JkZXJCb3ggKSB7XG5cdFx0XHR2YWwgPSBlbGVtWyBvZmZzZXRQcm9wIF07XG5cdFx0fVxuXHR9XG5cblx0Ly8gTm9ybWFsaXplIFwiXCIgYW5kIGF1dG9cblx0dmFsID0gcGFyc2VGbG9hdCggdmFsICkgfHwgMDtcblxuXHQvLyBBZGp1c3QgZm9yIHRoZSBlbGVtZW50J3MgYm94IG1vZGVsXG5cdHJldHVybiAoIHZhbCArXG5cdFx0Ym94TW9kZWxBZGp1c3RtZW50KFxuXHRcdFx0ZWxlbSxcblx0XHRcdGRpbWVuc2lvbixcblx0XHRcdGV4dHJhIHx8ICggaXNCb3JkZXJCb3ggPyBcImJvcmRlclwiIDogXCJjb250ZW50XCIgKSxcblx0XHRcdHZhbHVlSXNCb3JkZXJCb3gsXG5cdFx0XHRzdHlsZXMsXG5cblx0XHRcdC8vIFByb3ZpZGUgdGhlIGN1cnJlbnQgY29tcHV0ZWQgc2l6ZSB0byByZXF1ZXN0IHNjcm9sbCBndXR0ZXIgY2FsY3VsYXRpb24gKGdoLTM1ODkpXG5cdFx0XHR2YWxcblx0XHQpXG5cdCkgKyBcInB4XCI7XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBBZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9va3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHRcblx0Ly8gYmVoYXZpb3Igb2YgZ2V0dGluZyBhbmQgc2V0dGluZyBhIHN0eWxlIHByb3BlcnR5XG5cdGNzc0hvb2tzOiB7XG5cdFx0b3BhY2l0eToge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0XHQvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlciBiYWNrIGZyb20gb3BhY2l0eVxuXHRcdFx0XHRcdHZhciByZXQgPSBjdXJDU1MoIGVsZW0sIFwib3BhY2l0eVwiICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJldCA9PT0gXCJcIiA/IFwiMVwiIDogcmV0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8vIERvbid0IGF1dG9tYXRpY2FsbHkgYWRkIFwicHhcIiB0byB0aGVzZSBwb3NzaWJseS11bml0bGVzcyBwcm9wZXJ0aWVzXG5cdGNzc051bWJlcjoge1xuXHRcdFwiYW5pbWF0aW9uSXRlcmF0aW9uQ291bnRcIjogdHJ1ZSxcblx0XHRcImNvbHVtbkNvdW50XCI6IHRydWUsXG5cdFx0XCJmaWxsT3BhY2l0eVwiOiB0cnVlLFxuXHRcdFwiZmxleEdyb3dcIjogdHJ1ZSxcblx0XHRcImZsZXhTaHJpbmtcIjogdHJ1ZSxcblx0XHRcImZvbnRXZWlnaHRcIjogdHJ1ZSxcblx0XHRcImdyaWRBcmVhXCI6IHRydWUsXG5cdFx0XCJncmlkQ29sdW1uXCI6IHRydWUsXG5cdFx0XCJncmlkQ29sdW1uRW5kXCI6IHRydWUsXG5cdFx0XCJncmlkQ29sdW1uU3RhcnRcIjogdHJ1ZSxcblx0XHRcImdyaWRSb3dcIjogdHJ1ZSxcblx0XHRcImdyaWRSb3dFbmRcIjogdHJ1ZSxcblx0XHRcImdyaWRSb3dTdGFydFwiOiB0cnVlLFxuXHRcdFwibGluZUhlaWdodFwiOiB0cnVlLFxuXHRcdFwib3BhY2l0eVwiOiB0cnVlLFxuXHRcdFwib3JkZXJcIjogdHJ1ZSxcblx0XHRcIm9ycGhhbnNcIjogdHJ1ZSxcblx0XHRcIndpZG93c1wiOiB0cnVlLFxuXHRcdFwiekluZGV4XCI6IHRydWUsXG5cdFx0XCJ6b29tXCI6IHRydWVcblx0fSxcblxuXHQvLyBBZGQgaW4gcHJvcGVydGllcyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlXG5cdC8vIHNldHRpbmcgb3IgZ2V0dGluZyB0aGUgdmFsdWVcblx0Y3NzUHJvcHM6IHt9LFxuXG5cdC8vIEdldCBhbmQgc2V0IHRoZSBzdHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2RlXG5cdHN0eWxlOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUsIGV4dHJhICkge1xuXG5cdFx0Ly8gRG9uJ3Qgc2V0IHN0eWxlcyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCAhZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lXG5cdFx0dmFyIHJldCwgdHlwZSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApLFxuXHRcdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gcXVlcnkgdGhlIHZhbHVlIGlmIGl0IGlzIGEgQ1NTIGN1c3RvbSBwcm9wZXJ0eVxuXHRcdC8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC5cblx0XHRpZiAoICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRuYW1lID0gZmluYWxQcm9wTmFtZSggb3JpZ05hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBHZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2ZXJzaW9uLCB0aGVuIHVucHJlZml4ZWQgdmVyc2lvblxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgd2UncmUgc2V0dGluZyBhIHZhbHVlXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dHlwZSA9IHR5cGVvZiB2YWx1ZTtcblxuXHRcdFx0Ly8gQ29udmVydCBcIis9XCIgb3IgXCItPVwiIHRvIHJlbGF0aXZlIG51bWJlcnMgKCM3MzQ1KVxuXHRcdFx0aWYgKCB0eXBlID09PSBcInN0cmluZ1wiICYmICggcmV0ID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiYgcmV0WyAxIF0gKSB7XG5cdFx0XHRcdHZhbHVlID0gYWRqdXN0Q1NTKCBlbGVtLCBuYW1lLCByZXQgKTtcblxuXHRcdFx0XHQvLyBGaXhlcyBidWcgIzkyMzdcblx0XHRcdFx0dHlwZSA9IFwibnVtYmVyXCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1ha2Ugc3VyZSB0aGF0IG51bGwgYW5kIE5hTiB2YWx1ZXMgYXJlbid0IHNldCAoIzcxMTYpXG5cdFx0XHRpZiAoIHZhbHVlID09IG51bGwgfHwgdmFsdWUgIT09IHZhbHVlICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCB0aGUgdW5pdCAoZXhjZXB0IGZvciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKVxuXHRcdFx0Ly8gVGhlIGlzQ3VzdG9tUHJvcCBjaGVjayBjYW4gYmUgcmVtb3ZlZCBpbiBqUXVlcnkgNC4wIHdoZW4gd2Ugb25seSBhdXRvLWFwcGVuZFxuXHRcdFx0Ly8gXCJweFwiIHRvIGEgZmV3IGhhcmRjb2RlZCB2YWx1ZXMuXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwibnVtYmVyXCIgJiYgIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdFx0dmFsdWUgKz0gcmV0ICYmIHJldFsgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUgXSA/IFwiXCIgOiBcInB4XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gYmFja2dyb3VuZC0qIHByb3BzIGFmZmVjdCBvcmlnaW5hbCBjbG9uZSdzIHZhbHVlc1xuXHRcdFx0aWYgKCAhc3VwcG9ydC5jbGVhckNsb25lU3R5bGUgJiYgdmFsdWUgPT09IFwiXCIgJiYgbmFtZS5pbmRleE9mKCBcImJhY2tncm91bmRcIiApID09PSAwICkge1xuXHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gXCJpbmhlcml0XCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQsIHVzZSB0aGF0IHZhbHVlLCBvdGhlcndpc2UganVzdCBzZXQgdGhlIHNwZWNpZmllZCB2YWx1ZVxuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8XG5cdFx0XHRcdCggdmFsdWUgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRpZiAoIGlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdFx0XHRzdHlsZS5zZXRQcm9wZXJ0eSggbmFtZSwgdmFsdWUgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBub24tY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBmYWxzZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIGp1c3QgZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBzdHlsZSBvYmplY3Rcblx0XHRcdHJldHVybiBzdHlsZVsgbmFtZSBdO1xuXHRcdH1cblx0fSxcblxuXHRjc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBleHRyYSwgc3R5bGVzICkge1xuXHRcdHZhciB2YWwsIG51bSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gbW9kaWZ5IHRoZSB2YWx1ZSBpZiBpdCBpcyBhIENTUyBjdXN0b20gcHJvcGVydHlcblx0XHQvLyBzaW5jZSB0aGV5IGFyZSB1c2VyLWRlZmluZWQuXG5cdFx0aWYgKCAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0bmFtZSA9IGZpbmFsUHJvcE5hbWUoIG9yaWdOYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gVHJ5IHByZWZpeGVkIG5hbWUgZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgbmFtZVxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWwgPSBob29rcy5nZXQoIGVsZW0sIHRydWUsIGV4dHJhICk7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXJ3aXNlLCBpZiBhIHdheSB0byBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGV4aXN0cywgdXNlIHRoYXRcblx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IFwibm9ybWFsXCIgdG8gY29tcHV0ZWQgdmFsdWVcblx0XHRpZiAoIHZhbCA9PT0gXCJub3JtYWxcIiAmJiBuYW1lIGluIGNzc05vcm1hbFRyYW5zZm9ybSApIHtcblx0XHRcdHZhbCA9IGNzc05vcm1hbFRyYW5zZm9ybVsgbmFtZSBdO1xuXHRcdH1cblxuXHRcdC8vIE1ha2UgbnVtZXJpYyBpZiBmb3JjZWQgb3IgYSBxdWFsaWZpZXIgd2FzIHByb3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpY1xuXHRcdGlmICggZXh0cmEgPT09IFwiXCIgfHwgZXh0cmEgKSB7XG5cdFx0XHRudW0gPSBwYXJzZUZsb2F0KCB2YWwgKTtcblx0XHRcdHJldHVybiBleHRyYSA9PT0gdHJ1ZSB8fCBpc0Zpbml0ZSggbnVtICkgPyBudW0gfHwgMCA6IHZhbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiaGVpZ2h0XCIsIFwid2lkdGhcIiBdLCBmdW5jdGlvbiggaSwgZGltZW5zaW9uICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIGRpbWVuc2lvbiBdID0ge1xuXHRcdGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkLCBleHRyYSApIHtcblx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0Ly8gQ2VydGFpbiBlbGVtZW50cyBjYW4gaGF2ZSBkaW1lbnNpb24gaW5mbyBpZiB3ZSBpbnZpc2libHkgc2hvdyB0aGVtXG5cdFx0XHRcdC8vIGJ1dCBpdCBtdXN0IGhhdmUgYSBjdXJyZW50IGRpc3BsYXkgc3R5bGUgdGhhdCB3b3VsZCBiZW5lZml0XG5cdFx0XHRcdHJldHVybiByZGlzcGxheXN3YXAudGVzdCggalF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSApICYmXG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgOCtcblx0XHRcdFx0XHQvLyBUYWJsZSBjb2x1bW5zIGluIFNhZmFyaSBoYXZlIG5vbi16ZXJvIG9mZnNldFdpZHRoICYgemVyb1xuXHRcdFx0XHRcdC8vIGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHVubGVzcyBkaXNwbGF5IGlzIGNoYW5nZWQuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdFx0XHRcdFx0Ly8gUnVubmluZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYSBkaXNjb25uZWN0ZWQgbm9kZVxuXHRcdFx0XHRcdC8vIGluIElFIHRocm93cyBhbiBlcnJvci5cblx0XHRcdFx0XHQoICFlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoIHx8ICFlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoICkgP1xuXHRcdFx0XHRcdFx0c3dhcCggZWxlbSwgY3NzU2hvdywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdFx0Z2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSB7XG5cdFx0XHR2YXIgbWF0Y2hlcyxcblx0XHRcdFx0c3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cblx0XHRcdFx0Ly8gT25seSByZWFkIHN0eWxlcy5wb3NpdGlvbiBpZiB0aGUgdGVzdCBoYXMgYSBjaGFuY2UgdG8gZmFpbFxuXHRcdFx0XHQvLyB0byBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LlxuXHRcdFx0XHRzY3JvbGxib3hTaXplQnVnZ3kgPSAhc3VwcG9ydC5zY3JvbGxib3hTaXplKCkgJiZcblx0XHRcdFx0XHRzdHlsZXMucG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIixcblxuXHRcdFx0XHQvLyBUbyBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LCBvbmx5IGZldGNoIGJveFNpemluZyBpZiB3ZSBuZWVkIGl0IChnaC0zOTkxKVxuXHRcdFx0XHRib3hTaXppbmdOZWVkZWQgPSBzY3JvbGxib3hTaXplQnVnZ3kgfHwgZXh0cmEsXG5cdFx0XHRcdGlzQm9yZGVyQm94ID0gYm94U2l6aW5nTmVlZGVkICYmXG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIixcblx0XHRcdFx0c3VidHJhY3QgPSBleHRyYSA/XG5cdFx0XHRcdFx0Ym94TW9kZWxBZGp1c3RtZW50KFxuXHRcdFx0XHRcdFx0ZWxlbSxcblx0XHRcdFx0XHRcdGRpbWVuc2lvbixcblx0XHRcdFx0XHRcdGV4dHJhLFxuXHRcdFx0XHRcdFx0aXNCb3JkZXJCb3gsXG5cdFx0XHRcdFx0XHRzdHlsZXNcblx0XHRcdFx0XHQpIDpcblx0XHRcdFx0XHQwO1xuXG5cdFx0XHQvLyBBY2NvdW50IGZvciB1bnJlbGlhYmxlIGJvcmRlci1ib3ggZGltZW5zaW9ucyBieSBjb21wYXJpbmcgb2Zmc2V0KiB0byBjb21wdXRlZCBhbmRcblx0XHRcdC8vIGZha2luZyBhIGNvbnRlbnQtYm94IHRvIGdldCBib3JkZXIgYW5kIHBhZGRpbmcgKGdoLTM2OTkpXG5cdFx0XHRpZiAoIGlzQm9yZGVyQm94ICYmIHNjcm9sbGJveFNpemVCdWdneSApIHtcblx0XHRcdFx0c3VidHJhY3QgLT0gTWF0aC5jZWlsKFxuXHRcdFx0XHRcdGVsZW1bIFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICkgXSAtXG5cdFx0XHRcdFx0cGFyc2VGbG9hdCggc3R5bGVzWyBkaW1lbnNpb24gXSApIC1cblx0XHRcdFx0XHRib3hNb2RlbEFkanVzdG1lbnQoIGVsZW0sIGRpbWVuc2lvbiwgXCJib3JkZXJcIiwgZmFsc2UsIHN0eWxlcyApIC1cblx0XHRcdFx0XHQwLjVcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCB0byBwaXhlbHMgaWYgdmFsdWUgYWRqdXN0bWVudCBpcyBuZWVkZWRcblx0XHRcdGlmICggc3VidHJhY3QgJiYgKCBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiZcblx0XHRcdFx0KCBtYXRjaGVzWyAzIF0gfHwgXCJweFwiICkgIT09IFwicHhcIiApIHtcblxuXHRcdFx0XHRlbGVtLnN0eWxlWyBkaW1lbnNpb24gXSA9IHZhbHVlO1xuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5jc3MoIGVsZW0sIGRpbWVuc2lvbiApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApO1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmNzc0hvb2tzLm1hcmdpbkxlZnQgPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucmVsaWFibGVNYXJnaW5MZWZ0LFxuXHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRcdHJldHVybiAoIHBhcnNlRmxvYXQoIGN1ckNTUyggZWxlbSwgXCJtYXJnaW5MZWZ0XCIgKSApIHx8XG5cdFx0XHRcdGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtXG5cdFx0XHRcdFx0c3dhcCggZWxlbSwgeyBtYXJnaW5MZWZ0OiAwIH0sIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcblx0XHRcdFx0XHR9IClcblx0XHRcdFx0KSArIFwicHhcIjtcblx0XHR9XG5cdH1cbik7XG5cbi8vIFRoZXNlIGhvb2tzIGFyZSB1c2VkIGJ5IGFuaW1hdGUgdG8gZXhwYW5kIHByb3BlcnRpZXNcbmpRdWVyeS5lYWNoKCB7XG5cdG1hcmdpbjogXCJcIixcblx0cGFkZGluZzogXCJcIixcblx0Ym9yZGVyOiBcIldpZHRoXCJcbn0sIGZ1bmN0aW9uKCBwcmVmaXgsIHN1ZmZpeCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXSA9IHtcblx0XHRleHBhbmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBpID0gMCxcblx0XHRcdFx0ZXhwYW5kZWQgPSB7fSxcblxuXHRcdFx0XHQvLyBBc3N1bWVzIGEgc2luZ2xlIG51bWJlciBpZiBub3QgYSBzdHJpbmdcblx0XHRcdFx0cGFydHMgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZS5zcGxpdCggXCIgXCIgKSA6IFsgdmFsdWUgXTtcblxuXHRcdFx0Zm9yICggOyBpIDwgNDsgaSsrICkge1xuXHRcdFx0XHRleHBhbmRlZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9XG5cdFx0XHRcdFx0cGFydHNbIGkgXSB8fCBwYXJ0c1sgaSAtIDIgXSB8fCBwYXJ0c1sgMCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZXhwYW5kZWQ7XG5cdFx0fVxuXHR9O1xuXG5cdGlmICggcHJlZml4ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRjc3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgc3R5bGVzLCBsZW4sXG5cdFx0XHRcdG1hcCA9IHt9LFxuXHRcdFx0XHRpID0gMDtcblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBuYW1lICkgKSB7XG5cdFx0XHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApO1xuXHRcdFx0XHRsZW4gPSBuYW1lLmxlbmd0aDtcblxuXHRcdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRtYXBbIG5hbWVbIGkgXSBdID0galF1ZXJ5LmNzcyggZWxlbSwgbmFtZVsgaSBdLCBmYWxzZSwgc3R5bGVzICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbWFwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSwgdmFsdWUgKSA6XG5cdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTtcblx0XHR9LCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fVxufSApO1xuXG5cbmZ1bmN0aW9uIFR3ZWVuKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApIHtcblx0cmV0dXJuIG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5pdCggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKTtcbn1cbmpRdWVyeS5Ud2VlbiA9IFR3ZWVuO1xuXG5Ud2Vlbi5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBUd2Vlbixcblx0aW5pdDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nLCB1bml0ICkge1xuXHRcdHRoaXMuZWxlbSA9IGVsZW07XG5cdFx0dGhpcy5wcm9wID0gcHJvcDtcblx0XHR0aGlzLmVhc2luZyA9IGVhc2luZyB8fCBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0O1xuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0dGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIoKTtcblx0XHR0aGlzLmVuZCA9IGVuZDtcblx0XHR0aGlzLnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApO1xuXHR9LFxuXHRjdXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRyZXR1cm4gaG9va3MgJiYgaG9va3MuZ2V0ID9cblx0XHRcdGhvb2tzLmdldCggdGhpcyApIDpcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5nZXQoIHRoaXMgKTtcblx0fSxcblx0cnVuOiBmdW5jdGlvbiggcGVyY2VudCApIHtcblx0XHR2YXIgZWFzZWQsXG5cdFx0XHRob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kdXJhdGlvbiApIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBqUXVlcnkuZWFzaW5nWyB0aGlzLmVhc2luZyBdKFxuXHRcdFx0XHRwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiBwZXJjZW50LCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb25cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBwZXJjZW50O1xuXHRcdH1cblx0XHR0aGlzLm5vdyA9ICggdGhpcy5lbmQgLSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMuc3RhcnQ7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkge1xuXHRcdFx0dGhpcy5vcHRpb25zLnN0ZXAuY2FsbCggdGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgaG9va3Muc2V0ICkge1xuXHRcdFx0aG9va3Muc2V0KCB0aGlzICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5zZXQoIHRoaXMgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn07XG5cblR3ZWVuLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTtcblxuVHdlZW4ucHJvcEhvb2tzID0ge1xuXHRfZGVmYXVsdDoge1xuXHRcdGdldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdFx0dmFyIHJlc3VsdDtcblxuXHRcdFx0Ly8gVXNlIGEgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgZGlyZWN0bHkgd2hlbiBpdCBpcyBub3QgYSBET00gZWxlbWVudCxcblx0XHRcdC8vIG9yIHdoZW4gdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc3R5bGUgcHJvcGVydHkgdGhhdCBleGlzdHMuXG5cdFx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgIT09IDEgfHxcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdICE9IG51bGwgJiYgdHdlZW4uZWxlbS5zdHlsZVsgdHdlZW4ucHJvcCBdID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF07XG5cdFx0XHR9XG5cblx0XHRcdC8vIFBhc3NpbmcgYW4gZW1wdHkgc3RyaW5nIGFzIGEgM3JkIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxseVxuXHRcdFx0Ly8gYXR0ZW1wdCBhIHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEgc3RyaW5nIGlmIHRoZSBwYXJzZSBmYWlscy5cblx0XHRcdC8vIFNpbXBsZSB2YWx1ZXMgc3VjaCBhcyBcIjEwcHhcIiBhcmUgcGFyc2VkIHRvIEZsb2F0O1xuXHRcdFx0Ly8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyBcInJvdGF0ZSgxcmFkKVwiIGFyZSByZXR1cm5lZCBhcy1pcy5cblx0XHRcdHJlc3VsdCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIFwiXCIgKTtcblxuXHRcdFx0Ly8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCBcImF1dG9cIiBhcmUgY29udmVydGVkIHRvIDAuXG5cdFx0XHRyZXR1cm4gIXJlc3VsdCB8fCByZXN1bHQgPT09IFwiYXV0b1wiID8gMCA6IHJlc3VsdDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXG5cdFx0XHQvLyBVc2Ugc3RlcCBob29rIGZvciBiYWNrIGNvbXBhdC5cblx0XHRcdC8vIFVzZSBjc3NIb29rIGlmIGl0cyB0aGVyZS5cblx0XHRcdC8vIFVzZSAuc3R5bGUgaWYgYXZhaWxhYmxlIGFuZCB1c2UgcGxhaW4gcHJvcGVydGllcyB3aGVyZSBhdmFpbGFibGUuXG5cdFx0XHRpZiAoIGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7XG5cdFx0XHR9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlID09PSAxICYmIChcblx0XHRcdFx0XHRqUXVlcnkuY3NzSG9va3NbIHR3ZWVuLnByb3AgXSB8fFxuXHRcdFx0XHRcdHR3ZWVuLmVsZW0uc3R5bGVbIGZpbmFsUHJvcE5hbWUoIHR3ZWVuLnByb3AgKSBdICE9IG51bGwgKSApIHtcblx0XHRcdFx0alF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCB0d2Vlbi5ub3cgKyB0d2Vlbi51bml0ICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuLy8gUGFuaWMgYmFzZWQgYXBwcm9hY2ggdG8gc2V0dGluZyB0aGluZ3Mgb24gZGlzY29ubmVjdGVkIG5vZGVzXG5Ud2Vlbi5wcm9wSG9va3Muc2Nyb2xsVG9wID0gVHdlZW4ucHJvcEhvb2tzLnNjcm9sbExlZnQgPSB7XG5cdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAmJiB0d2Vlbi5lbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkuZWFzaW5nID0ge1xuXHRsaW5lYXI6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiBwO1xuXHR9LFxuXHRzd2luZzogZnVuY3Rpb24oIHAgKSB7XG5cdFx0cmV0dXJuIDAuNSAtIE1hdGguY29zKCBwICogTWF0aC5QSSApIC8gMjtcblx0fSxcblx0X2RlZmF1bHQ6IFwic3dpbmdcIlxufTtcblxualF1ZXJ5LmZ4ID0gVHdlZW4ucHJvdG90eXBlLmluaXQ7XG5cbi8vIEJhY2sgY29tcGF0IDwxLjggZXh0ZW5zaW9uIHBvaW50XG5qUXVlcnkuZnguc3RlcCA9IHt9O1xuXG5cblxuXG52YXJcblx0ZnhOb3csIGluUHJvZ3Jlc3MsXG5cdHJmeHR5cGVzID0gL14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLFxuXHRycnVuID0gL3F1ZXVlSG9va3MkLztcblxuZnVuY3Rpb24gc2NoZWR1bGUoKSB7XG5cdGlmICggaW5Qcm9ncmVzcyApIHtcblx0XHRpZiAoIGRvY3VtZW50LmhpZGRlbiA9PT0gZmFsc2UgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSApIHtcblx0XHRcdHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoIHNjaGVkdWxlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBzY2hlZHVsZSwgalF1ZXJ5LmZ4LmludGVydmFsICk7XG5cdFx0fVxuXG5cdFx0alF1ZXJ5LmZ4LnRpY2soKTtcblx0fVxufVxuXG4vLyBBbmltYXRpb25zIGNyZWF0ZWQgc3luY2hyb25vdXNseSB3aWxsIHJ1biBzeW5jaHJvbm91c2x5XG5mdW5jdGlvbiBjcmVhdGVGeE5vdygpIHtcblx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdGZ4Tm93ID0gdW5kZWZpbmVkO1xuXHR9ICk7XG5cdHJldHVybiAoIGZ4Tm93ID0gRGF0ZS5ub3coKSApO1xufVxuXG4vLyBHZW5lcmF0ZSBwYXJhbWV0ZXJzIHRvIGNyZWF0ZSBhIHN0YW5kYXJkIGFuaW1hdGlvblxuZnVuY3Rpb24gZ2VuRngoIHR5cGUsIGluY2x1ZGVXaWR0aCApIHtcblx0dmFyIHdoaWNoLFxuXHRcdGkgPSAwLFxuXHRcdGF0dHJzID0geyBoZWlnaHQ6IHR5cGUgfTtcblxuXHQvLyBJZiB3ZSBpbmNsdWRlIHdpZHRoLCBzdGVwIHZhbHVlIGlzIDEgdG8gZG8gYWxsIGNzc0V4cGFuZCB2YWx1ZXMsXG5cdC8vIG90aGVyd2lzZSBzdGVwIHZhbHVlIGlzIDIgdG8gc2tpcCBvdmVyIExlZnQgYW5kIFJpZ2h0XG5cdGluY2x1ZGVXaWR0aCA9IGluY2x1ZGVXaWR0aCA/IDEgOiAwO1xuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgLSBpbmNsdWRlV2lkdGggKSB7XG5cdFx0d2hpY2ggPSBjc3NFeHBhbmRbIGkgXTtcblx0XHRhdHRyc1sgXCJtYXJnaW5cIiArIHdoaWNoIF0gPSBhdHRyc1sgXCJwYWRkaW5nXCIgKyB3aGljaCBdID0gdHlwZTtcblx0fVxuXG5cdGlmICggaW5jbHVkZVdpZHRoICkge1xuXHRcdGF0dHJzLm9wYWNpdHkgPSBhdHRycy53aWR0aCA9IHR5cGU7XG5cdH1cblxuXHRyZXR1cm4gYXR0cnM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVR3ZWVuKCB2YWx1ZSwgcHJvcCwgYW5pbWF0aW9uICkge1xuXHR2YXIgdHdlZW4sXG5cdFx0Y29sbGVjdGlvbiA9ICggQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gfHwgW10gKS5jb25jYXQoIEFuaW1hdGlvbi50d2VlbmVyc1sgXCIqXCIgXSApLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDtcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRpZiAoICggdHdlZW4gPSBjb2xsZWN0aW9uWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgcHJvcCwgdmFsdWUgKSApICkge1xuXG5cdFx0XHQvLyBXZSdyZSBkb25lIHdpdGggdGhpcyBwcm9wZXJ0eVxuXHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0UHJlZmlsdGVyKCBlbGVtLCBwcm9wcywgb3B0cyApIHtcblx0dmFyIHByb3AsIHZhbHVlLCB0b2dnbGUsIGhvb2tzLCBvbGRmaXJlLCBwcm9wVHdlZW4sIHJlc3RvcmVEaXNwbGF5LCBkaXNwbGF5LFxuXHRcdGlzQm94ID0gXCJ3aWR0aFwiIGluIHByb3BzIHx8IFwiaGVpZ2h0XCIgaW4gcHJvcHMsXG5cdFx0YW5pbSA9IHRoaXMsXG5cdFx0b3JpZyA9IHt9LFxuXHRcdHN0eWxlID0gZWxlbS5zdHlsZSxcblx0XHRoaWRkZW4gPSBlbGVtLm5vZGVUeXBlICYmIGlzSGlkZGVuV2l0aGluVHJlZSggZWxlbSApLFxuXHRcdGRhdGFTaG93ID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImZ4c2hvd1wiICk7XG5cblx0Ly8gUXVldWUtc2tpcHBpbmcgYW5pbWF0aW9ucyBoaWphY2sgdGhlIGZ4IGhvb2tzXG5cdGlmICggIW9wdHMucXVldWUgKSB7XG5cdFx0aG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIFwiZnhcIiApO1xuXHRcdGlmICggaG9va3MudW5xdWV1ZWQgPT0gbnVsbCApIHtcblx0XHRcdGhvb2tzLnVucXVldWVkID0gMDtcblx0XHRcdG9sZGZpcmUgPSBob29rcy5lbXB0eS5maXJlO1xuXHRcdFx0aG9va3MuZW1wdHkuZmlyZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICFob29rcy51bnF1ZXVlZCApIHtcblx0XHRcdFx0XHRvbGRmaXJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fVxuXHRcdGhvb2tzLnVucXVldWVkKys7XG5cblx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEVuc3VyZSB0aGUgY29tcGxldGUgaGFuZGxlciBpcyBjYWxsZWQgYmVmb3JlIHRoaXMgY29tcGxldGVzXG5cdFx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGhvb2tzLnVucXVldWVkLS07XG5cdFx0XHRcdGlmICggIWpRdWVyeS5xdWV1ZSggZWxlbSwgXCJmeFwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIERldGVjdCBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRmb3IgKCBwcm9wIGluIHByb3BzICkge1xuXHRcdHZhbHVlID0gcHJvcHNbIHByb3AgXTtcblx0XHRpZiAoIHJmeHR5cGVzLnRlc3QoIHZhbHVlICkgKSB7XG5cdFx0XHRkZWxldGUgcHJvcHNbIHByb3AgXTtcblx0XHRcdHRvZ2dsZSA9IHRvZ2dsZSB8fCB2YWx1ZSA9PT0gXCJ0b2dnbGVcIjtcblx0XHRcdGlmICggdmFsdWUgPT09ICggaGlkZGVuID8gXCJoaWRlXCIgOiBcInNob3dcIiApICkge1xuXG5cdFx0XHRcdC8vIFByZXRlbmQgdG8gYmUgaGlkZGVuIGlmIHRoaXMgaXMgYSBcInNob3dcIiBhbmRcblx0XHRcdFx0Ly8gdGhlcmUgaXMgc3RpbGwgZGF0YSBmcm9tIGEgc3RvcHBlZCBzaG93L2hpZGVcblx0XHRcdFx0aWYgKCB2YWx1ZSA9PT0gXCJzaG93XCIgJiYgZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdGhpZGRlbiA9IHRydWU7XG5cblx0XHRcdFx0Ly8gSWdub3JlIGFsbCBvdGhlciBuby1vcCBzaG93L2hpZGUgZGF0YVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRvcmlnWyBwcm9wIF0gPSBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdIHx8IGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCApO1xuXHRcdH1cblx0fVxuXG5cdC8vIEJhaWwgb3V0IGlmIHRoaXMgaXMgYSBuby1vcCBsaWtlIC5oaWRlKCkuaGlkZSgpXG5cdHByb3BUd2VlbiA9ICFqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcHMgKTtcblx0aWYgKCAhcHJvcFR3ZWVuICYmIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBvcmlnICkgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gUmVzdHJpY3QgXCJvdmVyZmxvd1wiIGFuZCBcImRpc3BsYXlcIiBzdHlsZXMgZHVyaW5nIGJveCBhbmltYXRpb25zXG5cdGlmICggaXNCb3ggJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExLCBFZGdlIDEyIC0gMTVcblx0XHQvLyBSZWNvcmQgYWxsIDMgb3ZlcmZsb3cgYXR0cmlidXRlcyBiZWNhdXNlIElFIGRvZXMgbm90IGluZmVyIHRoZSBzaG9ydGhhbmRcblx0XHQvLyBmcm9tIGlkZW50aWNhbGx5LXZhbHVlZCBvdmVyZmxvd1ggYW5kIG92ZXJmbG93WSBhbmQgRWRnZSBqdXN0IG1pcnJvcnNcblx0XHQvLyB0aGUgb3ZlcmZsb3dYIHZhbHVlIHRoZXJlLlxuXHRcdG9wdHMub3ZlcmZsb3cgPSBbIHN0eWxlLm92ZXJmbG93LCBzdHlsZS5vdmVyZmxvd1gsIHN0eWxlLm92ZXJmbG93WSBdO1xuXG5cdFx0Ly8gSWRlbnRpZnkgYSBkaXNwbGF5IHR5cGUsIHByZWZlcnJpbmcgb2xkIHNob3cvaGlkZSBkYXRhIG92ZXIgdGhlIENTUyBjYXNjYWRlXG5cdFx0cmVzdG9yZURpc3BsYXkgPSBkYXRhU2hvdyAmJiBkYXRhU2hvdy5kaXNwbGF5O1xuXHRcdGlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCApIHtcblx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdH1cblx0XHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdFx0aWYgKCByZXN0b3JlRGlzcGxheSApIHtcblx0XHRcdFx0ZGlzcGxheSA9IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBHZXQgbm9uZW1wdHkgdmFsdWUocykgYnkgdGVtcG9yYXJpbHkgZm9yY2luZyB2aXNpYmlsaXR5XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSwgdHJ1ZSApO1xuXHRcdFx0XHRyZXN0b3JlRGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheSB8fCByZXN0b3JlRGlzcGxheTtcblx0XHRcdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFuaW1hdGUgaW5saW5lIGVsZW1lbnRzIGFzIGlubGluZS1ibG9ja1xuXHRcdGlmICggZGlzcGxheSA9PT0gXCJpbmxpbmVcIiB8fCBkaXNwbGF5ID09PSBcImlubGluZS1ibG9ja1wiICYmIHJlc3RvcmVEaXNwbGF5ICE9IG51bGwgKSB7XG5cdFx0XHRpZiAoIGpRdWVyeS5jc3MoIGVsZW0sIFwiZmxvYXRcIiApID09PSBcIm5vbmVcIiApIHtcblxuXHRcdFx0XHQvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBkaXNwbGF5IHZhbHVlIGF0IHRoZSBlbmQgb2YgcHVyZSBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRcdFx0XHRpZiAoICFwcm9wVHdlZW4gKSB7XG5cdFx0XHRcdFx0YW5pbS5kb25lKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHN0eWxlLmRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTtcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0aWYgKCByZXN0b3JlRGlzcGxheSA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0ZGlzcGxheSA9IHN0eWxlLmRpc3BsYXk7XG5cdFx0XHRcdFx0XHRyZXN0b3JlRGlzcGxheSA9IGRpc3BsYXkgPT09IFwibm9uZVwiID8gXCJcIiA6IGRpc3BsYXk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHN0eWxlLmRpc3BsYXkgPSBcImlubGluZS1ibG9ja1wiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmICggb3B0cy5vdmVyZmxvdyApIHtcblx0XHRzdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XG5cdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0c3R5bGUub3ZlcmZsb3cgPSBvcHRzLm92ZXJmbG93WyAwIF07XG5cdFx0XHRzdHlsZS5vdmVyZmxvd1ggPSBvcHRzLm92ZXJmbG93WyAxIF07XG5cdFx0XHRzdHlsZS5vdmVyZmxvd1kgPSBvcHRzLm92ZXJmbG93WyAyIF07XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gSW1wbGVtZW50IHNob3cvaGlkZSBhbmltYXRpb25zXG5cdHByb3BUd2VlbiA9IGZhbHNlO1xuXHRmb3IgKCBwcm9wIGluIG9yaWcgKSB7XG5cblx0XHQvLyBHZW5lcmFsIHNob3cvaGlkZSBzZXR1cCBmb3IgdGhpcyBlbGVtZW50IGFuaW1hdGlvblxuXHRcdGlmICggIXByb3BUd2VlbiApIHtcblx0XHRcdGlmICggZGF0YVNob3cgKSB7XG5cdFx0XHRcdGlmICggXCJoaWRkZW5cIiBpbiBkYXRhU2hvdyApIHtcblx0XHRcdFx0XHRoaWRkZW4gPSBkYXRhU2hvdy5oaWRkZW47XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRhdGFTaG93ID0gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBcImZ4c2hvd1wiLCB7IGRpc3BsYXk6IHJlc3RvcmVEaXNwbGF5IH0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RvcmUgaGlkZGVuL3Zpc2libGUgZm9yIHRvZ2dsZSBzbyBgLnN0b3AoKS50b2dnbGUoKWAgXCJyZXZlcnNlc1wiXG5cdFx0XHRpZiAoIHRvZ2dsZSApIHtcblx0XHRcdFx0ZGF0YVNob3cuaGlkZGVuID0gIWhpZGRlbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2hvdyBlbGVtZW50cyBiZWZvcmUgYW5pbWF0aW5nIHRoZW1cblx0XHRcdGlmICggaGlkZGVuICkge1xuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0sIHRydWUgKTtcblx0XHRcdH1cblxuXHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tbG9vcC1mdW5jICovXG5cblx0XHRcdGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8qIGVzbGludC1lbmFibGUgbm8tbG9vcC1mdW5jICovXG5cblx0XHRcdFx0Ly8gVGhlIGZpbmFsIHN0ZXAgb2YgYSBcImhpZGVcIiBhbmltYXRpb24gaXMgYWN0dWFsbHkgaGlkaW5nIHRoZSBlbGVtZW50XG5cdFx0XHRcdGlmICggIWhpZGRlbiApIHtcblx0XHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiZnhzaG93XCIgKTtcblx0XHRcdFx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3JpZ1sgcHJvcCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHQvLyBQZXItcHJvcGVydHkgc2V0dXBcblx0XHRwcm9wVHdlZW4gPSBjcmVhdGVUd2VlbiggaGlkZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAsIHByb3AsIGFuaW0gKTtcblx0XHRpZiAoICEoIHByb3AgaW4gZGF0YVNob3cgKSApIHtcblx0XHRcdGRhdGFTaG93WyBwcm9wIF0gPSBwcm9wVHdlZW4uc3RhcnQ7XG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0cHJvcFR3ZWVuLmVuZCA9IHByb3BUd2Vlbi5zdGFydDtcblx0XHRcdFx0cHJvcFR3ZWVuLnN0YXJ0ID0gMDtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gcHJvcEZpbHRlciggcHJvcHMsIHNwZWNpYWxFYXNpbmcgKSB7XG5cdHZhciBpbmRleCwgbmFtZSwgZWFzaW5nLCB2YWx1ZSwgaG9va3M7XG5cblx0Ly8gY2FtZWxDYXNlLCBzcGVjaWFsRWFzaW5nIGFuZCBleHBhbmQgY3NzSG9vayBwYXNzXG5cdGZvciAoIGluZGV4IGluIHByb3BzICkge1xuXHRcdG5hbWUgPSBjYW1lbENhc2UoIGluZGV4ICk7XG5cdFx0ZWFzaW5nID0gc3BlY2lhbEVhc2luZ1sgbmFtZSBdO1xuXHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF07XG5cdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdFx0ZWFzaW5nID0gdmFsdWVbIDEgXTtcblx0XHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgMCBdO1xuXHRcdH1cblxuXHRcdGlmICggaW5kZXggIT09IG5hbWUgKSB7XG5cdFx0XHRwcm9wc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRkZWxldGUgcHJvcHNbIGluZGV4IF07XG5cdFx0fVxuXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTtcblx0XHRpZiAoIGhvb2tzICYmIFwiZXhwYW5kXCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWx1ZSA9IGhvb2tzLmV4cGFuZCggdmFsdWUgKTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgbmFtZSBdO1xuXG5cdFx0XHQvLyBOb3QgcXVpdGUgJC5leHRlbmQsIHRoaXMgd29uJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGtleXMuXG5cdFx0XHQvLyBSZXVzaW5nICdpbmRleCcgYmVjYXVzZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IFwibmFtZVwiXG5cdFx0XHRmb3IgKCBpbmRleCBpbiB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhKCBpbmRleCBpbiBwcm9wcyApICkge1xuXHRcdFx0XHRcdHByb3BzWyBpbmRleCBdID0gdmFsdWVbIGluZGV4IF07XG5cdFx0XHRcdFx0c3BlY2lhbEVhc2luZ1sgaW5kZXggXSA9IGVhc2luZztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzcGVjaWFsRWFzaW5nWyBuYW1lIF0gPSBlYXNpbmc7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIEFuaW1hdGlvbiggZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHtcblx0dmFyIHJlc3VsdCxcblx0XHRzdG9wcGVkLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBBbmltYXRpb24ucHJlZmlsdGVycy5sZW5ndGgsXG5cdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBEb24ndCBtYXRjaCBlbGVtIGluIHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3Jcblx0XHRcdGRlbGV0ZSB0aWNrLmVsZW07XG5cdFx0fSApLFxuXHRcdHRpY2sgPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdFx0cmVtYWluaW5nID0gTWF0aC5tYXgoIDAsIGFuaW1hdGlvbi5zdGFydFRpbWUgKyBhbmltYXRpb24uZHVyYXRpb24gLSBjdXJyZW50VGltZSApLFxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zIG9ubHlcblx0XHRcdFx0Ly8gQXJjaGFpYyBjcmFzaCBidWcgd29uJ3QgYWxsb3cgdXMgdG8gdXNlIGAxIC0gKCAwLjUgfHwgMCApYCAoIzEyNDk3KVxuXHRcdFx0XHR0ZW1wID0gcmVtYWluaW5nIC8gYW5pbWF0aW9uLmR1cmF0aW9uIHx8IDAsXG5cdFx0XHRcdHBlcmNlbnQgPSAxIC0gdGVtcCxcblx0XHRcdFx0aW5kZXggPSAwLFxuXHRcdFx0XHRsZW5ndGggPSBhbmltYXRpb24udHdlZW5zLmxlbmd0aDtcblxuXHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIHBlcmNlbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIHBlcmNlbnQsIHJlbWFpbmluZyBdICk7XG5cblx0XHRcdC8vIElmIHRoZXJlJ3MgbW9yZSB0byBkbywgeWllbGRcblx0XHRcdGlmICggcGVyY2VudCA8IDEgJiYgbGVuZ3RoICkge1xuXHRcdFx0XHRyZXR1cm4gcmVtYWluaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGlzIHdhcyBhbiBlbXB0eSBhbmltYXRpb24sIHN5bnRoZXNpemUgYSBmaW5hbCBwcm9ncmVzcyBub3RpZmljYXRpb25cblx0XHRcdGlmICggIWxlbmd0aCApIHtcblx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIDEsIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXNvbHZlIHRoZSBhbmltYXRpb24gYW5kIHJlcG9ydCBpdHMgY29uY2x1c2lvblxuXHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uIF0gKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdGFuaW1hdGlvbiA9IGRlZmVycmVkLnByb21pc2UoIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRwcm9wczogalF1ZXJ5LmV4dGVuZCgge30sIHByb3BlcnRpZXMgKSxcblx0XHRcdG9wdHM6IGpRdWVyeS5leHRlbmQoIHRydWUsIHtcblx0XHRcdFx0c3BlY2lhbEVhc2luZzoge30sXG5cdFx0XHRcdGVhc2luZzogalF1ZXJ5LmVhc2luZy5fZGVmYXVsdFxuXHRcdFx0fSwgb3B0aW9ucyApLFxuXHRcdFx0b3JpZ2luYWxQcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLFxuXHRcdFx0b3JpZ2luYWxPcHRpb25zOiBvcHRpb25zLFxuXHRcdFx0c3RhcnRUaW1lOiBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLFxuXHRcdFx0ZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24sXG5cdFx0XHR0d2VlbnM6IFtdLFxuXHRcdFx0Y3JlYXRlVHdlZW46IGZ1bmN0aW9uKCBwcm9wLCBlbmQgKSB7XG5cdFx0XHRcdHZhciB0d2VlbiA9IGpRdWVyeS5Ud2VlbiggZWxlbSwgYW5pbWF0aW9uLm9wdHMsIHByb3AsIGVuZCxcblx0XHRcdFx0XHRcdGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmdbIHByb3AgXSB8fCBhbmltYXRpb24ub3B0cy5lYXNpbmcgKTtcblx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVucy5wdXNoKCB0d2VlbiApO1xuXHRcdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0XHR9LFxuXHRcdFx0c3RvcDogZnVuY3Rpb24oIGdvdG9FbmQgKSB7XG5cdFx0XHRcdHZhciBpbmRleCA9IDAsXG5cblx0XHRcdFx0XHQvLyBJZiB3ZSBhcmUgZ29pbmcgdG8gdGhlIGVuZCwgd2Ugd2FudCB0byBydW4gYWxsIHRoZSB0d2VlbnNcblx0XHRcdFx0XHQvLyBvdGhlcndpc2Ugd2Ugc2tpcCB0aGlzIHBhcnRcblx0XHRcdFx0XHRsZW5ndGggPSBnb3RvRW5kID8gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGggOiAwO1xuXHRcdFx0XHRpZiAoIHN0b3BwZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3RvcHBlZCA9IHRydWU7XG5cdFx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIDEgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlc29sdmUgd2hlbiB3ZSBwbGF5ZWQgdGhlIGxhc3QgZnJhbWU7IG90aGVyd2lzZSwgcmVqZWN0XG5cdFx0XHRcdGlmICggZ290b0VuZCApIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7XG5cdFx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0fSApLFxuXHRcdHByb3BzID0gYW5pbWF0aW9uLnByb3BzO1xuXG5cdHByb3BGaWx0ZXIoIHByb3BzLCBhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nICk7XG5cblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRyZXN1bHQgPSBBbmltYXRpb24ucHJlZmlsdGVyc1sgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIGVsZW0sIHByb3BzLCBhbmltYXRpb24ub3B0cyApO1xuXHRcdGlmICggcmVzdWx0ICkge1xuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCByZXN1bHQuc3RvcCApICkge1xuXHRcdFx0XHRqUXVlcnkuX3F1ZXVlSG9va3MoIGFuaW1hdGlvbi5lbGVtLCBhbmltYXRpb24ub3B0cy5xdWV1ZSApLnN0b3AgPVxuXHRcdFx0XHRcdHJlc3VsdC5zdG9wLmJpbmQoIHJlc3VsdCApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdH1cblxuXHRqUXVlcnkubWFwKCBwcm9wcywgY3JlYXRlVHdlZW4sIGFuaW1hdGlvbiApO1xuXG5cdGlmICggaXNGdW5jdGlvbiggYW5pbWF0aW9uLm9wdHMuc3RhcnQgKSApIHtcblx0XHRhbmltYXRpb24ub3B0cy5zdGFydC5jYWxsKCBlbGVtLCBhbmltYXRpb24gKTtcblx0fVxuXG5cdC8vIEF0dGFjaCBjYWxsYmFja3MgZnJvbSBvcHRpb25zXG5cdGFuaW1hdGlvblxuXHRcdC5wcm9ncmVzcyggYW5pbWF0aW9uLm9wdHMucHJvZ3Jlc3MgKVxuXHRcdC5kb25lKCBhbmltYXRpb24ub3B0cy5kb25lLCBhbmltYXRpb24ub3B0cy5jb21wbGV0ZSApXG5cdFx0LmZhaWwoIGFuaW1hdGlvbi5vcHRzLmZhaWwgKVxuXHRcdC5hbHdheXMoIGFuaW1hdGlvbi5vcHRzLmFsd2F5cyApO1xuXG5cdGpRdWVyeS5meC50aW1lcihcblx0XHRqUXVlcnkuZXh0ZW5kKCB0aWNrLCB7XG5cdFx0XHRlbGVtOiBlbGVtLFxuXHRcdFx0YW5pbTogYW5pbWF0aW9uLFxuXHRcdFx0cXVldWU6IGFuaW1hdGlvbi5vcHRzLnF1ZXVlXG5cdFx0fSApXG5cdCk7XG5cblx0cmV0dXJuIGFuaW1hdGlvbjtcbn1cblxualF1ZXJ5LkFuaW1hdGlvbiA9IGpRdWVyeS5leHRlbmQoIEFuaW1hdGlvbiwge1xuXG5cdHR3ZWVuZXJzOiB7XG5cdFx0XCIqXCI6IFsgZnVuY3Rpb24oIHByb3AsIHZhbHVlICkge1xuXHRcdFx0dmFyIHR3ZWVuID0gdGhpcy5jcmVhdGVUd2VlbiggcHJvcCwgdmFsdWUgKTtcblx0XHRcdGFkanVzdENTUyggdHdlZW4uZWxlbSwgcHJvcCwgcmNzc051bS5leGVjKCB2YWx1ZSApLCB0d2VlbiApO1xuXHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdH0gXVxuXHR9LFxuXG5cdHR3ZWVuZXI6IGZ1bmN0aW9uKCBwcm9wcywgY2FsbGJhY2sgKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBwcm9wcyApICkge1xuXHRcdFx0Y2FsbGJhY2sgPSBwcm9wcztcblx0XHRcdHByb3BzID0gWyBcIipcIiBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwcm9wcyA9IHByb3BzLm1hdGNoKCBybm90aHRtbHdoaXRlICk7XG5cdFx0fVxuXG5cdFx0dmFyIHByb3AsXG5cdFx0XHRpbmRleCA9IDAsXG5cdFx0XHRsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cblx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0cHJvcCA9IHByb3BzWyBpbmRleCBdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gPSBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXTtcblx0XHRcdEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fVxuXHR9LFxuXG5cdHByZWZpbHRlcnM6IFsgZGVmYXVsdFByZWZpbHRlciBdLFxuXG5cdHByZWZpbHRlcjogZnVuY3Rpb24oIGNhbGxiYWNrLCBwcmVwZW5kICkge1xuXHRcdGlmICggcHJlcGVuZCApIHtcblx0XHRcdEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnB1c2goIGNhbGxiYWNrICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cbmpRdWVyeS5zcGVlZCA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBmbiApIHtcblx0dmFyIG9wdCA9IHNwZWVkICYmIHR5cGVvZiBzcGVlZCA9PT0gXCJvYmplY3RcIiA/IGpRdWVyeS5leHRlbmQoIHt9LCBzcGVlZCApIDoge1xuXHRcdGNvbXBsZXRlOiBmbiB8fCAhZm4gJiYgZWFzaW5nIHx8XG5cdFx0XHRpc0Z1bmN0aW9uKCBzcGVlZCApICYmIHNwZWVkLFxuXHRcdGR1cmF0aW9uOiBzcGVlZCxcblx0XHRlYXNpbmc6IGZuICYmIGVhc2luZyB8fCBlYXNpbmcgJiYgIWlzRnVuY3Rpb24oIGVhc2luZyApICYmIGVhc2luZ1xuXHR9O1xuXG5cdC8vIEdvIHRvIHRoZSBlbmQgc3RhdGUgaWYgZnggYXJlIG9mZlxuXHRpZiAoIGpRdWVyeS5meC5vZmYgKSB7XG5cdFx0b3B0LmR1cmF0aW9uID0gMDtcblxuXHR9IGVsc2Uge1xuXHRcdGlmICggdHlwZW9mIG9wdC5kdXJhdGlvbiAhPT0gXCJudW1iZXJcIiApIHtcblx0XHRcdGlmICggb3B0LmR1cmF0aW9uIGluIGpRdWVyeS5meC5zcGVlZHMgKSB7XG5cdFx0XHRcdG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHNbIG9wdC5kdXJhdGlvbiBdO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvcHQuZHVyYXRpb24gPSBqUXVlcnkuZnguc3BlZWRzLl9kZWZhdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIE5vcm1hbGl6ZSBvcHQucXVldWUgLSB0cnVlL3VuZGVmaW5lZC9udWxsIC0+IFwiZnhcIlxuXHRpZiAoIG9wdC5xdWV1ZSA9PSBudWxsIHx8IG9wdC5xdWV1ZSA9PT0gdHJ1ZSApIHtcblx0XHRvcHQucXVldWUgPSBcImZ4XCI7XG5cdH1cblxuXHQvLyBRdWV1ZWluZ1xuXHRvcHQub2xkID0gb3B0LmNvbXBsZXRlO1xuXG5cdG9wdC5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggb3B0Lm9sZCApICkge1xuXHRcdFx0b3B0Lm9sZC5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHQucXVldWUgKSB7XG5cdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgb3B0LnF1ZXVlICk7XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiBvcHQ7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZhZGVUbzogZnVuY3Rpb24oIHNwZWVkLCB0bywgZWFzaW5nLCBjYWxsYmFjayApIHtcblxuXHRcdC8vIFNob3cgYW55IGhpZGRlbiBlbGVtZW50cyBhZnRlciBzZXR0aW5nIG9wYWNpdHkgdG8gMFxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggaXNIaWRkZW5XaXRoaW5UcmVlICkuY3NzKCBcIm9wYWNpdHlcIiwgMCApLnNob3coKVxuXG5cdFx0XHQvLyBBbmltYXRlIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWRcblx0XHRcdC5lbmQoKS5hbmltYXRlKCB7IG9wYWNpdHk6IHRvIH0sIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH0sXG5cdGFuaW1hdGU6IGZ1bmN0aW9uKCBwcm9wLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHR2YXIgZW1wdHkgPSBqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcCApLFxuXHRcdFx0b3B0YWxsID0galF1ZXJ5LnNwZWVkKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApLFxuXHRcdFx0ZG9BbmltYXRpb24gPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBPcGVyYXRlIG9uIGEgY29weSBvZiBwcm9wIHNvIHBlci1wcm9wZXJ0eSBlYXNpbmcgd29uJ3QgYmUgbG9zdFxuXHRcdFx0XHR2YXIgYW5pbSA9IEFuaW1hdGlvbiggdGhpcywgalF1ZXJ5LmV4dGVuZCgge30sIHByb3AgKSwgb3B0YWxsICk7XG5cblx0XHRcdFx0Ly8gRW1wdHkgYW5pbWF0aW9ucywgb3IgZmluaXNoaW5nIHJlc29sdmVzIGltbWVkaWF0ZWx5XG5cdFx0XHRcdGlmICggZW1wdHkgfHwgZGF0YVByaXYuZ2V0KCB0aGlzLCBcImZpbmlzaFwiICkgKSB7XG5cdFx0XHRcdFx0YW5pbS5zdG9wKCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRkb0FuaW1hdGlvbi5maW5pc2ggPSBkb0FuaW1hdGlvbjtcblxuXHRcdHJldHVybiBlbXB0eSB8fCBvcHRhbGwucXVldWUgPT09IGZhbHNlID9cblx0XHRcdHRoaXMuZWFjaCggZG9BbmltYXRpb24gKSA6XG5cdFx0XHR0aGlzLnF1ZXVlKCBvcHRhbGwucXVldWUsIGRvQW5pbWF0aW9uICk7XG5cdH0sXG5cdHN0b3A6IGZ1bmN0aW9uKCB0eXBlLCBjbGVhclF1ZXVlLCBnb3RvRW5kICkge1xuXHRcdHZhciBzdG9wUXVldWUgPSBmdW5jdGlvbiggaG9va3MgKSB7XG5cdFx0XHR2YXIgc3RvcCA9IGhvb2tzLnN0b3A7XG5cdFx0XHRkZWxldGUgaG9va3Muc3RvcDtcblx0XHRcdHN0b3AoIGdvdG9FbmQgKTtcblx0XHR9O1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGdvdG9FbmQgPSBjbGVhclF1ZXVlO1xuXHRcdFx0Y2xlYXJRdWV1ZSA9IHR5cGU7XG5cdFx0XHR0eXBlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIGNsZWFyUXVldWUgJiYgdHlwZSAhPT0gZmFsc2UgKSB7XG5cdFx0XHR0aGlzLnF1ZXVlKCB0eXBlIHx8IFwiZnhcIiwgW10gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkZXF1ZXVlID0gdHJ1ZSxcblx0XHRcdFx0aW5kZXggPSB0eXBlICE9IG51bGwgJiYgdHlwZSArIFwicXVldWVIb29rc1wiLFxuXHRcdFx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzLFxuXHRcdFx0XHRkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICk7XG5cblx0XHRcdGlmICggaW5kZXggKSB7XG5cdFx0XHRcdGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgKSB7XG5cdFx0XHRcdFx0c3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAoIGluZGV4IGluIGRhdGEgKSB7XG5cdFx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCAmJiBycnVuLnRlc3QoIGluZGV4ICkgKSB7XG5cdFx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Zm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHtcblx0XHRcdFx0aWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJlxuXHRcdFx0XHRcdCggdHlwZSA9PSBudWxsIHx8IHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApICkge1xuXG5cdFx0XHRcdFx0dGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggZ290b0VuZCApO1xuXHRcdFx0XHRcdGRlcXVldWUgPSBmYWxzZTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXJ0IHRoZSBuZXh0IGluIHRoZSBxdWV1ZSBpZiB0aGUgbGFzdCBzdGVwIHdhc24ndCBmb3JjZWQuXG5cdFx0XHQvLyBUaW1lcnMgY3VycmVudGx5IHdpbGwgY2FsbCB0aGVpciBjb21wbGV0ZSBjYWxsYmFja3MsIHdoaWNoXG5cdFx0XHQvLyB3aWxsIGRlcXVldWUgYnV0IG9ubHkgaWYgdGhleSB3ZXJlIGdvdG9FbmQuXG5cdFx0XHRpZiAoIGRlcXVldWUgfHwgIWdvdG9FbmQgKSB7XG5cdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXHRmaW5pc2g6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdGlmICggdHlwZSAhPT0gZmFsc2UgKSB7XG5cdFx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGluZGV4LFxuXHRcdFx0XHRkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICksXG5cdFx0XHRcdHF1ZXVlID0gZGF0YVsgdHlwZSArIFwicXVldWVcIiBdLFxuXHRcdFx0XHRob29rcyA9IGRhdGFbIHR5cGUgKyBcInF1ZXVlSG9va3NcIiBdLFxuXHRcdFx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzLFxuXHRcdFx0XHRsZW5ndGggPSBxdWV1ZSA/IHF1ZXVlLmxlbmd0aCA6IDA7XG5cblx0XHRcdC8vIEVuYWJsZSBmaW5pc2hpbmcgZmxhZyBvbiBwcml2YXRlIGRhdGFcblx0XHRcdGRhdGEuZmluaXNoID0gdHJ1ZTtcblxuXHRcdFx0Ly8gRW1wdHkgdGhlIHF1ZXVlIGZpcnN0XG5cdFx0XHRqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIFtdICk7XG5cblx0XHRcdGlmICggaG9va3MgJiYgaG9va3Muc3RvcCApIHtcblx0XHRcdFx0aG9va3Muc3RvcC5jYWxsKCB0aGlzLCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhY3RpdmUgYW5pbWF0aW9ucywgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmIHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApIHtcblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCB0cnVlICk7XG5cdFx0XHRcdFx0dGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBMb29rIGZvciBhbnkgYW5pbWF0aW9ucyBpbiB0aGUgb2xkIHF1ZXVlIGFuZCBmaW5pc2ggdGhlbVxuXHRcdFx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0aWYgKCBxdWV1ZVsgaW5kZXggXSAmJiBxdWV1ZVsgaW5kZXggXS5maW5pc2ggKSB7XG5cdFx0XHRcdFx0cXVldWVbIGluZGV4IF0uZmluaXNoLmNhbGwoIHRoaXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUdXJuIG9mZiBmaW5pc2hpbmcgZmxhZ1xuXHRcdFx0ZGVsZXRlIGRhdGEuZmluaXNoO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcInRvZ2dsZVwiLCBcInNob3dcIiwgXCJoaWRlXCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7XG5cdHZhciBjc3NGbiA9IGpRdWVyeS5mblsgbmFtZSBdO1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gc3BlZWQgPT0gbnVsbCB8fCB0eXBlb2Ygc3BlZWQgPT09IFwiYm9vbGVhblwiID9cblx0XHRcdGNzc0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSA6XG5cdFx0XHR0aGlzLmFuaW1hdGUoIGdlbkZ4KCBuYW1lLCB0cnVlICksIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH07XG59ICk7XG5cbi8vIEdlbmVyYXRlIHNob3J0Y3V0cyBmb3IgY3VzdG9tIGFuaW1hdGlvbnNcbmpRdWVyeS5lYWNoKCB7XG5cdHNsaWRlRG93bjogZ2VuRngoIFwic2hvd1wiICksXG5cdHNsaWRlVXA6IGdlbkZ4KCBcImhpZGVcIiApLFxuXHRzbGlkZVRvZ2dsZTogZ2VuRngoIFwidG9nZ2xlXCIgKSxcblx0ZmFkZUluOiB7IG9wYWNpdHk6IFwic2hvd1wiIH0sXG5cdGZhZGVPdXQ6IHsgb3BhY2l0eTogXCJoaWRlXCIgfSxcblx0ZmFkZVRvZ2dsZTogeyBvcGFjaXR5OiBcInRvZ2dsZVwiIH1cbn0sIGZ1bmN0aW9uKCBuYW1lLCBwcm9wcyApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH07XG59ICk7XG5cbmpRdWVyeS50aW1lcnMgPSBbXTtcbmpRdWVyeS5meC50aWNrID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0aW1lcixcblx0XHRpID0gMCxcblx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzO1xuXG5cdGZ4Tm93ID0gRGF0ZS5ub3coKTtcblxuXHRmb3IgKCA7IGkgPCB0aW1lcnMubGVuZ3RoOyBpKysgKSB7XG5cdFx0dGltZXIgPSB0aW1lcnNbIGkgXTtcblxuXHRcdC8vIFJ1biB0aGUgdGltZXIgYW5kIHNhZmVseSByZW1vdmUgaXQgd2hlbiBkb25lIChhbGxvd2luZyBmb3IgZXh0ZXJuYWwgcmVtb3ZhbClcblx0XHRpZiAoICF0aW1lcigpICYmIHRpbWVyc1sgaSBdID09PSB0aW1lciApIHtcblx0XHRcdHRpbWVycy5zcGxpY2UoIGktLSwgMSApO1xuXHRcdH1cblx0fVxuXG5cdGlmICggIXRpbWVycy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5LmZ4LnN0b3AoKTtcblx0fVxuXHRmeE5vdyA9IHVuZGVmaW5lZDtcbn07XG5cbmpRdWVyeS5meC50aW1lciA9IGZ1bmN0aW9uKCB0aW1lciApIHtcblx0alF1ZXJ5LnRpbWVycy5wdXNoKCB0aW1lciApO1xuXHRqUXVlcnkuZnguc3RhcnQoKTtcbn07XG5cbmpRdWVyeS5meC5pbnRlcnZhbCA9IDEzO1xualF1ZXJ5LmZ4LnN0YXJ0ID0gZnVuY3Rpb24oKSB7XG5cdGlmICggaW5Qcm9ncmVzcyApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpblByb2dyZXNzID0gdHJ1ZTtcblx0c2NoZWR1bGUoKTtcbn07XG5cbmpRdWVyeS5meC5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdGluUHJvZ3Jlc3MgPSBudWxsO1xufTtcblxualF1ZXJ5LmZ4LnNwZWVkcyA9IHtcblx0c2xvdzogNjAwLFxuXHRmYXN0OiAyMDAsXG5cblx0Ly8gRGVmYXVsdCBzcGVlZFxuXHRfZGVmYXVsdDogNDAwXG59O1xuXG5cbi8vIEJhc2VkIG9mZiBvZiB0aGUgcGx1Z2luIGJ5IENsaW50IEhlbGZlcnMsIHdpdGggcGVybWlzc2lvbi5cbi8vIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDEwMDMyNDAxNDc0Ny9odHRwOi8vYmxpbmRzaWduYWxzLmNvbS9pbmRleC5waHAvMjAwOS8wNy9qcXVlcnktZGVsYXkvXG5qUXVlcnkuZm4uZGVsYXkgPSBmdW5jdGlvbiggdGltZSwgdHlwZSApIHtcblx0dGltZSA9IGpRdWVyeS5meCA/IGpRdWVyeS5meC5zcGVlZHNbIHRpbWUgXSB8fCB0aW1lIDogdGltZTtcblx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlLCBmdW5jdGlvbiggbmV4dCwgaG9va3MgKSB7XG5cdFx0dmFyIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCggbmV4dCwgdGltZSApO1xuXHRcdGhvb2tzLnN0b3AgPSBmdW5jdGlvbigpIHtcblx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXQgKTtcblx0XHR9O1xuXHR9ICk7XG59O1xuXG5cbiggZnVuY3Rpb24oKSB7XG5cdHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApLFxuXHRcdHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwic2VsZWN0XCIgKSxcblx0XHRvcHQgPSBzZWxlY3QuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwib3B0aW9uXCIgKSApO1xuXG5cdGlucHV0LnR5cGUgPSBcImNoZWNrYm94XCI7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMyBvbmx5XG5cdC8vIERlZmF1bHQgdmFsdWUgZm9yIGEgY2hlY2tib3ggc2hvdWxkIGJlIFwib25cIlxuXHRzdXBwb3J0LmNoZWNrT24gPSBpbnB1dC52YWx1ZSAhPT0gXCJcIjtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gTXVzdCBhY2Nlc3Mgc2VsZWN0ZWRJbmRleCB0byBtYWtlIGRlZmF1bHQgb3B0aW9ucyBzZWxlY3Rcblx0c3VwcG9ydC5vcHRTZWxlY3RlZCA9IG9wdC5zZWxlY3RlZDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gQW4gaW5wdXQgbG9zZXMgaXRzIHZhbHVlIGFmdGVyIGJlY29taW5nIGEgcmFkaW9cblx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblx0aW5wdXQudmFsdWUgPSBcInRcIjtcblx0aW5wdXQudHlwZSA9IFwicmFkaW9cIjtcblx0c3VwcG9ydC5yYWRpb1ZhbHVlID0gaW5wdXQudmFsdWUgPT09IFwidFwiO1xufSApKCk7XG5cblxudmFyIGJvb2xIb29rLFxuXHRhdHRySGFuZGxlID0galF1ZXJ5LmV4cHIuYXR0ckhhbmRsZTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRhdHRyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LmF0dHIsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9LFxuXG5cdHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBuYW1lICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIHRoaXMsIG5hbWUgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHRhdHRyOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0dmFyIHJldCwgaG9va3MsXG5cdFx0XHRuVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHQvLyBEb24ndCBnZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzXG5cdFx0aWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBGYWxsYmFjayB0byBwcm9wIHdoZW4gYXR0cmlidXRlcyBhcmUgbm90IHN1cHBvcnRlZFxuXHRcdGlmICggdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlID09PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5wcm9wKCBlbGVtLCBuYW1lLCB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdC8vIEF0dHJpYnV0ZSBob29rcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgbG93ZXJjYXNlIHZlcnNpb25cblx0XHQvLyBHcmFiIG5lY2Vzc2FyeSBob29rIGlmIG9uZSBpcyBkZWZpbmVkXG5cdFx0aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cdFx0XHRob29rcyA9IGpRdWVyeS5hdHRySG9va3NbIG5hbWUudG9Mb3dlckNhc2UoKSBdIHx8XG5cdFx0XHRcdCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC50ZXN0KCBuYW1lICkgPyBib29sSG9vayA6IHVuZGVmaW5lZCApO1xuXHRcdH1cblxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggdmFsdWUgPT09IG51bGwgKSB7XG5cdFx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBob29rcyAmJiBcInNldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIHZhbHVlICsgXCJcIiApO1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblxuXHRcdHJldCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIG5hbWUgKTtcblxuXHRcdC8vIE5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHJldHVybiBudWxsLCB3ZSBub3JtYWxpemUgdG8gdW5kZWZpbmVkXG5cdFx0cmV0dXJuIHJldCA9PSBudWxsID8gdW5kZWZpbmVkIDogcmV0O1xuXHR9LFxuXG5cdGF0dHJIb29rczoge1xuXHRcdHR5cGU6IHtcblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHRpZiAoICFzdXBwb3J0LnJhZGlvVmFsdWUgJiYgdmFsdWUgPT09IFwicmFkaW9cIiAmJlxuXHRcdFx0XHRcdG5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSApIHtcblx0XHRcdFx0XHR2YXIgdmFsID0gZWxlbS52YWx1ZTtcblx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIHZhbHVlICk7XG5cdFx0XHRcdFx0aWYgKCB2YWwgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnZhbHVlID0gdmFsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdHZhciBuYW1lLFxuXHRcdFx0aSA9IDAsXG5cblx0XHRcdC8vIEF0dHJpYnV0ZSBuYW1lcyBjYW4gY29udGFpbiBub24tSFRNTCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnNcblx0XHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2F0dHJpYnV0ZXMtMlxuXHRcdFx0YXR0ck5hbWVzID0gdmFsdWUgJiYgdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKTtcblxuXHRcdGlmICggYXR0ck5hbWVzICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHR3aGlsZSAoICggbmFtZSA9IGF0dHJOYW1lc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIG5hbWUgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gSG9va3MgZm9yIGJvb2xlYW4gYXR0cmlidXRlc1xuYm9vbEhvb2sgPSB7XG5cdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkge1xuXHRcdGlmICggdmFsdWUgPT09IGZhbHNlICkge1xuXG5cdFx0XHQvLyBSZW1vdmUgYm9vbGVhbiBhdHRyaWJ1dGVzIHdoZW4gc2V0IHRvIGZhbHNlXG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgbmFtZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gbmFtZTtcblx0fVxufTtcblxualF1ZXJ5LmVhY2goIGpRdWVyeS5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKCAvXFx3Ky9nICksIGZ1bmN0aW9uKCBpLCBuYW1lICkge1xuXHR2YXIgZ2V0dGVyID0gYXR0ckhhbmRsZVsgbmFtZSBdIHx8IGpRdWVyeS5maW5kLmF0dHI7XG5cblx0YXR0ckhhbmRsZVsgbmFtZSBdID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdHZhciByZXQsIGhhbmRsZSxcblx0XHRcdGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRpZiAoICFpc1hNTCApIHtcblxuXHRcdFx0Ly8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcCBieSB0ZW1wb3JhcmlseSByZW1vdmluZyB0aGlzIGZ1bmN0aW9uIGZyb20gdGhlIGdldHRlclxuXHRcdFx0aGFuZGxlID0gYXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdO1xuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gcmV0O1xuXHRcdFx0cmV0ID0gZ2V0dGVyKCBlbGVtLCBuYW1lLCBpc1hNTCApICE9IG51bGwgP1xuXHRcdFx0XHRsb3dlcmNhc2VOYW1lIDpcblx0XHRcdFx0bnVsbDtcblx0XHRcdGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXSA9IGhhbmRsZTtcblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcbn0gKTtcblxuXG5cblxudmFyIHJmb2N1c2FibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyY2xpY2thYmxlID0gL14oPzphfGFyZWEpJC9pO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHByb3A6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkucHJvcCwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcDogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkZWxldGUgdGhpc1sgalF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lIF07XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdHZhciByZXQsIGhvb2tzLFxuXHRcdFx0blR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0Ly8gRG9uJ3QgZ2V0L3NldCBwcm9wZXJ0aWVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xuXHRcdGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIEZpeCBuYW1lIGFuZCBhdHRhY2ggaG9va3Ncblx0XHRcdG5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7XG5cdFx0XHRob29rcyA9IGpRdWVyeS5wcm9wSG9va3NbIG5hbWUgXTtcblx0XHR9XG5cblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gKCBlbGVtWyBuYW1lIF0gPSB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblxuXHRcdHJldHVybiBlbGVtWyBuYW1lIF07XG5cdH0sXG5cblx0cHJvcEhvb2tzOiB7XG5cdFx0dGFiSW5kZXg6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHRcdFx0XHQvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGVcblx0XHRcdFx0Ly8gY29ycmVjdCB2YWx1ZSB3aGVuIGl0IGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgc2V0XG5cdFx0XHRcdC8vIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE0MTExNjIzMzM0Ny9odHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9ibG9nLzIwMDgvMDEvMDkvZ2V0dGluZy1zZXR0aW5nLWFuZC1yZW1vdmluZy10YWJpbmRleC12YWx1ZXMtd2l0aC1qYXZhc2NyaXB0L1xuXHRcdFx0XHQvLyBVc2UgcHJvcGVyIGF0dHJpYnV0ZSByZXRyaWV2YWwoIzEyMDcyKVxuXHRcdFx0XHR2YXIgdGFiaW5kZXggPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInRhYmluZGV4XCIgKTtcblxuXHRcdFx0XHRpZiAoIHRhYmluZGV4ICkge1xuXHRcdFx0XHRcdHJldHVybiBwYXJzZUludCggdGFiaW5kZXgsIDEwICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0cmZvY3VzYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgfHxcblx0XHRcdFx0XHRyY2xpY2thYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJlxuXHRcdFx0XHRcdGVsZW0uaHJlZlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0cHJvcEZpeDoge1xuXHRcdFwiZm9yXCI6IFwiaHRtbEZvclwiLFxuXHRcdFwiY2xhc3NcIjogXCJjbGFzc05hbWVcIlxuXHR9XG59ICk7XG5cbi8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuLy8gQWNjZXNzaW5nIHRoZSBzZWxlY3RlZEluZGV4IHByb3BlcnR5XG4vLyBmb3JjZXMgdGhlIGJyb3dzZXIgdG8gcmVzcGVjdCBzZXR0aW5nIHNlbGVjdGVkXG4vLyBvbiB0aGUgb3B0aW9uXG4vLyBUaGUgZ2V0dGVyIGVuc3VyZXMgYSBkZWZhdWx0IG9wdGlvbiBpcyBzZWxlY3RlZFxuLy8gd2hlbiBpbiBhbiBvcHRncm91cFxuLy8gZXNsaW50IHJ1bGUgXCJuby11bnVzZWQtZXhwcmVzc2lvbnNcIiBpcyBkaXNhYmxlZCBmb3IgdGhpcyBjb2RlXG4vLyBzaW5jZSBpdCBjb25zaWRlcnMgc3VjaCBhY2Nlc3Npb25zIG5vb3BcbmlmICggIXN1cHBvcnQub3B0U2VsZWN0ZWQgKSB7XG5cdGpRdWVyeS5wcm9wSG9va3Muc2VsZWN0ZWQgPSB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0LyogZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogXCJvZmZcIiAqL1xuXG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgJiYgcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6IFwib2ZmXCIgKi9cblxuXHRcdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdGlmICggcGFyZW50ICkge1xuXHRcdFx0XHRwYXJlbnQuc2VsZWN0ZWRJbmRleDtcblxuXHRcdFx0XHRpZiAoIHBhcmVudC5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRcdHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbmpRdWVyeS5lYWNoKCBbXG5cdFwidGFiSW5kZXhcIixcblx0XCJyZWFkT25seVwiLFxuXHRcIm1heExlbmd0aFwiLFxuXHRcImNlbGxTcGFjaW5nXCIsXG5cdFwiY2VsbFBhZGRpbmdcIixcblx0XCJyb3dTcGFuXCIsXG5cdFwiY29sU3BhblwiLFxuXHRcInVzZU1hcFwiLFxuXHRcImZyYW1lQm9yZGVyXCIsXG5cdFwiY29udGVudEVkaXRhYmxlXCJcbl0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkucHJvcEZpeFsgdGhpcy50b0xvd2VyQ2FzZSgpIF0gPSB0aGlzO1xufSApO1xuXG5cblxuXG5cdC8vIFN0cmlwIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlIGFjY29yZGluZyB0byBIVE1MIHNwZWNcblx0Ly8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3N0cmlwLWFuZC1jb2xsYXBzZS1hc2NpaS13aGl0ZXNwYWNlXG5cdGZ1bmN0aW9uIHN0cmlwQW5kQ29sbGFwc2UoIHZhbHVlICkge1xuXHRcdHZhciB0b2tlbnMgPSB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXHRcdHJldHVybiB0b2tlbnMuam9pbiggXCIgXCIgKTtcblx0fVxuXG5cbmZ1bmN0aW9uIGdldENsYXNzKCBlbGVtICkge1xuXHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiApIHx8IFwiXCI7XG59XG5cbmZ1bmN0aW9uIGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApIHtcblx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblx0fVxuXHRyZXR1cm4gW107XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0YWRkQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsXG5cdFx0XHRpID0gMDtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5hZGRDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0Y2xhc3NlcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCBjbGFzc2VzLmxlbmd0aCApIHtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0Y3VyVmFsdWUgPSBnZXRDbGFzcyggZWxlbSApO1xuXHRcdFx0XHRjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmICggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgXCIgXCIgKTtcblxuXHRcdFx0XHRpZiAoIGN1ciApIHtcblx0XHRcdFx0XHRqID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkge1xuXHRcdFx0XHRcdFx0aWYgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGF6eiArIFwiIFwiICkgPCAwICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgKz0gY2xhenogKyBcIiBcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzZXMsIGVsZW0sIGN1ciwgY3VyVmFsdWUsIGNsYXp6LCBqLCBmaW5hbFZhbHVlLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaiApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkucmVtb3ZlQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5hdHRyKCBcImNsYXNzXCIsIFwiXCIgKTtcblx0XHR9XG5cblx0XHRjbGFzc2VzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGNsYXNzZXMubGVuZ3RoICkge1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCBlbGVtICk7XG5cblx0XHRcdFx0Ly8gVGhpcyBleHByZXNzaW9uIGlzIGhlcmUgZm9yIGJldHRlciBjb21wcmVzc2liaWxpdHkgKHNlZSBhZGRDbGFzcylcblx0XHRcdFx0Y3VyID0gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoIFwiIFwiICsgc3RyaXBBbmRDb2xsYXBzZSggY3VyVmFsdWUgKSArIFwiIFwiICk7XG5cblx0XHRcdFx0aWYgKCBjdXIgKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGNsYXp6ID0gY2xhc3Nlc1sgaisrIF0gKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlICphbGwqIGluc3RhbmNlc1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGF6eiArIFwiIFwiICkgPiAtMSApIHtcblx0XHRcdFx0XHRcdFx0Y3VyID0gY3VyLnJlcGxhY2UoIFwiIFwiICsgY2xhenogKyBcIiBcIiwgXCIgXCIgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUsIHN0YXRlVmFsICkge1xuXHRcdHZhciB0eXBlID0gdHlwZW9mIHZhbHVlLFxuXHRcdFx0aXNWYWxpZFZhbHVlID0gdHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBBcnJheS5pc0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGVWYWwgPT09IFwiYm9vbGVhblwiICYmIGlzVmFsaWRWYWx1ZSApIHtcblx0XHRcdHJldHVybiBzdGF0ZVZhbCA/IHRoaXMuYWRkQ2xhc3MoIHZhbHVlICkgOiB0aGlzLnJlbW92ZUNsYXNzKCB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS50b2dnbGVDbGFzcyhcblx0XHRcdFx0XHR2YWx1ZS5jYWxsKCB0aGlzLCBpLCBnZXRDbGFzcyggdGhpcyApLCBzdGF0ZVZhbCApLFxuXHRcdFx0XHRcdHN0YXRlVmFsXG5cdFx0XHRcdCk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgY2xhc3NOYW1lLCBpLCBzZWxmLCBjbGFzc05hbWVzO1xuXG5cdFx0XHRpZiAoIGlzVmFsaWRWYWx1ZSApIHtcblxuXHRcdFx0XHQvLyBUb2dnbGUgaW5kaXZpZHVhbCBjbGFzcyBuYW1lc1xuXHRcdFx0XHRpID0gMDtcblx0XHRcdFx0c2VsZiA9IGpRdWVyeSggdGhpcyApO1xuXHRcdFx0XHRjbGFzc05hbWVzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRcdFx0d2hpbGUgKCAoIGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkrKyBdICkgKSB7XG5cblx0XHRcdFx0XHQvLyBDaGVjayBlYWNoIGNsYXNzTmFtZSBnaXZlbiwgc3BhY2Ugc2VwYXJhdGVkIGxpc3Rcblx0XHRcdFx0XHRpZiAoIHNlbGYuaGFzQ2xhc3MoIGNsYXNzTmFtZSApICkge1xuXHRcdFx0XHRcdFx0c2VsZi5yZW1vdmVDbGFzcyggY2xhc3NOYW1lICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHNlbGYuYWRkQ2xhc3MoIGNsYXNzTmFtZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBUb2dnbGUgd2hvbGUgY2xhc3MgbmFtZVxuXHRcdFx0fSBlbHNlIGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRcdFx0Y2xhc3NOYW1lID0gZ2V0Q2xhc3MoIHRoaXMgKTtcblx0XHRcdFx0aWYgKCBjbGFzc05hbWUgKSB7XG5cblx0XHRcdFx0XHQvLyBTdG9yZSBjbGFzc05hbWUgaWYgc2V0XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCBcIl9fY2xhc3NOYW1lX19cIiwgY2xhc3NOYW1lICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiB0aGUgZWxlbWVudCBoYXMgYSBjbGFzcyBuYW1lIG9yIGlmIHdlJ3JlIHBhc3NlZCBgZmFsc2VgLFxuXHRcdFx0XHQvLyB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgY2xhc3NuYW1lIChpZiB0aGVyZSB3YXMgb25lLCB0aGUgYWJvdmUgc2F2ZWQgaXQpLlxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYnJpbmcgYmFjayB3aGF0ZXZlciB3YXMgcHJldmlvdXNseSBzYXZlZCAoaWYgYW55dGhpbmcpLFxuXHRcdFx0XHQvLyBmYWxsaW5nIGJhY2sgdG8gdGhlIGVtcHR5IHN0cmluZyBpZiBub3RoaW5nIHdhcyBzdG9yZWQuXG5cdFx0XHRcdGlmICggdGhpcy5zZXRBdHRyaWJ1dGUgKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIixcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSB8fCB2YWx1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0XHRcdFx0XCJcIiA6XG5cdFx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRoaXMsIFwiX19jbGFzc05hbWVfX1wiICkgfHwgXCJcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0aGFzQ2xhc3M6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgY2xhc3NOYW1lLCBlbGVtLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRjbGFzc05hbWUgPSBcIiBcIiArIHNlbGVjdG9yICsgXCIgXCI7XG5cdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdCggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBnZXRDbGFzcyggZWxlbSApICkgKyBcIiBcIiApLmluZGV4T2YoIGNsYXNzTmFtZSApID4gLTEgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59ICk7XG5cblxuXG5cbnZhciBycmV0dXJuID0gL1xcci9nO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHZhbDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBob29rcywgcmV0LCB2YWx1ZUlzRnVuY3Rpb24sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0aG9va3MgPSBqUXVlcnkudmFsSG9va3NbIGVsZW0udHlwZSBdIHx8XG5cdFx0XHRcdFx0alF1ZXJ5LnZhbEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0XHRpZiAoIGhvb2tzICYmXG5cdFx0XHRcdFx0XCJnZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBcInZhbHVlXCIgKSApICE9PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldCA9IGVsZW0udmFsdWU7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIG1vc3QgY29tbW9uIHN0cmluZyBjYXNlc1xuXHRcdFx0XHRpZiAoIHR5cGVvZiByZXQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldC5yZXBsYWNlKCBycmV0dXJuLCBcIlwiICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBIYW5kbGUgY2FzZXMgd2hlcmUgdmFsdWUgaXMgbnVsbC91bmRlZiBvciBudW1iZXJcblx0XHRcdFx0cmV0dXJuIHJldCA9PSBudWxsID8gXCJcIiA6IHJldDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhbHVlSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIHZhbHVlICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdHZhciB2YWw7XG5cblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSAhPT0gMSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZhbHVlSXNGdW5jdGlvbiApIHtcblx0XHRcdFx0dmFsID0gdmFsdWUuY2FsbCggdGhpcywgaSwgalF1ZXJ5KCB0aGlzICkudmFsKCkgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhbCA9IHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUcmVhdCBudWxsL3VuZGVmaW5lZCBhcyBcIlwiOyBjb252ZXJ0IG51bWJlcnMgdG8gc3RyaW5nXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHR2YWwgPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHR2YWwgKz0gXCJcIjtcblxuXHRcdFx0fSBlbHNlIGlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7XG5cdFx0XHRcdHZhbCA9IGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICsgXCJcIjtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0Ly8gSWYgc2V0IHJldHVybnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmdcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoIFwic2V0XCIgaW4gaG9va3MgKSB8fCBob29rcy5zZXQoIHRoaXMsIHZhbCwgXCJ2YWx1ZVwiICkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHZhbDtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHR2YWxIb29rczoge1xuXHRcdG9wdGlvbjoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHR2YXIgdmFsID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ2YWx1ZVwiICk7XG5cdFx0XHRcdHJldHVybiB2YWwgIT0gbnVsbCA/XG5cdFx0XHRcdFx0dmFsIDpcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSBvbmx5XG5cdFx0XHRcdFx0Ly8gb3B0aW9uLnRleHQgdGhyb3dzIGV4Y2VwdGlvbnMgKCMxNDY4NiwgIzE0ODU4KVxuXHRcdFx0XHRcdC8vIFN0cmlwIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlXG5cdFx0XHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLXdoaXRlc3BhY2Vcblx0XHRcdFx0XHRzdHJpcEFuZENvbGxhcHNlKCBqUXVlcnkudGV4dCggZWxlbSApICk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRzZWxlY3Q6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciB2YWx1ZSwgb3B0aW9uLCBpLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0aW5kZXggPSBlbGVtLnNlbGVjdGVkSW5kZXgsXG5cdFx0XHRcdFx0b25lID0gZWxlbS50eXBlID09PSBcInNlbGVjdC1vbmVcIixcblx0XHRcdFx0XHR2YWx1ZXMgPSBvbmUgPyBudWxsIDogW10sXG5cdFx0XHRcdFx0bWF4ID0gb25lID8gaW5kZXggKyAxIDogb3B0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0aWYgKCBpbmRleCA8IDAgKSB7XG5cdFx0XHRcdFx0aSA9IG1heDtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGkgPSBvbmUgPyBpbmRleCA6IDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zXG5cdFx0XHRcdGZvciAoIDsgaSA8IG1heDsgaSsrICkge1xuXHRcdFx0XHRcdG9wdGlvbiA9IG9wdGlvbnNbIGkgXTtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0Ly8gSUU4LTkgZG9lc24ndCB1cGRhdGUgc2VsZWN0ZWQgYWZ0ZXIgZm9ybSByZXNldCAoIzI1NTEpXG5cdFx0XHRcdFx0aWYgKCAoIG9wdGlvbi5zZWxlY3RlZCB8fCBpID09PSBpbmRleCApICYmXG5cblx0XHRcdFx0XHRcdFx0Ly8gRG9uJ3QgcmV0dXJuIG9wdGlvbnMgdGhhdCBhcmUgZGlzYWJsZWQgb3IgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0XHRcdFx0XHQhb3B0aW9uLmRpc2FibGVkICYmXG5cdFx0XHRcdFx0XHRcdCggIW9wdGlvbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8XG5cdFx0XHRcdFx0XHRcdFx0IW5vZGVOYW1lKCBvcHRpb24ucGFyZW50Tm9kZSwgXCJvcHRncm91cFwiICkgKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gR2V0IHRoZSBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhlIG9wdGlvblxuXHRcdFx0XHRcdFx0dmFsdWUgPSBqUXVlcnkoIG9wdGlvbiApLnZhbCgpO1xuXG5cdFx0XHRcdFx0XHQvLyBXZSBkb24ndCBuZWVkIGFuIGFycmF5IGZvciBvbmUgc2VsZWN0c1xuXHRcdFx0XHRcdFx0aWYgKCBvbmUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gTXVsdGktU2VsZWN0cyByZXR1cm4gYW4gYXJyYXlcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIG9wdGlvblNldCwgb3B0aW9uLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0dmFsdWVzID0galF1ZXJ5Lm1ha2VBcnJheSggdmFsdWUgKSxcblx0XHRcdFx0XHRpID0gb3B0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tY29uZC1hc3NpZ24gKi9cblxuXHRcdFx0XHRcdGlmICggb3B0aW9uLnNlbGVjdGVkID1cblx0XHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBqUXVlcnkudmFsSG9va3Mub3B0aW9uLmdldCggb3B0aW9uICksIHZhbHVlcyApID4gLTFcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG9wdGlvblNldCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRm9yY2UgYnJvd3NlcnMgdG8gYmVoYXZlIGNvbnNpc3RlbnRseSB3aGVuIG5vbi1tYXRjaGluZyB2YWx1ZSBpcyBzZXRcblx0XHRcdFx0aWYgKCAhb3B0aW9uU2V0ICkge1xuXHRcdFx0XHRcdGVsZW0uc2VsZWN0ZWRJbmRleCA9IC0xO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBnZXR0ZXIvc2V0dGVyXG5qUXVlcnkuZWFjaCggWyBcInJhZGlvXCIsIFwiY2hlY2tib3hcIiBdLCBmdW5jdGlvbigpIHtcblx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSB7XG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0uY2hlY2tlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVlcnkoIGVsZW0gKS52YWwoKSwgdmFsdWUgKSA+IC0xICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAoICFzdXBwb3J0LmNoZWNrT24gKSB7XG5cdFx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0uZ2V0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBudWxsID8gXCJvblwiIDogZWxlbS52YWx1ZTtcblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFJldHVybiBqUXVlcnkgZm9yIGF0dHJpYnV0ZXMtb25seSBpbmNsdXNpb25cblxuXG5zdXBwb3J0LmZvY3VzaW4gPSBcIm9uZm9jdXNpblwiIGluIHdpbmRvdztcblxuXG52YXIgcmZvY3VzTW9ycGggPSAvXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sXG5cdHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrID0gZnVuY3Rpb24oIGUgKSB7XG5cdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0fTtcblxualF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmV2ZW50LCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIGV2ZW50LCBkYXRhLCBlbGVtLCBvbmx5SGFuZGxlcnMgKSB7XG5cblx0XHR2YXIgaSwgY3VyLCB0bXAsIGJ1YmJsZVR5cGUsIG9udHlwZSwgaGFuZGxlLCBzcGVjaWFsLCBsYXN0RWxlbWVudCxcblx0XHRcdGV2ZW50UGF0aCA9IFsgZWxlbSB8fCBkb2N1bWVudCBdLFxuXHRcdFx0dHlwZSA9IGhhc093bi5jYWxsKCBldmVudCwgXCJ0eXBlXCIgKSA/IGV2ZW50LnR5cGUgOiBldmVudCxcblx0XHRcdG5hbWVzcGFjZXMgPSBoYXNPd24uY2FsbCggZXZlbnQsIFwibmFtZXNwYWNlXCIgKSA/IGV2ZW50Lm5hbWVzcGFjZS5zcGxpdCggXCIuXCIgKSA6IFtdO1xuXG5cdFx0Y3VyID0gbGFzdEVsZW1lbnQgPSB0bXAgPSBlbGVtID0gZWxlbSB8fCBkb2N1bWVudDtcblxuXHRcdC8vIERvbid0IGRvIGV2ZW50cyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gZm9jdXMvYmx1ciBtb3JwaHMgdG8gZm9jdXNpbi9vdXQ7IGVuc3VyZSB3ZSdyZSBub3QgZmlyaW5nIHRoZW0gcmlnaHQgbm93XG5cdFx0aWYgKCByZm9jdXNNb3JwaC50ZXN0KCB0eXBlICsgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZS5pbmRleE9mKCBcIi5cIiApID4gLTEgKSB7XG5cblx0XHRcdC8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKClcblx0XHRcdG5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCBcIi5cIiApO1xuXHRcdFx0dHlwZSA9IG5hbWVzcGFjZXMuc2hpZnQoKTtcblx0XHRcdG5hbWVzcGFjZXMuc29ydCgpO1xuXHRcdH1cblx0XHRvbnR5cGUgPSB0eXBlLmluZGV4T2YoIFwiOlwiICkgPCAwICYmIFwib25cIiArIHR5cGU7XG5cblx0XHQvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYSBqUXVlcnkuRXZlbnQgb2JqZWN0LCBPYmplY3QsIG9yIGp1c3QgYW4gZXZlbnQgdHlwZSBzdHJpbmdcblx0XHRldmVudCA9IGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID9cblx0XHRcdGV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIHR5cGUsIHR5cGVvZiBldmVudCA9PT0gXCJvYmplY3RcIiAmJiBldmVudCApO1xuXG5cdFx0Ly8gVHJpZ2dlciBiaXRtYXNrOiAmIDEgZm9yIG5hdGl2ZSBoYW5kbGVyczsgJiAyIGZvciBqUXVlcnkgKGFsd2F5cyB0cnVlKVxuXHRcdGV2ZW50LmlzVHJpZ2dlciA9IG9ubHlIYW5kbGVycyA/IDIgOiAzO1xuXHRcdGV2ZW50Lm5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuam9pbiggXCIuXCIgKTtcblx0XHRldmVudC5ybmFtZXNwYWNlID0gZXZlbnQubmFtZXNwYWNlID9cblx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApIDpcblx0XHRcdG51bGw7XG5cblx0XHQvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4gY2FzZSBpdCBpcyBiZWluZyByZXVzZWRcblx0XHRldmVudC5yZXN1bHQgPSB1bmRlZmluZWQ7XG5cdFx0aWYgKCAhZXZlbnQudGFyZ2V0ICkge1xuXHRcdFx0ZXZlbnQudGFyZ2V0ID0gZWxlbTtcblx0XHR9XG5cblx0XHQvLyBDbG9uZSBhbnkgaW5jb21pbmcgZGF0YSBhbmQgcHJlcGVuZCB0aGUgZXZlbnQsIGNyZWF0aW5nIHRoZSBoYW5kbGVyIGFyZyBsaXN0XG5cdFx0ZGF0YSA9IGRhdGEgPT0gbnVsbCA/XG5cdFx0XHRbIGV2ZW50IF0gOlxuXHRcdFx0alF1ZXJ5Lm1ha2VBcnJheSggZGF0YSwgWyBldmVudCBdICk7XG5cblx0XHQvLyBBbGxvdyBzcGVjaWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzXG5cdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmIHNwZWNpYWwudHJpZ2dlciAmJiBzcGVjaWFsLnRyaWdnZXIuYXBwbHkoIGVsZW0sIGRhdGEgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGV2ZW50IHByb3BhZ2F0aW9uIHBhdGggaW4gYWR2YW5jZSwgcGVyIFczQyBldmVudHMgc3BlYyAoIzk5NTEpXG5cdFx0Ly8gQnViYmxlIHVwIHRvIGRvY3VtZW50LCB0aGVuIHRvIHdpbmRvdzsgd2F0Y2ggZm9yIGEgZ2xvYmFsIG93bmVyRG9jdW1lbnQgdmFyICgjOTcyNClcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIXNwZWNpYWwubm9CdWJibGUgJiYgIWlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdGJ1YmJsZVR5cGUgPSBzcGVjaWFsLmRlbGVnYXRlVHlwZSB8fCB0eXBlO1xuXHRcdFx0aWYgKCAhcmZvY3VzTW9ycGgudGVzdCggYnViYmxlVHlwZSArIHR5cGUgKSApIHtcblx0XHRcdFx0Y3VyID0gY3VyLnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKCA7IGN1cjsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCBjdXIgKTtcblx0XHRcdFx0dG1wID0gY3VyO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPbmx5IGFkZCB3aW5kb3cgaWYgd2UgZ290IHRvIGRvY3VtZW50IChlLmcuLCBub3QgcGxhaW4gb2JqIG9yIGRldGFjaGVkIERPTSlcblx0XHRcdGlmICggdG1wID09PSAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCApICkge1xuXHRcdFx0XHRldmVudFBhdGgucHVzaCggdG1wLmRlZmF1bHRWaWV3IHx8IHRtcC5wYXJlbnRXaW5kb3cgfHwgd2luZG93ICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRmlyZSBoYW5kbGVycyBvbiB0aGUgZXZlbnQgcGF0aFxuXHRcdGkgPSAwO1xuXHRcdHdoaWxlICggKCBjdXIgPSBldmVudFBhdGhbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRsYXN0RWxlbWVudCA9IGN1cjtcblx0XHRcdGV2ZW50LnR5cGUgPSBpID4gMSA/XG5cdFx0XHRcdGJ1YmJsZVR5cGUgOlxuXHRcdFx0XHRzcGVjaWFsLmJpbmRUeXBlIHx8IHR5cGU7XG5cblx0XHRcdC8vIGpRdWVyeSBoYW5kbGVyXG5cdFx0XHRoYW5kbGUgPSAoIGRhdGFQcml2LmdldCggY3VyLCBcImV2ZW50c1wiICkgfHwge30gKVsgZXZlbnQudHlwZSBdICYmXG5cdFx0XHRcdGRhdGFQcml2LmdldCggY3VyLCBcImhhbmRsZVwiICk7XG5cdFx0XHRpZiAoIGhhbmRsZSApIHtcblx0XHRcdFx0aGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTmF0aXZlIGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9IG9udHlwZSAmJiBjdXJbIG9udHlwZSBdO1xuXHRcdFx0aWYgKCBoYW5kbGUgJiYgaGFuZGxlLmFwcGx5ICYmIGFjY2VwdERhdGEoIGN1ciApICkge1xuXHRcdFx0XHRldmVudC5yZXN1bHQgPSBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0XHRpZiAoIGV2ZW50LnJlc3VsdCA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRldmVudC50eXBlID0gdHlwZTtcblxuXHRcdC8vIElmIG5vYm9keSBwcmV2ZW50ZWQgdGhlIGRlZmF1bHQgYWN0aW9uLCBkbyBpdCBub3dcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICkge1xuXG5cdFx0XHRpZiAoICggIXNwZWNpYWwuX2RlZmF1bHQgfHxcblx0XHRcdFx0c3BlY2lhbC5fZGVmYXVsdC5hcHBseSggZXZlbnRQYXRoLnBvcCgpLCBkYXRhICkgPT09IGZhbHNlICkgJiZcblx0XHRcdFx0YWNjZXB0RGF0YSggZWxlbSApICkge1xuXG5cdFx0XHRcdC8vIENhbGwgYSBuYXRpdmUgRE9NIG1ldGhvZCBvbiB0aGUgdGFyZ2V0IHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgZXZlbnQuXG5cdFx0XHRcdC8vIERvbid0IGRvIGRlZmF1bHQgYWN0aW9ucyBvbiB3aW5kb3csIHRoYXQncyB3aGVyZSBnbG9iYWwgdmFyaWFibGVzIGJlICgjNjE3MClcblx0XHRcdFx0aWYgKCBvbnR5cGUgJiYgaXNGdW5jdGlvbiggZWxlbVsgdHlwZSBdICkgJiYgIWlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdFx0XHQvLyBEb24ndCByZS10cmlnZ2VyIGFuIG9uRk9PIGV2ZW50IHdoZW4gd2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9kXG5cdFx0XHRcdFx0dG1wID0gZWxlbVsgb250eXBlIF07XG5cblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcblx0XHRcdFx0XHRcdGVsZW1bIG9udHlwZSBdID0gbnVsbDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmV2ZW50IHJlLXRyaWdnZXJpbmcgb2YgdGhlIHNhbWUgZXZlbnQsIHNpbmNlIHdlIGFscmVhZHkgYnViYmxlZCBpdCBhYm92ZVxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB0eXBlO1xuXG5cdFx0XHRcdFx0aWYgKCBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0XHRcdFx0bGFzdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgc3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlbGVtWyB0eXBlIF0oKTtcblxuXHRcdFx0XHRcdGlmICggZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdFx0XHRcdGxhc3RFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHVuZGVmaW5lZDtcblxuXHRcdFx0XHRcdGlmICggdG1wICkge1xuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSB0bXA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LnJlc3VsdDtcblx0fSxcblxuXHQvLyBQaWdneWJhY2sgb24gYSBkb25vciBldmVudCB0byBzaW11bGF0ZSBhIGRpZmZlcmVudCBvbmVcblx0Ly8gVXNlZCBvbmx5IGZvciBgZm9jdXMoaW4gfCBvdXQpYCBldmVudHNcblx0c2ltdWxhdGU6IGZ1bmN0aW9uKCB0eXBlLCBlbGVtLCBldmVudCApIHtcblx0XHR2YXIgZSA9IGpRdWVyeS5leHRlbmQoXG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCksXG5cdFx0XHRldmVudCxcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0aXNTaW11bGF0ZWQ6IHRydWVcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIGUsIG51bGwsIGVsZW0gKTtcblx0fVxuXG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHR0cmlnZ2VyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlzICk7XG5cdFx0fSApO1xuXHR9LFxuXHR0cmlnZ2VySGFuZGxlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIGVsZW0gPSB0aGlzWyAwIF07XG5cdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCBlbGVtLCB0cnVlICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cblxuLy8gU3VwcG9ydDogRmlyZWZveCA8PTQ0XG4vLyBGaXJlZm94IGRvZXNuJ3QgaGF2ZSBmb2N1cyhpbiB8IG91dCkgZXZlbnRzXG4vLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY4Nzc4N1xuLy9cbi8vIFN1cHBvcnQ6IENocm9tZSA8PTQ4IC0gNDksIFNhZmFyaSA8PTkuMCAtIDkuMVxuLy8gZm9jdXMoaW4gfCBvdXQpIGV2ZW50cyBmaXJlIGFmdGVyIGZvY3VzICYgYmx1ciBldmVudHMsXG4vLyB3aGljaCBpcyBzcGVjIHZpb2xhdGlvbiAtIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnRzLWZvY3VzZXZlbnQtZXZlbnQtb3JkZXJcbi8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDQ5ODU3XG5pZiAoICFzdXBwb3J0LmZvY3VzaW4gKSB7XG5cdGpRdWVyeS5lYWNoKCB7IGZvY3VzOiBcImZvY3VzaW5cIiwgYmx1cjogXCJmb2N1c291dFwiIH0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XG5cblx0XHQvLyBBdHRhY2ggYSBzaW5nbGUgY2FwdHVyaW5nIGhhbmRsZXIgb24gdGhlIGRvY3VtZW50IHdoaWxlIHNvbWVvbmUgd2FudHMgZm9jdXNpbi9mb2N1c291dFxuXHRcdHZhciBoYW5kbGVyID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBmaXgsIGV2ZW50LnRhcmdldCwgalF1ZXJ5LmV2ZW50LmZpeCggZXZlbnQgKSApO1xuXHRcdH07XG5cblx0XHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZml4IF0gPSB7XG5cdFx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcyxcblx0XHRcdFx0XHRhdHRhY2hlcyA9IGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXggKTtcblxuXHRcdFx0XHRpZiAoICFhdHRhY2hlcyApIHtcblx0XHRcdFx0XHRkb2MuYWRkRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXgsICggYXR0YWNoZXMgfHwgMCApICsgMSApO1xuXHRcdFx0fSxcblx0XHRcdHRlYXJkb3duOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCApIC0gMTtcblxuXHRcdFx0XHRpZiAoICFhdHRhY2hlcyApIHtcblx0XHRcdFx0XHRkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApO1xuXHRcdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZG9jLCBmaXggKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXgsIGF0dGFjaGVzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9ICk7XG59XG52YXIgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247XG5cbnZhciBub25jZSA9IERhdGUubm93KCk7XG5cbnZhciBycXVlcnkgPSAoIC9cXD8vICk7XG5cblxuXG4vLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nXG5qUXVlcnkucGFyc2VYTUwgPSBmdW5jdGlvbiggZGF0YSApIHtcblx0dmFyIHhtbDtcblx0aWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdC8vIElFIHRocm93cyBvbiBwYXJzZUZyb21TdHJpbmcgd2l0aCBpbnZhbGlkIGlucHV0LlxuXHR0cnkge1xuXHRcdHhtbCA9ICggbmV3IHdpbmRvdy5ET01QYXJzZXIoKSApLnBhcnNlRnJvbVN0cmluZyggZGF0YSwgXCJ0ZXh0L3htbFwiICk7XG5cdH0gY2F0Y2ggKCBlICkge1xuXHRcdHhtbCA9IHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmICggIXhtbCB8fCB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwicGFyc2VyZXJyb3JcIiApLmxlbmd0aCApIHtcblx0XHRqUXVlcnkuZXJyb3IoIFwiSW52YWxpZCBYTUw6IFwiICsgZGF0YSApO1xuXHR9XG5cdHJldHVybiB4bWw7XG59O1xuXG5cbnZhclxuXHRyYnJhY2tldCA9IC9cXFtcXF0kLyxcblx0ckNSTEYgPSAvXFxyP1xcbi9nLFxuXHRyc3VibWl0dGVyVHlwZXMgPSAvXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksXG5cdHJzdWJtaXR0YWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtcblxuZnVuY3Rpb24gYnVpbGRQYXJhbXMoIHByZWZpeCwgb2JqLCB0cmFkaXRpb25hbCwgYWRkICkge1xuXHR2YXIgbmFtZTtcblxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIG9iaiApICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIGFycmF5IGl0ZW0uXG5cdFx0alF1ZXJ5LmVhY2goIG9iaiwgZnVuY3Rpb24oIGksIHYgKSB7XG5cdFx0XHRpZiAoIHRyYWRpdGlvbmFsIHx8IHJicmFja2V0LnRlc3QoIHByZWZpeCApICkge1xuXG5cdFx0XHRcdC8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci5cblx0XHRcdFx0YWRkKCBwcmVmaXgsIHYgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBJdGVtIGlzIG5vbi1zY2FsYXIgKGFycmF5IG9yIG9iamVjdCksIGVuY29kZSBpdHMgbnVtZXJpYyBpbmRleC5cblx0XHRcdFx0YnVpbGRQYXJhbXMoXG5cdFx0XHRcdFx0cHJlZml4ICsgXCJbXCIgKyAoIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT0gbnVsbCA/IGkgOiBcIlwiICkgKyBcIl1cIixcblx0XHRcdFx0XHR2LFxuXHRcdFx0XHRcdHRyYWRpdGlvbmFsLFxuXHRcdFx0XHRcdGFkZFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHR9IGVsc2UgaWYgKCAhdHJhZGl0aW9uYWwgJiYgdG9UeXBlKCBvYmogKSA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBvYmplY3QgaXRlbS5cblx0XHRmb3IgKCBuYW1lIGluIG9iaiApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXggKyBcIltcIiArIG5hbWUgKyBcIl1cIiwgb2JqWyBuYW1lIF0sIHRyYWRpdGlvbmFsLCBhZGQgKTtcblx0XHR9XG5cblx0fSBlbHNlIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBzY2FsYXIgaXRlbS5cblx0XHRhZGQoIHByZWZpeCwgb2JqICk7XG5cdH1cbn1cblxuLy8gU2VyaWFsaXplIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMgb3IgYSBzZXQgb2Zcbi8vIGtleS92YWx1ZXMgaW50byBhIHF1ZXJ5IHN0cmluZ1xualF1ZXJ5LnBhcmFtID0gZnVuY3Rpb24oIGEsIHRyYWRpdGlvbmFsICkge1xuXHR2YXIgcHJlZml4LFxuXHRcdHMgPSBbXSxcblx0XHRhZGQgPSBmdW5jdGlvbigga2V5LCB2YWx1ZU9yRnVuY3Rpb24gKSB7XG5cblx0XHRcdC8vIElmIHZhbHVlIGlzIGEgZnVuY3Rpb24sIGludm9rZSBpdCBhbmQgdXNlIGl0cyByZXR1cm4gdmFsdWVcblx0XHRcdHZhciB2YWx1ZSA9IGlzRnVuY3Rpb24oIHZhbHVlT3JGdW5jdGlvbiApID9cblx0XHRcdFx0dmFsdWVPckZ1bmN0aW9uKCkgOlxuXHRcdFx0XHR2YWx1ZU9yRnVuY3Rpb247XG5cblx0XHRcdHNbIHMubGVuZ3RoIF0gPSBlbmNvZGVVUklDb21wb25lbnQoIGtleSApICsgXCI9XCIgK1xuXHRcdFx0XHRlbmNvZGVVUklDb21wb25lbnQoIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKTtcblx0XHR9O1xuXG5cdGlmICggYSA9PSBudWxsICkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0Ly8gSWYgYW4gYXJyYXkgd2FzIHBhc3NlZCBpbiwgYXNzdW1lIHRoYXQgaXQgaXMgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cy5cblx0aWYgKCBBcnJheS5pc0FycmF5KCBhICkgfHwgKCBhLmpxdWVyeSAmJiAhalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGEgKSApICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIHRoZSBmb3JtIGVsZW1lbnRzXG5cdFx0alF1ZXJ5LmVhY2goIGEsIGZ1bmN0aW9uKCkge1xuXHRcdFx0YWRkKCB0aGlzLm5hbWUsIHRoaXMudmFsdWUgKTtcblx0XHR9ICk7XG5cblx0fSBlbHNlIHtcblxuXHRcdC8vIElmIHRyYWRpdGlvbmFsLCBlbmNvZGUgdGhlIFwib2xkXCIgd2F5ICh0aGUgd2F5IDEuMy4yIG9yIG9sZGVyXG5cdFx0Ly8gZGlkIGl0KSwgb3RoZXJ3aXNlIGVuY29kZSBwYXJhbXMgcmVjdXJzaXZlbHkuXG5cdFx0Zm9yICggcHJlZml4IGluIGEgKSB7XG5cdFx0XHRidWlsZFBhcmFtcyggcHJlZml4LCBhWyBwcmVmaXggXSwgdHJhZGl0aW9uYWwsIGFkZCApO1xuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgcmVzdWx0aW5nIHNlcmlhbGl6YXRpb25cblx0cmV0dXJuIHMuam9pbiggXCImXCIgKTtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0c2VyaWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4galF1ZXJ5LnBhcmFtKCB0aGlzLnNlcmlhbGl6ZUFycmF5KCkgKTtcblx0fSxcblx0c2VyaWFsaXplQXJyYXk6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIENhbiBhZGQgcHJvcEhvb2sgZm9yIFwiZWxlbWVudHNcIiB0byBmaWx0ZXIgb3IgYWRkIGZvcm0gZWxlbWVudHNcblx0XHRcdHZhciBlbGVtZW50cyA9IGpRdWVyeS5wcm9wKCB0aGlzLCBcImVsZW1lbnRzXCIgKTtcblx0XHRcdHJldHVybiBlbGVtZW50cyA/IGpRdWVyeS5tYWtlQXJyYXkoIGVsZW1lbnRzICkgOiB0aGlzO1xuXHRcdH0gKVxuXHRcdC5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHR5cGUgPSB0aGlzLnR5cGU7XG5cblx0XHRcdC8vIFVzZSAuaXMoIFwiOmRpc2FibGVkXCIgKSBzbyB0aGF0IGZpZWxkc2V0W2Rpc2FibGVkXSB3b3Jrc1xuXHRcdFx0cmV0dXJuIHRoaXMubmFtZSAmJiAhalF1ZXJ5KCB0aGlzICkuaXMoIFwiOmRpc2FibGVkXCIgKSAmJlxuXHRcdFx0XHRyc3VibWl0dGFibGUudGVzdCggdGhpcy5ub2RlTmFtZSApICYmICFyc3VibWl0dGVyVHlwZXMudGVzdCggdHlwZSApICYmXG5cdFx0XHRcdCggdGhpcy5jaGVja2VkIHx8ICFyY2hlY2thYmxlVHlwZS50ZXN0KCB0eXBlICkgKTtcblx0XHR9IClcblx0XHQubWFwKCBmdW5jdGlvbiggaSwgZWxlbSApIHtcblx0XHRcdHZhciB2YWwgPSBqUXVlcnkoIHRoaXMgKS52YWwoKTtcblxuXHRcdFx0aWYgKCB2YWwgPT0gbnVsbCApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7XG5cdFx0XHRcdHJldHVybiBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCBcIlxcclxcblwiICkgfTtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xuXHRcdH0gKS5nZXQoKTtcblx0fVxufSApO1xuXG5cbnZhclxuXHRyMjAgPSAvJTIwL2csXG5cdHJoYXNoID0gLyMuKiQvLFxuXHRyYW50aUNhY2hlID0gLyhbPyZdKV89W14mXSovLFxuXHRyaGVhZGVycyA9IC9eKC4qPyk6WyBcXHRdKihbXlxcclxcbl0qKSQvbWcsXG5cblx0Ly8gIzc2NTMsICM4MTI1LCAjODE1MjogbG9jYWwgcHJvdG9jb2wgZGV0ZWN0aW9uXG5cdHJsb2NhbFByb3RvY29sID0gL14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sXG5cdHJub0NvbnRlbnQgPSAvXig/OkdFVHxIRUFEKSQvLFxuXHRycHJvdG9jb2wgPSAvXlxcL1xcLy8sXG5cblx0LyogUHJlZmlsdGVyc1xuXHQgKiAxKSBUaGV5IGFyZSB1c2VmdWwgdG8gaW50cm9kdWNlIGN1c3RvbSBkYXRhVHlwZXMgKHNlZSBhamF4L2pzb25wLmpzIGZvciBhbiBleGFtcGxlKVxuXHQgKiAyKSBUaGVzZSBhcmUgY2FsbGVkOlxuXHQgKiAgICAtIEJFRk9SRSBhc2tpbmcgZm9yIGEgdHJhbnNwb3J0XG5cdCAqICAgIC0gQUZURVIgcGFyYW0gc2VyaWFsaXphdGlvbiAocy5kYXRhIGlzIGEgc3RyaW5nIGlmIHMucHJvY2Vzc0RhdGEgaXMgdHJ1ZSlcblx0ICogMykga2V5IGlzIHRoZSBkYXRhVHlwZVxuXHQgKiA0KSB0aGUgY2F0Y2hhbGwgc3ltYm9sIFwiKlwiIGNhbiBiZSB1c2VkXG5cdCAqIDUpIGV4ZWN1dGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8gXCIqXCIgaWYgbmVlZGVkXG5cdCAqL1xuXHRwcmVmaWx0ZXJzID0ge30sXG5cblx0LyogVHJhbnNwb3J0cyBiaW5kaW5nc1xuXHQgKiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDIpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogMykgc2VsZWN0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gZ28gdG8gXCIqXCIgaWYgbmVlZGVkXG5cdCAqL1xuXHR0cmFuc3BvcnRzID0ge30sXG5cblx0Ly8gQXZvaWQgY29tbWVudC1wcm9sb2cgY2hhciBzZXF1ZW5jZSAoIzEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRlIGNvbXByZXNzaW9uXG5cdGFsbFR5cGVzID0gXCIqL1wiLmNvbmNhdCggXCIqXCIgKSxcblxuXHQvLyBBbmNob3IgdGFnIGZvciBwYXJzaW5nIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b3JpZ2luQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcblx0b3JpZ2luQW5jaG9yLmhyZWYgPSBsb2NhdGlvbi5ocmVmO1xuXG4vLyBCYXNlIFwiY29uc3RydWN0b3JcIiBmb3IgalF1ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4VHJhbnNwb3J0XG5mdW5jdGlvbiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSApIHtcblxuXHQvLyBkYXRhVHlwZUV4cHJlc3Npb24gaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIFwiKlwiXG5cdHJldHVybiBmdW5jdGlvbiggZGF0YVR5cGVFeHByZXNzaW9uLCBmdW5jICkge1xuXG5cdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVFeHByZXNzaW9uICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZnVuYyA9IGRhdGFUeXBlRXhwcmVzc2lvbjtcblx0XHRcdGRhdGFUeXBlRXhwcmVzc2lvbiA9IFwiKlwiO1xuXHRcdH1cblxuXHRcdHZhciBkYXRhVHlwZSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0ZGF0YVR5cGVzID0gZGF0YVR5cGVFeHByZXNzaW9uLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggZnVuYyApICkge1xuXG5cdFx0XHQvLyBGb3IgZWFjaCBkYXRhVHlwZSBpbiB0aGUgZGF0YVR5cGVFeHByZXNzaW9uXG5cdFx0XHR3aGlsZSAoICggZGF0YVR5cGUgPSBkYXRhVHlwZXNbIGkrKyBdICkgKSB7XG5cblx0XHRcdFx0Ly8gUHJlcGVuZCBpZiByZXF1ZXN0ZWRcblx0XHRcdFx0aWYgKCBkYXRhVHlwZVsgMCBdID09PSBcIitcIiApIHtcblx0XHRcdFx0XHRkYXRhVHlwZSA9IGRhdGFUeXBlLnNsaWNlKCAxICkgfHwgXCIqXCI7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS51bnNoaWZ0KCBmdW5jICk7XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGFwcGVuZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkucHVzaCggZnVuYyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG4vLyBCYXNlIGluc3BlY3Rpb24gZnVuY3Rpb24gZm9yIHByZWZpbHRlcnMgYW5kIHRyYW5zcG9ydHNcbmZ1bmN0aW9uIGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKSB7XG5cblx0dmFyIGluc3BlY3RlZCA9IHt9LFxuXHRcdHNlZWtpbmdUcmFuc3BvcnQgPSAoIHN0cnVjdHVyZSA9PT0gdHJhbnNwb3J0cyApO1xuXG5cdGZ1bmN0aW9uIGluc3BlY3QoIGRhdGFUeXBlICkge1xuXHRcdHZhciBzZWxlY3RlZDtcblx0XHRpbnNwZWN0ZWRbIGRhdGFUeXBlIF0gPSB0cnVlO1xuXHRcdGpRdWVyeS5lYWNoKCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10sIGZ1bmN0aW9uKCBfLCBwcmVmaWx0ZXJPckZhY3RvcnkgKSB7XG5cdFx0XHR2YXIgZGF0YVR5cGVPclRyYW5zcG9ydCA9IHByZWZpbHRlck9yRmFjdG9yeSggb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApO1xuXHRcdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVPclRyYW5zcG9ydCA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQhc2Vla2luZ1RyYW5zcG9ydCAmJiAhaW5zcGVjdGVkWyBkYXRhVHlwZU9yVHJhbnNwb3J0IF0gKSB7XG5cblx0XHRcdFx0b3B0aW9ucy5kYXRhVHlwZXMudW5zaGlmdCggZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0XHRpbnNwZWN0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0gZWxzZSBpZiAoIHNlZWtpbmdUcmFuc3BvcnQgKSB7XG5cdFx0XHRcdHJldHVybiAhKCBzZWxlY3RlZCA9IGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0cmV0dXJuIHNlbGVjdGVkO1xuXHR9XG5cblx0cmV0dXJuIGluc3BlY3QoIG9wdGlvbnMuZGF0YVR5cGVzWyAwIF0gKSB8fCAhaW5zcGVjdGVkWyBcIipcIiBdICYmIGluc3BlY3QoIFwiKlwiICk7XG59XG5cbi8vIEEgc3BlY2lhbCBleHRlbmQgZm9yIGFqYXggb3B0aW9uc1xuLy8gdGhhdCB0YWtlcyBcImZsYXRcIiBvcHRpb25zIChub3QgdG8gYmUgZGVlcCBleHRlbmRlZClcbi8vIEZpeGVzICM5ODg3XG5mdW5jdGlvbiBhamF4RXh0ZW5kKCB0YXJnZXQsIHNyYyApIHtcblx0dmFyIGtleSwgZGVlcCxcblx0XHRmbGF0T3B0aW9ucyA9IGpRdWVyeS5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnMgfHwge307XG5cblx0Zm9yICgga2V5IGluIHNyYyApIHtcblx0XHRpZiAoIHNyY1sga2V5IF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdCggZmxhdE9wdGlvbnNbIGtleSBdID8gdGFyZ2V0IDogKCBkZWVwIHx8ICggZGVlcCA9IHt9ICkgKSApWyBrZXkgXSA9IHNyY1sga2V5IF07XG5cdFx0fVxuXHR9XG5cdGlmICggZGVlcCApIHtcblx0XHRqUXVlcnkuZXh0ZW5kKCB0cnVlLCB0YXJnZXQsIGRlZXAgKTtcblx0fVxuXG5cdHJldHVybiB0YXJnZXQ7XG59XG5cbi8qIEhhbmRsZXMgcmVzcG9uc2VzIHRvIGFuIGFqYXggcmVxdWVzdDpcbiAqIC0gZmluZHMgdGhlIHJpZ2h0IGRhdGFUeXBlIChtZWRpYXRlcyBiZXR3ZWVuIGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0ZWQgZGF0YVR5cGUpXG4gKiAtIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2VcbiAqL1xuZnVuY3Rpb24gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIHtcblxuXHR2YXIgY3QsIHR5cGUsIGZpbmFsRGF0YVR5cGUsIGZpcnN0RGF0YVR5cGUsXG5cdFx0Y29udGVudHMgPSBzLmNvbnRlbnRzLFxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzO1xuXG5cdC8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGluIHRoZSBwcm9jZXNzXG5cdHdoaWxlICggZGF0YVR5cGVzWyAwIF0gPT09IFwiKlwiICkge1xuXHRcdGRhdGFUeXBlcy5zaGlmdCgpO1xuXHRcdGlmICggY3QgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGN0ID0gcy5taW1lVHlwZSB8fCBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJDb250ZW50LVR5cGVcIiApO1xuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGtub3duIGNvbnRlbnQtdHlwZVxuXHRpZiAoIGN0ICkge1xuXHRcdGZvciAoIHR5cGUgaW4gY29udGVudHMgKSB7XG5cdFx0XHRpZiAoIGNvbnRlbnRzWyB0eXBlIF0gJiYgY29udGVudHNbIHR5cGUgXS50ZXN0KCBjdCApICkge1xuXHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdHlwZSApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIHJlc3BvbnNlIGZvciB0aGUgZXhwZWN0ZWQgZGF0YVR5cGVcblx0aWYgKCBkYXRhVHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7XG5cdFx0ZmluYWxEYXRhVHlwZSA9IGRhdGFUeXBlc1sgMCBdO1xuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gVHJ5IGNvbnZlcnRpYmxlIGRhdGFUeXBlc1xuXHRcdGZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkge1xuXHRcdFx0aWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5jb252ZXJ0ZXJzWyB0eXBlICsgXCIgXCIgKyBkYXRhVHlwZXNbIDAgXSBdICkge1xuXHRcdFx0XHRmaW5hbERhdGFUeXBlID0gdHlwZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICFmaXJzdERhdGFUeXBlICkge1xuXHRcdFx0XHRmaXJzdERhdGFUeXBlID0gdHlwZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBPciBqdXN0IHVzZSBmaXJzdCBvbmVcblx0XHRmaW5hbERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8fCBmaXJzdERhdGFUeXBlO1xuXHR9XG5cblx0Ly8gSWYgd2UgZm91bmQgYSBkYXRhVHlwZVxuXHQvLyBXZSBhZGQgdGhlIGRhdGFUeXBlIHRvIHRoZSBsaXN0IGlmIG5lZWRlZFxuXHQvLyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlXG5cdGlmICggZmluYWxEYXRhVHlwZSApIHtcblx0XHRpZiAoIGZpbmFsRGF0YVR5cGUgIT09IGRhdGFUeXBlc1sgMCBdICkge1xuXHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIGZpbmFsRGF0YVR5cGUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3BvbnNlc1sgZmluYWxEYXRhVHlwZSBdO1xuXHR9XG59XG5cbi8qIENoYWluIGNvbnZlcnNpb25zIGdpdmVuIHRoZSByZXF1ZXN0IGFuZCB0aGUgb3JpZ2luYWwgcmVzcG9uc2VcbiAqIEFsc28gc2V0cyB0aGUgcmVzcG9uc2VYWFggZmllbGRzIG9uIHRoZSBqcVhIUiBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKSB7XG5cdHZhciBjb252MiwgY3VycmVudCwgY29udiwgdG1wLCBwcmV2LFxuXHRcdGNvbnZlcnRlcnMgPSB7fSxcblxuXHRcdC8vIFdvcmsgd2l0aCBhIGNvcHkgb2YgZGF0YVR5cGVzIGluIGNhc2Ugd2UgbmVlZCB0byBtb2RpZnkgaXQgZm9yIGNvbnZlcnNpb25cblx0XHRkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcy5zbGljZSgpO1xuXG5cdC8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcCB3aXRoIGxvd2VyY2FzZWQga2V5c1xuXHRpZiAoIGRhdGFUeXBlc1sgMSBdICkge1xuXHRcdGZvciAoIGNvbnYgaW4gcy5jb252ZXJ0ZXJzICkge1xuXHRcdFx0Y29udmVydGVyc1sgY29udi50b0xvd2VyQ2FzZSgpIF0gPSBzLmNvbnZlcnRlcnNbIGNvbnYgXTtcblx0XHR9XG5cdH1cblxuXHRjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7XG5cblx0Ly8gQ29udmVydCB0byBlYWNoIHNlcXVlbnRpYWwgZGF0YVR5cGVcblx0d2hpbGUgKCBjdXJyZW50ICkge1xuXG5cdFx0aWYgKCBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gKSB7XG5cdFx0XHRqcVhIUlsgcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdIF0gPSByZXNwb25zZTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSB0aGUgZGF0YUZpbHRlciBpZiBwcm92aWRlZFxuXHRcdGlmICggIXByZXYgJiYgaXNTdWNjZXNzICYmIHMuZGF0YUZpbHRlciApIHtcblx0XHRcdHJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25zZSwgcy5kYXRhVHlwZSApO1xuXHRcdH1cblxuXHRcdHByZXYgPSBjdXJyZW50O1xuXHRcdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHRcdGlmICggY3VycmVudCApIHtcblxuXHRcdFx0Ly8gVGhlcmUncyBvbmx5IHdvcmsgdG8gZG8gaWYgY3VycmVudCBkYXRhVHlwZSBpcyBub24tYXV0b1xuXHRcdFx0aWYgKCBjdXJyZW50ID09PSBcIipcIiApIHtcblxuXHRcdFx0XHRjdXJyZW50ID0gcHJldjtcblxuXHRcdFx0Ly8gQ29udmVydCByZXNwb25zZSBpZiBwcmV2IGRhdGFUeXBlIGlzIG5vbi1hdXRvIGFuZCBkaWZmZXJzIGZyb20gY3VycmVudFxuXHRcdFx0fSBlbHNlIGlmICggcHJldiAhPT0gXCIqXCIgJiYgcHJldiAhPT0gY3VycmVudCApIHtcblxuXHRcdFx0XHQvLyBTZWVrIGEgZGlyZWN0IGNvbnZlcnRlclxuXHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgY3VycmVudCBdIHx8IGNvbnZlcnRlcnNbIFwiKiBcIiArIGN1cnJlbnQgXTtcblxuXHRcdFx0XHQvLyBJZiBub25lIGZvdW5kLCBzZWVrIGEgcGFpclxuXHRcdFx0XHRpZiAoICFjb252ICkge1xuXHRcdFx0XHRcdGZvciAoIGNvbnYyIGluIGNvbnZlcnRlcnMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIElmIGNvbnYyIG91dHB1dHMgY3VycmVudFxuXHRcdFx0XHRcdFx0dG1wID0gY29udjIuc3BsaXQoIFwiIFwiICk7XG5cdFx0XHRcdFx0XHRpZiAoIHRtcFsgMSBdID09PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIElmIHByZXYgY2FuIGJlIGNvbnZlcnRlZCB0byBhY2NlcHRlZCBpbnB1dFxuXHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgdG1wWyAwIF0gXSB8fFxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlcnNbIFwiKiBcIiArIHRtcFsgMCBdIF07XG5cdFx0XHRcdFx0XHRcdGlmICggY29udiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENvbmRlbnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnNcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgPT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgY29udjIgXTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIE90aGVyd2lzZSwgaW5zZXJ0IHRoZSBpbnRlcm1lZGlhdGUgZGF0YVR5cGVcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBjb252ZXJ0ZXJzWyBjb252MiBdICE9PSB0cnVlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudCA9IHRtcFsgMCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIHRtcFsgMSBdICk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQXBwbHkgY29udmVydGVyIChpZiBub3QgYW4gZXF1aXZhbGVuY2UpXG5cdFx0XHRcdGlmICggY29udiAhPT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdC8vIFVubGVzcyBlcnJvcnMgYXJlIGFsbG93ZWQgdG8gYnViYmxlLCBjYXRjaCBhbmQgcmV0dXJuIHRoZW1cblx0XHRcdFx0XHRpZiAoIGNvbnYgJiYgcy50aHJvd3MgKSB7XG5cdFx0XHRcdFx0XHRyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdHN0YXRlOiBcInBhcnNlcmVycm9yXCIsXG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGNvbnYgPyBlIDogXCJObyBjb252ZXJzaW9uIGZyb20gXCIgKyBwcmV2ICsgXCIgdG8gXCIgKyBjdXJyZW50XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHsgc3RhdGU6IFwic3VjY2Vzc1wiLCBkYXRhOiByZXNwb25zZSB9O1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzXG5cdGFjdGl2ZTogMCxcblxuXHQvLyBMYXN0LU1vZGlmaWVkIGhlYWRlciBjYWNoZSBmb3IgbmV4dCByZXF1ZXN0XG5cdGxhc3RNb2RpZmllZDoge30sXG5cdGV0YWc6IHt9LFxuXG5cdGFqYXhTZXR0aW5nczoge1xuXHRcdHVybDogbG9jYXRpb24uaHJlZixcblx0XHR0eXBlOiBcIkdFVFwiLFxuXHRcdGlzTG9jYWw6IHJsb2NhbFByb3RvY29sLnRlc3QoIGxvY2F0aW9uLnByb3RvY29sICksXG5cdFx0Z2xvYmFsOiB0cnVlLFxuXHRcdHByb2Nlc3NEYXRhOiB0cnVlLFxuXHRcdGFzeW5jOiB0cnVlLFxuXHRcdGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLFxuXG5cdFx0Lypcblx0XHR0aW1lb3V0OiAwLFxuXHRcdGRhdGE6IG51bGwsXG5cdFx0ZGF0YVR5cGU6IG51bGwsXG5cdFx0dXNlcm5hbWU6IG51bGwsXG5cdFx0cGFzc3dvcmQ6IG51bGwsXG5cdFx0Y2FjaGU6IG51bGwsXG5cdFx0dGhyb3dzOiBmYWxzZSxcblx0XHR0cmFkaXRpb25hbDogZmFsc2UsXG5cdFx0aGVhZGVyczoge30sXG5cdFx0Ki9cblxuXHRcdGFjY2VwdHM6IHtcblx0XHRcdFwiKlwiOiBhbGxUeXBlcyxcblx0XHRcdHRleHQ6IFwidGV4dC9wbGFpblwiLFxuXHRcdFx0aHRtbDogXCJ0ZXh0L2h0bWxcIixcblx0XHRcdHhtbDogXCJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sXCIsXG5cdFx0XHRqc29uOiBcImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdFwiXG5cdFx0fSxcblxuXHRcdGNvbnRlbnRzOiB7XG5cdFx0XHR4bWw6IC9cXGJ4bWxcXGIvLFxuXHRcdFx0aHRtbDogL1xcYmh0bWwvLFxuXHRcdFx0anNvbjogL1xcYmpzb25cXGIvXG5cdFx0fSxcblxuXHRcdHJlc3BvbnNlRmllbGRzOiB7XG5cdFx0XHR4bWw6IFwicmVzcG9uc2VYTUxcIixcblx0XHRcdHRleHQ6IFwicmVzcG9uc2VUZXh0XCIsXG5cdFx0XHRqc29uOiBcInJlc3BvbnNlSlNPTlwiXG5cdFx0fSxcblxuXHRcdC8vIERhdGEgY29udmVydGVyc1xuXHRcdC8vIEtleXMgc2VwYXJhdGUgc291cmNlIChvciBjYXRjaGFsbCBcIipcIikgYW5kIGRlc3RpbmF0aW9uIHR5cGVzIHdpdGggYSBzaW5nbGUgc3BhY2Vcblx0XHRjb252ZXJ0ZXJzOiB7XG5cblx0XHRcdC8vIENvbnZlcnQgYW55dGhpbmcgdG8gdGV4dFxuXHRcdFx0XCIqIHRleHRcIjogU3RyaW5nLFxuXG5cdFx0XHQvLyBUZXh0IHRvIGh0bWwgKHRydWUgPSBubyB0cmFuc2Zvcm1hdGlvbilcblx0XHRcdFwidGV4dCBodG1sXCI6IHRydWUsXG5cblx0XHRcdC8vIEV2YWx1YXRlIHRleHQgYXMgYSBqc29uIGV4cHJlc3Npb25cblx0XHRcdFwidGV4dCBqc29uXCI6IEpTT04ucGFyc2UsXG5cblx0XHRcdC8vIFBhcnNlIHRleHQgYXMgeG1sXG5cdFx0XHRcInRleHQgeG1sXCI6IGpRdWVyeS5wYXJzZVhNTFxuXHRcdH0sXG5cblx0XHQvLyBGb3Igb3B0aW9ucyB0aGF0IHNob3VsZG4ndCBiZSBkZWVwIGV4dGVuZGVkOlxuXHRcdC8vIHlvdSBjYW4gYWRkIHlvdXIgb3duIGN1c3RvbSBvcHRpb25zIGhlcmUgaWZcblx0XHQvLyBhbmQgd2hlbiB5b3UgY3JlYXRlIG9uZSB0aGF0IHNob3VsZG4ndCBiZVxuXHRcdC8vIGRlZXAgZXh0ZW5kZWQgKHNlZSBhamF4RXh0ZW5kKVxuXHRcdGZsYXRPcHRpb25zOiB7XG5cdFx0XHR1cmw6IHRydWUsXG5cdFx0XHRjb250ZXh0OiB0cnVlXG5cdFx0fVxuXHR9LFxuXG5cdC8vIENyZWF0ZXMgYSBmdWxsIGZsZWRnZWQgc2V0dGluZ3Mgb2JqZWN0IGludG8gdGFyZ2V0XG5cdC8vIHdpdGggYm90aCBhamF4U2V0dGluZ3MgYW5kIHNldHRpbmdzIGZpZWxkcy5cblx0Ly8gSWYgdGFyZ2V0IGlzIG9taXR0ZWQsIHdyaXRlcyBpbnRvIGFqYXhTZXR0aW5ncy5cblx0YWpheFNldHVwOiBmdW5jdGlvbiggdGFyZ2V0LCBzZXR0aW5ncyApIHtcblx0XHRyZXR1cm4gc2V0dGluZ3MgP1xuXG5cdFx0XHQvLyBCdWlsZGluZyBhIHNldHRpbmdzIG9iamVjdFxuXHRcdFx0YWpheEV4dGVuZCggYWpheEV4dGVuZCggdGFyZ2V0LCBqUXVlcnkuYWpheFNldHRpbmdzICksIHNldHRpbmdzICkgOlxuXG5cdFx0XHQvLyBFeHRlbmRpbmcgYWpheFNldHRpbmdzXG5cdFx0XHRhamF4RXh0ZW5kKCBqUXVlcnkuYWpheFNldHRpbmdzLCB0YXJnZXQgKTtcblx0fSxcblxuXHRhamF4UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMgKSxcblx0YWpheFRyYW5zcG9ydDogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzICksXG5cblx0Ly8gTWFpbiBtZXRob2Rcblx0YWpheDogZnVuY3Rpb24oIHVybCwgb3B0aW9ucyApIHtcblxuXHRcdC8vIElmIHVybCBpcyBhbiBvYmplY3QsIHNpbXVsYXRlIHByZS0xLjUgc2lnbmF0dXJlXG5cdFx0aWYgKCB0eXBlb2YgdXJsID09PSBcIm9iamVjdFwiICkge1xuXHRcdFx0b3B0aW9ucyA9IHVybDtcblx0XHRcdHVybCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBGb3JjZSBvcHRpb25zIHRvIGJlIGFuIG9iamVjdFxuXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdFx0dmFyIHRyYW5zcG9ydCxcblxuXHRcdFx0Ly8gVVJMIHdpdGhvdXQgYW50aS1jYWNoZSBwYXJhbVxuXHRcdFx0Y2FjaGVVUkwsXG5cblx0XHRcdC8vIFJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyxcblx0XHRcdHJlc3BvbnNlSGVhZGVycyxcblxuXHRcdFx0Ly8gdGltZW91dCBoYW5kbGVcblx0XHRcdHRpbWVvdXRUaW1lcixcblxuXHRcdFx0Ly8gVXJsIGNsZWFudXAgdmFyXG5cdFx0XHR1cmxBbmNob3IsXG5cblx0XHRcdC8vIFJlcXVlc3Qgc3RhdGUgKGJlY29tZXMgZmFsc2UgdXBvbiBzZW5kIGFuZCB0cnVlIHVwb24gY29tcGxldGlvbilcblx0XHRcdGNvbXBsZXRlZCxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiBnbG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRjaGVkXG5cdFx0XHRmaXJlR2xvYmFscyxcblxuXHRcdFx0Ly8gTG9vcCB2YXJpYWJsZVxuXHRcdFx0aSxcblxuXHRcdFx0Ly8gdW5jYWNoZWQgcGFydCBvZiB0aGUgdXJsXG5cdFx0XHR1bmNhY2hlZCxcblxuXHRcdFx0Ly8gQ3JlYXRlIHRoZSBmaW5hbCBvcHRpb25zIG9iamVjdFxuXHRcdFx0cyA9IGpRdWVyeS5hamF4U2V0dXAoIHt9LCBvcHRpb25zICksXG5cblx0XHRcdC8vIENhbGxiYWNrcyBjb250ZXh0XG5cdFx0XHRjYWxsYmFja0NvbnRleHQgPSBzLmNvbnRleHQgfHwgcyxcblxuXHRcdFx0Ly8gQ29udGV4dCBmb3IgZ2xvYmFsIGV2ZW50cyBpcyBjYWxsYmFja0NvbnRleHQgaWYgaXQgaXMgYSBET00gbm9kZSBvciBqUXVlcnkgY29sbGVjdGlvblxuXHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0ID0gcy5jb250ZXh0ICYmXG5cdFx0XHRcdCggY2FsbGJhY2tDb250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dC5qcXVlcnkgKSA/XG5cdFx0XHRcdFx0alF1ZXJ5KCBjYWxsYmFja0NvbnRleHQgKSA6XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LFxuXG5cdFx0XHQvLyBEZWZlcnJlZHNcblx0XHRcdGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCksXG5cdFx0XHRjb21wbGV0ZURlZmVycmVkID0galF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRzdGF0dXNDb2RlID0gcy5zdGF0dXNDb2RlIHx8IHt9LFxuXG5cdFx0XHQvLyBIZWFkZXJzICh0aGV5IGFyZSBzZW50IGFsbCBhdCBvbmNlKVxuXHRcdFx0cmVxdWVzdEhlYWRlcnMgPSB7fSxcblx0XHRcdHJlcXVlc3RIZWFkZXJzTmFtZXMgPSB7fSxcblxuXHRcdFx0Ly8gRGVmYXVsdCBhYm9ydCBtZXNzYWdlXG5cdFx0XHRzdHJBYm9ydCA9IFwiY2FuY2VsZWRcIixcblxuXHRcdFx0Ly8gRmFrZSB4aHJcblx0XHRcdGpxWEhSID0ge1xuXHRcdFx0XHRyZWFkeVN0YXRlOiAwLFxuXG5cdFx0XHRcdC8vIEJ1aWxkcyBoZWFkZXJzIGhhc2h0YWJsZSBpZiBuZWVkZWRcblx0XHRcdFx0Z2V0UmVzcG9uc2VIZWFkZXI6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0XHRcdFx0dmFyIG1hdGNoO1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRcdFx0aWYgKCAhcmVzcG9uc2VIZWFkZXJzICkge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnMgPSB7fTtcblx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG1hdGNoID0gcmhlYWRlcnMuZXhlYyggcmVzcG9uc2VIZWFkZXJzU3RyaW5nICkgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnNbIG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKSArIFwiIFwiIF0gPVxuXHRcdFx0XHRcdFx0XHRcdFx0KCByZXNwb25zZUhlYWRlcnNbIG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKSArIFwiIFwiIF0gfHwgW10gKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuY29uY2F0KCBtYXRjaFsgMiBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG1hdGNoID0gcmVzcG9uc2VIZWFkZXJzWyBrZXkudG9Mb3dlckNhc2UoKSArIFwiIFwiIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBtYXRjaCA9PSBudWxsID8gbnVsbCA6IG1hdGNoLmpvaW4oIFwiLCBcIiApO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFJhdyBzdHJpbmdcblx0XHRcdFx0Z2V0QWxsUmVzcG9uc2VIZWFkZXJzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29tcGxldGVkID8gcmVzcG9uc2VIZWFkZXJzU3RyaW5nIDogbnVsbDtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBDYWNoZXMgdGhlIGhlYWRlclxuXHRcdFx0XHRzZXRSZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdG5hbWUgPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSA9XG5cdFx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdIHx8IG5hbWU7XG5cdFx0XHRcdFx0XHRyZXF1ZXN0SGVhZGVyc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIE92ZXJyaWRlcyByZXNwb25zZSBjb250ZW50LXR5cGUgaGVhZGVyXG5cdFx0XHRcdG92ZXJyaWRlTWltZVR5cGU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRzLm1pbWVUeXBlID0gdHlwZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdFx0c3RhdHVzQ29kZTogZnVuY3Rpb24oIG1hcCApIHtcblx0XHRcdFx0XHR2YXIgY29kZTtcblx0XHRcdFx0XHRpZiAoIG1hcCApIHtcblx0XHRcdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEV4ZWN1dGUgdGhlIGFwcHJvcHJpYXRlIGNhbGxiYWNrc1xuXHRcdFx0XHRcdFx0XHRqcVhIUi5hbHdheXMoIG1hcFsganFYSFIuc3RhdHVzIF0gKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gTGF6eS1hZGQgdGhlIG5ldyBjYWxsYmFja3MgaW4gYSB3YXkgdGhhdCBwcmVzZXJ2ZXMgb2xkIG9uZXNcblx0XHRcdFx0XHRcdFx0Zm9yICggY29kZSBpbiBtYXAgKSB7XG5cdFx0XHRcdFx0XHRcdFx0c3RhdHVzQ29kZVsgY29kZSBdID0gWyBzdGF0dXNDb2RlWyBjb2RlIF0sIG1hcFsgY29kZSBdIF07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSByZXF1ZXN0XG5cdFx0XHRcdGFib3J0OiBmdW5jdGlvbiggc3RhdHVzVGV4dCApIHtcblx0XHRcdFx0XHR2YXIgZmluYWxUZXh0ID0gc3RhdHVzVGV4dCB8fCBzdHJBYm9ydDtcblx0XHRcdFx0XHRpZiAoIHRyYW5zcG9ydCApIHtcblx0XHRcdFx0XHRcdHRyYW5zcG9ydC5hYm9ydCggZmluYWxUZXh0ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRvbmUoIDAsIGZpbmFsVGV4dCApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0Ly8gQXR0YWNoIGRlZmVycmVkc1xuXHRcdGRlZmVycmVkLnByb21pc2UoIGpxWEhSICk7XG5cblx0XHQvLyBBZGQgcHJvdG9jb2wgaWYgbm90IHByb3ZpZGVkIChwcmVmaWx0ZXJzIG1pZ2h0IGV4cGVjdCBpdClcblx0XHQvLyBIYW5kbGUgZmFsc3kgdXJsIGluIHRoZSBzZXR0aW5ncyBvYmplY3QgKCMxMDA5MzogY29uc2lzdGVuY3kgd2l0aCBvbGQgc2lnbmF0dXJlKVxuXHRcdC8vIFdlIGFsc28gdXNlIHRoZSB1cmwgcGFyYW1ldGVyIGlmIGF2YWlsYWJsZVxuXHRcdHMudXJsID0gKCAoIHVybCB8fCBzLnVybCB8fCBsb2NhdGlvbi5ocmVmICkgKyBcIlwiIClcblx0XHRcdC5yZXBsYWNlKCBycHJvdG9jb2wsIGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICk7XG5cblx0XHQvLyBBbGlhcyBtZXRob2Qgb3B0aW9uIHRvIHR5cGUgYXMgcGVyIHRpY2tldCAjMTIwMDRcblx0XHRzLnR5cGUgPSBvcHRpb25zLm1ldGhvZCB8fCBvcHRpb25zLnR5cGUgfHwgcy5tZXRob2QgfHwgcy50eXBlO1xuXG5cdFx0Ly8gRXh0cmFjdCBkYXRhVHlwZXMgbGlzdFxuXHRcdHMuZGF0YVR5cGVzID0gKCBzLmRhdGFUeXBlIHx8IFwiKlwiICkudG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXG5cdFx0Ly8gQSBjcm9zcy1kb21haW4gcmVxdWVzdCBpcyBpbiBvcmRlciB3aGVuIHRoZSBvcmlnaW4gZG9lc24ndCBtYXRjaCB0aGUgY3VycmVudCBvcmlnaW4uXG5cdFx0aWYgKCBzLmNyb3NzRG9tYWluID09IG51bGwgKSB7XG5cdFx0XHR1cmxBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImFcIiApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTggLSAxMSwgRWRnZSAxMiAtIDE1XG5cdFx0XHQvLyBJRSB0aHJvd3MgZXhjZXB0aW9uIG9uIGFjY2Vzc2luZyB0aGUgaHJlZiBwcm9wZXJ0eSBpZiB1cmwgaXMgbWFsZm9ybWVkLFxuXHRcdFx0Ly8gZS5nLiBodHRwOi8vZXhhbXBsZS5jb206ODB4L1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dXJsQW5jaG9yLmhyZWYgPSBzLnVybDtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTggLSAxMSBvbmx5XG5cdFx0XHRcdC8vIEFuY2hvcidzIGhvc3QgcHJvcGVydHkgaXNuJ3QgY29ycmVjdGx5IHNldCB3aGVuIHMudXJsIGlzIHJlbGF0aXZlXG5cdFx0XHRcdHVybEFuY2hvci5ocmVmID0gdXJsQW5jaG9yLmhyZWY7XG5cdFx0XHRcdHMuY3Jvc3NEb21haW4gPSBvcmlnaW5BbmNob3IucHJvdG9jb2wgKyBcIi8vXCIgKyBvcmlnaW5BbmNob3IuaG9zdCAhPT1cblx0XHRcdFx0XHR1cmxBbmNob3IucHJvdG9jb2wgKyBcIi8vXCIgKyB1cmxBbmNob3IuaG9zdDtcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdC8vIElmIHRoZXJlIGlzIGFuIGVycm9yIHBhcnNpbmcgdGhlIFVSTCwgYXNzdW1lIGl0IGlzIGNyb3NzRG9tYWluLFxuXHRcdFx0XHQvLyBpdCBjYW4gYmUgcmVqZWN0ZWQgYnkgdGhlIHRyYW5zcG9ydCBpZiBpdCBpcyBpbnZhbGlkXG5cdFx0XHRcdHMuY3Jvc3NEb21haW4gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENvbnZlcnQgZGF0YSBpZiBub3QgYWxyZWFkeSBhIHN0cmluZ1xuXHRcdGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiYgdHlwZW9mIHMuZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHMuZGF0YSA9IGpRdWVyeS5wYXJhbSggcy5kYXRhLCBzLnRyYWRpdGlvbmFsICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgcHJlZmlsdGVyc1xuXHRcdGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzLCBzLCBvcHRpb25zLCBqcVhIUiApO1xuXG5cdFx0Ly8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYSBwcmVmaWx0ZXIsIHN0b3AgdGhlcmVcblx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdHJldHVybiBqcVhIUjtcblx0XHR9XG5cblx0XHQvLyBXZSBjYW4gZmlyZSBnbG9iYWwgZXZlbnRzIGFzIG9mIG5vdyBpZiBhc2tlZCB0b1xuXHRcdC8vIERvbid0IGZpcmUgZXZlbnRzIGlmIGpRdWVyeS5ldmVudCBpcyB1bmRlZmluZWQgaW4gYW4gQU1ELXVzYWdlIHNjZW5hcmlvICgjMTUxMTgpXG5cdFx0ZmlyZUdsb2JhbHMgPSBqUXVlcnkuZXZlbnQgJiYgcy5nbG9iYWw7XG5cblx0XHQvLyBXYXRjaCBmb3IgYSBuZXcgc2V0IG9mIHJlcXVlc3RzXG5cdFx0aWYgKCBmaXJlR2xvYmFscyAmJiBqUXVlcnkuYWN0aXZlKysgPT09IDAgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggXCJhamF4U3RhcnRcIiApO1xuXHRcdH1cblxuXHRcdC8vIFVwcGVyY2FzZSB0aGUgdHlwZVxuXHRcdHMudHlwZSA9IHMudHlwZS50b1VwcGVyQ2FzZSgpO1xuXG5cdFx0Ly8gRGV0ZXJtaW5lIGlmIHJlcXVlc3QgaGFzIGNvbnRlbnRcblx0XHRzLmhhc0NvbnRlbnQgPSAhcm5vQ29udGVudC50ZXN0KCBzLnR5cGUgKTtcblxuXHRcdC8vIFNhdmUgdGhlIFVSTCBpbiBjYXNlIHdlJ3JlIHRveWluZyB3aXRoIHRoZSBJZi1Nb2RpZmllZC1TaW5jZVxuXHRcdC8vIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciBsYXRlciBvblxuXHRcdC8vIFJlbW92ZSBoYXNoIHRvIHNpbXBsaWZ5IHVybCBtYW5pcHVsYXRpb25cblx0XHRjYWNoZVVSTCA9IHMudXJsLnJlcGxhY2UoIHJoYXNoLCBcIlwiICk7XG5cblx0XHQvLyBNb3JlIG9wdGlvbnMgaGFuZGxpbmcgZm9yIHJlcXVlc3RzIHdpdGggbm8gY29udGVudFxuXHRcdGlmICggIXMuaGFzQ29udGVudCApIHtcblxuXHRcdFx0Ly8gUmVtZW1iZXIgdGhlIGhhc2ggc28gd2UgY2FuIHB1dCBpdCBiYWNrXG5cdFx0XHR1bmNhY2hlZCA9IHMudXJsLnNsaWNlKCBjYWNoZVVSTC5sZW5ndGggKTtcblxuXHRcdFx0Ly8gSWYgZGF0YSBpcyBhdmFpbGFibGUgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQsIGFwcGVuZCBkYXRhIHRvIHVybFxuXHRcdFx0aWYgKCBzLmRhdGEgJiYgKCBzLnByb2Nlc3NEYXRhIHx8IHR5cGVvZiBzLmRhdGEgPT09IFwic3RyaW5nXCIgKSApIHtcblx0XHRcdFx0Y2FjaGVVUkwgKz0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuZGF0YTtcblxuXHRcdFx0XHQvLyAjOTY4MjogcmVtb3ZlIGRhdGEgc28gdGhhdCBpdCdzIG5vdCB1c2VkIGluIGFuIGV2ZW50dWFsIHJldHJ5XG5cdFx0XHRcdGRlbGV0ZSBzLmRhdGE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBvciB1cGRhdGUgYW50aS1jYWNoZSBwYXJhbSBpZiBuZWVkZWRcblx0XHRcdGlmICggcy5jYWNoZSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdGNhY2hlVVJMID0gY2FjaGVVUkwucmVwbGFjZSggcmFudGlDYWNoZSwgXCIkMVwiICk7XG5cdFx0XHRcdHVuY2FjaGVkID0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIFwiXz1cIiArICggbm9uY2UrKyApICsgdW5jYWNoZWQ7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFB1dCBoYXNoIGFuZCBhbnRpLWNhY2hlIG9uIHRoZSBVUkwgdGhhdCB3aWxsIGJlIHJlcXVlc3RlZCAoZ2gtMTczMilcblx0XHRcdHMudXJsID0gY2FjaGVVUkwgKyB1bmNhY2hlZDtcblxuXHRcdC8vIENoYW5nZSAnJTIwJyB0byAnKycgaWYgdGhpcyBpcyBlbmNvZGVkIGZvcm0gYm9keSBjb250ZW50IChnaC0yNjU4KVxuXHRcdH0gZWxzZSBpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmXG5cdFx0XHQoIHMuY29udGVudFR5cGUgfHwgXCJcIiApLmluZGV4T2YoIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIgKSA9PT0gMCApIHtcblx0XHRcdHMuZGF0YSA9IHMuZGF0YS5yZXBsYWNlKCByMjAsIFwiK1wiICk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS5cblx0XHRpZiAoIHMuaWZNb2RpZmllZCApIHtcblx0XHRcdGlmICggalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApIHtcblx0XHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJJZi1Nb2RpZmllZC1TaW5jZVwiLCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICkge1xuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU5vbmUtTWF0Y2hcIiwgalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIGNvcnJlY3QgaGVhZGVyLCBpZiBkYXRhIGlzIGJlaW5nIHNlbnRcblx0XHRpZiAoIHMuZGF0YSAmJiBzLmhhc0NvbnRlbnQgJiYgcy5jb250ZW50VHlwZSAhPT0gZmFsc2UgfHwgb3B0aW9ucy5jb250ZW50VHlwZSApIHtcblx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiQ29udGVudC1UeXBlXCIsIHMuY29udGVudFR5cGUgKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIEFjY2VwdHMgaGVhZGVyIGZvciB0aGUgc2VydmVyLCBkZXBlbmRpbmcgb24gdGhlIGRhdGFUeXBlXG5cdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlcihcblx0XHRcdFwiQWNjZXB0XCIsXG5cdFx0XHRzLmRhdGFUeXBlc1sgMCBdICYmIHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdID9cblx0XHRcdFx0cy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gK1xuXHRcdFx0XHRcdCggcy5kYXRhVHlwZXNbIDAgXSAhPT0gXCIqXCIgPyBcIiwgXCIgKyBhbGxUeXBlcyArIFwiOyBxPTAuMDFcIiA6IFwiXCIgKSA6XG5cdFx0XHRcdHMuYWNjZXB0c1sgXCIqXCIgXVxuXHRcdCk7XG5cblx0XHQvLyBDaGVjayBmb3IgaGVhZGVycyBvcHRpb25cblx0XHRmb3IgKCBpIGluIHMuaGVhZGVycyApIHtcblx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIGksIHMuaGVhZGVyc1sgaSBdICk7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsb3cgY3VzdG9tIGhlYWRlcnMvbWltZXR5cGVzIGFuZCBlYXJseSBhYm9ydFxuXHRcdGlmICggcy5iZWZvcmVTZW5kICYmXG5cdFx0XHQoIHMuYmVmb3JlU2VuZC5jYWxsKCBjYWxsYmFja0NvbnRleHQsIGpxWEhSLCBzICkgPT09IGZhbHNlIHx8IGNvbXBsZXRlZCApICkge1xuXG5cdFx0XHQvLyBBYm9ydCBpZiBub3QgZG9uZSBhbHJlYWR5IGFuZCByZXR1cm5cblx0XHRcdHJldHVybiBqcVhIUi5hYm9ydCgpO1xuXHRcdH1cblxuXHRcdC8vIEFib3J0aW5nIGlzIG5vIGxvbmdlciBhIGNhbmNlbGxhdGlvblxuXHRcdHN0ckFib3J0ID0gXCJhYm9ydFwiO1xuXG5cdFx0Ly8gSW5zdGFsbCBjYWxsYmFja3Mgb24gZGVmZXJyZWRzXG5cdFx0Y29tcGxldGVEZWZlcnJlZC5hZGQoIHMuY29tcGxldGUgKTtcblx0XHRqcVhIUi5kb25lKCBzLnN1Y2Nlc3MgKTtcblx0XHRqcVhIUi5mYWlsKCBzLmVycm9yICk7XG5cblx0XHQvLyBHZXQgdHJhbnNwb3J0XG5cdFx0dHJhbnNwb3J0ID0gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMsIHMsIG9wdGlvbnMsIGpxWEhSICk7XG5cblx0XHQvLyBJZiBubyB0cmFuc3BvcnQsIHdlIGF1dG8tYWJvcnRcblx0XHRpZiAoICF0cmFuc3BvcnQgKSB7XG5cdFx0XHRkb25lKCAtMSwgXCJObyBUcmFuc3BvcnRcIiApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRqcVhIUi5yZWFkeVN0YXRlID0gMTtcblxuXHRcdFx0Ly8gU2VuZCBnbG9iYWwgZXZlbnRcblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBcImFqYXhTZW5kXCIsIFsganFYSFIsIHMgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhamF4U2VuZCwgc3RvcCB0aGVyZVxuXHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdHJldHVybiBqcVhIUjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVGltZW91dFxuXHRcdFx0aWYgKCBzLmFzeW5jICYmIHMudGltZW91dCA+IDAgKSB7XG5cdFx0XHRcdHRpbWVvdXRUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRqcVhIUi5hYm9ydCggXCJ0aW1lb3V0XCIgKTtcblx0XHRcdFx0fSwgcy50aW1lb3V0ICk7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbXBsZXRlZCA9IGZhbHNlO1xuXHRcdFx0XHR0cmFuc3BvcnQuc2VuZCggcmVxdWVzdEhlYWRlcnMsIGRvbmUgKTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdC8vIFJldGhyb3cgcG9zdC1jb21wbGV0aW9uIGV4Y2VwdGlvbnNcblx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFByb3BhZ2F0ZSBvdGhlcnMgYXMgcmVzdWx0c1xuXHRcdFx0XHRkb25lKCAtMSwgZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhbGxiYWNrIGZvciB3aGVuIGV2ZXJ5dGhpbmcgaXMgZG9uZVxuXHRcdGZ1bmN0aW9uIGRvbmUoIHN0YXR1cywgbmF0aXZlU3RhdHVzVGV4dCwgcmVzcG9uc2VzLCBoZWFkZXJzICkge1xuXHRcdFx0dmFyIGlzU3VjY2Vzcywgc3VjY2VzcywgZXJyb3IsIHJlc3BvbnNlLCBtb2RpZmllZCxcblx0XHRcdFx0c3RhdHVzVGV4dCA9IG5hdGl2ZVN0YXR1c1RleHQ7XG5cblx0XHRcdC8vIElnbm9yZSByZXBlYXQgaW52b2NhdGlvbnNcblx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbXBsZXRlZCA9IHRydWU7XG5cblx0XHRcdC8vIENsZWFyIHRpbWVvdXQgaWYgaXQgZXhpc3RzXG5cdFx0XHRpZiAoIHRpbWVvdXRUaW1lciApIHtcblx0XHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dFRpbWVyICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIERlcmVmZXJlbmNlIHRyYW5zcG9ydCBmb3IgZWFybHkgZ2FyYmFnZSBjb2xsZWN0aW9uXG5cdFx0XHQvLyAobm8gbWF0dGVyIGhvdyBsb25nIHRoZSBqcVhIUiBvYmplY3Qgd2lsbCBiZSB1c2VkKVxuXHRcdFx0dHJhbnNwb3J0ID0gdW5kZWZpbmVkO1xuXG5cdFx0XHQvLyBDYWNoZSByZXNwb25zZSBoZWFkZXJzXG5cdFx0XHRyZXNwb25zZUhlYWRlcnNTdHJpbmcgPSBoZWFkZXJzIHx8IFwiXCI7XG5cblx0XHRcdC8vIFNldCByZWFkeVN0YXRlXG5cdFx0XHRqcVhIUi5yZWFkeVN0YXRlID0gc3RhdHVzID4gMCA/IDQgOiAwO1xuXG5cdFx0XHQvLyBEZXRlcm1pbmUgaWYgc3VjY2Vzc2Z1bFxuXHRcdFx0aXNTdWNjZXNzID0gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDAgfHwgc3RhdHVzID09PSAzMDQ7XG5cblx0XHRcdC8vIEdldCByZXNwb25zZSBkYXRhXG5cdFx0XHRpZiAoIHJlc3BvbnNlcyApIHtcblx0XHRcdFx0cmVzcG9uc2UgPSBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnZlcnQgbm8gbWF0dGVyIHdoYXQgKHRoYXQgd2F5IHJlc3BvbnNlWFhYIGZpZWxkcyBhcmUgYWx3YXlzIHNldClcblx0XHRcdHJlc3BvbnNlID0gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICk7XG5cblx0XHRcdC8vIElmIHN1Y2Nlc3NmdWwsIGhhbmRsZSB0eXBlIGNoYWluaW5nXG5cdFx0XHRpZiAoIGlzU3VjY2VzcyApIHtcblxuXHRcdFx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxuXHRcdFx0XHRpZiAoIHMuaWZNb2RpZmllZCApIHtcblx0XHRcdFx0XHRtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcIkxhc3QtTW9kaWZpZWRcIiApO1xuXHRcdFx0XHRcdGlmICggbW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiZXRhZ1wiICk7XG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gaWYgbm8gY29udGVudFxuXHRcdFx0XHRpZiAoIHN0YXR1cyA9PT0gMjA0IHx8IHMudHlwZSA9PT0gXCJIRUFEXCIgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm9jb250ZW50XCI7XG5cblx0XHRcdFx0Ly8gaWYgbm90IG1vZGlmaWVkXG5cdFx0XHRcdH0gZWxzZSBpZiAoIHN0YXR1cyA9PT0gMzA0ICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcIm5vdG1vZGlmaWVkXCI7XG5cblx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBkYXRhLCBsZXQncyBjb252ZXJ0IGl0XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IHJlc3BvbnNlLnN0YXRlO1xuXHRcdFx0XHRcdHN1Y2Nlc3MgPSByZXNwb25zZS5kYXRhO1xuXHRcdFx0XHRcdGVycm9yID0gcmVzcG9uc2UuZXJyb3I7XG5cdFx0XHRcdFx0aXNTdWNjZXNzID0gIWVycm9yO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEV4dHJhY3QgZXJyb3IgZnJvbSBzdGF0dXNUZXh0IGFuZCBub3JtYWxpemUgZm9yIG5vbi1hYm9ydHNcblx0XHRcdFx0ZXJyb3IgPSBzdGF0dXNUZXh0O1xuXHRcdFx0XHRpZiAoIHN0YXR1cyB8fCAhc3RhdHVzVGV4dCApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJlcnJvclwiO1xuXHRcdFx0XHRcdGlmICggc3RhdHVzIDwgMCApIHtcblx0XHRcdFx0XHRcdHN0YXR1cyA9IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCBkYXRhIGZvciB0aGUgZmFrZSB4aHIgb2JqZWN0XG5cdFx0XHRqcVhIUi5zdGF0dXMgPSBzdGF0dXM7XG5cdFx0XHRqcVhIUi5zdGF0dXNUZXh0ID0gKCBuYXRpdmVTdGF0dXNUZXh0IHx8IHN0YXR1c1RleHQgKSArIFwiXCI7XG5cblx0XHRcdC8vIFN1Y2Nlc3MvRXJyb3Jcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xuXHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIHN1Y2Nlc3MsIHN0YXR1c1RleHQsIGpxWEhSIF0gKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCwgZXJyb3IgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0anFYSFIuc3RhdHVzQ29kZSggc3RhdHVzQ29kZSApO1xuXHRcdFx0c3RhdHVzQ29kZSA9IHVuZGVmaW5lZDtcblxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIGlzU3VjY2VzcyA/IFwiYWpheFN1Y2Nlc3NcIiA6IFwiYWpheEVycm9yXCIsXG5cdFx0XHRcdFx0WyBqcVhIUiwgcywgaXNTdWNjZXNzID8gc3VjY2VzcyA6IGVycm9yIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29tcGxldGVcblx0XHRcdGNvbXBsZXRlRGVmZXJyZWQuZmlyZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCBdICk7XG5cblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBcImFqYXhDb21wbGV0ZVwiLCBbIGpxWEhSLCBzIF0gKTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgdGhlIGdsb2JhbCBBSkFYIGNvdW50ZXJcblx0XHRcdFx0aWYgKCAhKCAtLWpRdWVyeS5hY3RpdmUgKSApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggXCJhamF4U3RvcFwiICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4ganFYSFI7XG5cdH0sXG5cblx0Z2V0SlNPTjogZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgZGF0YSwgY2FsbGJhY2ssIFwianNvblwiICk7XG5cdH0sXG5cblx0Z2V0U2NyaXB0OiBmdW5jdGlvbiggdXJsLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCB1bmRlZmluZWQsIGNhbGxiYWNrLCBcInNjcmlwdFwiICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJnZXRcIiwgXCJwb3N0XCIgXSwgZnVuY3Rpb24oIGksIG1ldGhvZCApIHtcblx0alF1ZXJ5WyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBlICkge1xuXG5cdFx0Ly8gU2hpZnQgYXJndW1lbnRzIGlmIGRhdGEgYXJndW1lbnQgd2FzIG9taXR0ZWRcblx0XHRpZiAoIGlzRnVuY3Rpb24oIGRhdGEgKSApIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8IGNhbGxiYWNrO1xuXHRcdFx0Y2FsbGJhY2sgPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBUaGUgdXJsIGNhbiBiZSBhbiBvcHRpb25zIG9iamVjdCAod2hpY2ggdGhlbiBtdXN0IGhhdmUgLnVybClcblx0XHRyZXR1cm4galF1ZXJ5LmFqYXgoIGpRdWVyeS5leHRlbmQoIHtcblx0XHRcdHVybDogdXJsLFxuXHRcdFx0dHlwZTogbWV0aG9kLFxuXHRcdFx0ZGF0YVR5cGU6IHR5cGUsXG5cdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0c3VjY2VzczogY2FsbGJhY2tcblx0XHR9LCBqUXVlcnkuaXNQbGFpbk9iamVjdCggdXJsICkgJiYgdXJsICkgKTtcblx0fTtcbn0gKTtcblxuXG5qUXVlcnkuX2V2YWxVcmwgPSBmdW5jdGlvbiggdXJsLCBvcHRpb25zICkge1xuXHRyZXR1cm4galF1ZXJ5LmFqYXgoIHtcblx0XHR1cmw6IHVybCxcblxuXHRcdC8vIE1ha2UgdGhpcyBleHBsaWNpdCwgc2luY2UgdXNlciBjYW4gb3ZlcnJpZGUgdGhpcyB0aHJvdWdoIGFqYXhTZXR1cCAoIzExMjY0KVxuXHRcdHR5cGU6IFwiR0VUXCIsXG5cdFx0ZGF0YVR5cGU6IFwic2NyaXB0XCIsXG5cdFx0Y2FjaGU6IHRydWUsXG5cdFx0YXN5bmM6IGZhbHNlLFxuXHRcdGdsb2JhbDogZmFsc2UsXG5cblx0XHQvLyBPbmx5IGV2YWx1YXRlIHRoZSByZXNwb25zZSBpZiBpdCBpcyBzdWNjZXNzZnVsIChnaC00MTI2KVxuXHRcdC8vIGRhdGFGaWx0ZXIgaXMgbm90IGludm9rZWQgZm9yIGZhaWx1cmUgcmVzcG9uc2VzLCBzbyB1c2luZyBpdCBpbnN0ZWFkXG5cdFx0Ly8gb2YgdGhlIGRlZmF1bHQgY29udmVydGVyIGlzIGtsdWRneSBidXQgaXQgd29ya3MuXG5cdFx0Y29udmVydGVyczoge1xuXHRcdFx0XCJ0ZXh0IHNjcmlwdFwiOiBmdW5jdGlvbigpIHt9XG5cdFx0fSxcblx0XHRkYXRhRmlsdGVyOiBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHRqUXVlcnkuZ2xvYmFsRXZhbCggcmVzcG9uc2UsIG9wdGlvbnMgKTtcblx0XHR9XG5cdH0gKTtcbn07XG5cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHR3cmFwQWxsOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHR2YXIgd3JhcDtcblxuXHRcdGlmICggdGhpc1sgMCBdICkge1xuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCBodG1sICkgKSB7XG5cdFx0XHRcdGh0bWwgPSBodG1sLmNhbGwoIHRoaXNbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaGUgZWxlbWVudHMgdG8gd3JhcCB0aGUgdGFyZ2V0IGFyb3VuZFxuXHRcdFx0d3JhcCA9IGpRdWVyeSggaHRtbCwgdGhpc1sgMCBdLm93bmVyRG9jdW1lbnQgKS5lcSggMCApLmNsb25lKCB0cnVlICk7XG5cblx0XHRcdGlmICggdGhpc1sgMCBdLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHdyYXAuaW5zZXJ0QmVmb3JlKCB0aGlzWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0d3JhcC5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZWxlbSA9IHRoaXM7XG5cblx0XHRcdFx0d2hpbGUgKCBlbGVtLmZpcnN0RWxlbWVudENoaWxkICkge1xuXHRcdFx0XHRcdGVsZW0gPSBlbGVtLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGVsZW07XG5cdFx0XHR9ICkuYXBwZW5kKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0d3JhcElubmVyOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIGh0bWwgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS53cmFwSW5uZXIoIGh0bWwuY2FsbCggdGhpcywgaSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApLFxuXHRcdFx0XHRjb250ZW50cyA9IHNlbGYuY29udGVudHMoKTtcblxuXHRcdFx0aWYgKCBjb250ZW50cy5sZW5ndGggKSB7XG5cdFx0XHRcdGNvbnRlbnRzLndyYXBBbGwoIGh0bWwgKTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2VsZi5hcHBlbmQoIGh0bWwgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0d3JhcDogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0dmFyIGh0bWxJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggaHRtbCApO1xuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRqUXVlcnkoIHRoaXMgKS53cmFwQWxsKCBodG1sSXNGdW5jdGlvbiA/IGh0bWwuY2FsbCggdGhpcywgaSApIDogaHRtbCApO1xuXHRcdH0gKTtcblx0fSxcblxuXHR1bndyYXA6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR0aGlzLnBhcmVudCggc2VsZWN0b3IgKS5ub3QoIFwiYm9keVwiICkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkoIHRoaXMgKS5yZXBsYWNlV2l0aCggdGhpcy5jaGlsZE5vZGVzICk7XG5cdFx0fSApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59ICk7XG5cblxualF1ZXJ5LmV4cHIucHNldWRvcy5oaWRkZW4gPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuICFqUXVlcnkuZXhwci5wc2V1ZG9zLnZpc2libGUoIGVsZW0gKTtcbn07XG5qUXVlcnkuZXhwci5wc2V1ZG9zLnZpc2libGUgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuICEhKCBlbGVtLm9mZnNldFdpZHRoIHx8IGVsZW0ub2Zmc2V0SGVpZ2h0IHx8IGVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKTtcbn07XG5cblxuXG5cbmpRdWVyeS5hamF4U2V0dGluZ3MueGhyID0gZnVuY3Rpb24oKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTtcblx0fSBjYXRjaCAoIGUgKSB7fVxufTtcblxudmFyIHhoclN1Y2Nlc3NTdGF0dXMgPSB7XG5cblx0XHQvLyBGaWxlIHByb3RvY29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIGNvZGUgMCwgYXNzdW1lIDIwMFxuXHRcdDA6IDIwMCxcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0Ly8gIzE0NTA6IHNvbWV0aW1lcyBJRSByZXR1cm5zIDEyMjMgd2hlbiBpdCBzaG91bGQgYmUgMjA0XG5cdFx0MTIyMzogMjA0XG5cdH0sXG5cdHhoclN1cHBvcnRlZCA9IGpRdWVyeS5hamF4U2V0dGluZ3MueGhyKCk7XG5cbnN1cHBvcnQuY29ycyA9ICEheGhyU3VwcG9ydGVkICYmICggXCJ3aXRoQ3JlZGVudGlhbHNcIiBpbiB4aHJTdXBwb3J0ZWQgKTtcbnN1cHBvcnQuYWpheCA9IHhoclN1cHBvcnRlZCA9ICEheGhyU3VwcG9ydGVkO1xuXG5qUXVlcnkuYWpheFRyYW5zcG9ydCggZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdHZhciBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaztcblxuXHQvLyBDcm9zcyBkb21haW4gb25seSBhbGxvd2VkIGlmIHN1cHBvcnRlZCB0aHJvdWdoIFhNTEh0dHBSZXF1ZXN0XG5cdGlmICggc3VwcG9ydC5jb3JzIHx8IHhoclN1cHBvcnRlZCAmJiAhb3B0aW9ucy5jcm9zc0RvbWFpbiApIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogZnVuY3Rpb24oIGhlYWRlcnMsIGNvbXBsZXRlICkge1xuXHRcdFx0XHR2YXIgaSxcblx0XHRcdFx0XHR4aHIgPSBvcHRpb25zLnhocigpO1xuXG5cdFx0XHRcdHhoci5vcGVuKFxuXHRcdFx0XHRcdG9wdGlvbnMudHlwZSxcblx0XHRcdFx0XHRvcHRpb25zLnVybCxcblx0XHRcdFx0XHRvcHRpb25zLmFzeW5jLFxuXHRcdFx0XHRcdG9wdGlvbnMudXNlcm5hbWUsXG5cdFx0XHRcdFx0b3B0aW9ucy5wYXNzd29yZFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdC8vIEFwcGx5IGN1c3RvbSBmaWVsZHMgaWYgcHJvdmlkZWRcblx0XHRcdFx0aWYgKCBvcHRpb25zLnhockZpZWxkcyApIHtcblx0XHRcdFx0XHRmb3IgKCBpIGluIG9wdGlvbnMueGhyRmllbGRzICkge1xuXHRcdFx0XHRcdFx0eGhyWyBpIF0gPSBvcHRpb25zLnhockZpZWxkc1sgaSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIE92ZXJyaWRlIG1pbWUgdHlwZSBpZiBuZWVkZWRcblx0XHRcdFx0aWYgKCBvcHRpb25zLm1pbWVUeXBlICYmIHhoci5vdmVycmlkZU1pbWVUeXBlICkge1xuXHRcdFx0XHRcdHhoci5vdmVycmlkZU1pbWVUeXBlKCBvcHRpb25zLm1pbWVUeXBlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBYLVJlcXVlc3RlZC1XaXRoIGhlYWRlclxuXHRcdFx0XHQvLyBGb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzLCBzZWVpbmcgYXMgY29uZGl0aW9ucyBmb3IgYSBwcmVmbGlnaHQgYXJlXG5cdFx0XHRcdC8vIGFraW4gdG8gYSBqaWdzYXcgcHV6emxlLCB3ZSBzaW1wbHkgbmV2ZXIgc2V0IGl0IHRvIGJlIHN1cmUuXG5cdFx0XHRcdC8vIChpdCBjYW4gYWx3YXlzIGJlIHNldCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIG9yIGV2ZW4gdXNpbmcgYWpheFNldHVwKVxuXHRcdFx0XHQvLyBGb3Igc2FtZS1kb21haW4gcmVxdWVzdHMsIHdvbid0IGNoYW5nZSBoZWFkZXIgaWYgYWxyZWFkeSBwcm92aWRlZC5cblx0XHRcdFx0aWYgKCAhb3B0aW9ucy5jcm9zc0RvbWFpbiAmJiAhaGVhZGVyc1sgXCJYLVJlcXVlc3RlZC1XaXRoXCIgXSApIHtcblx0XHRcdFx0XHRoZWFkZXJzWyBcIlgtUmVxdWVzdGVkLVdpdGhcIiBdID0gXCJYTUxIdHRwUmVxdWVzdFwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU2V0IGhlYWRlcnNcblx0XHRcdFx0Zm9yICggaSBpbiBoZWFkZXJzICkge1xuXHRcdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBoZWFkZXJzWyBpIF0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENhbGxiYWNrXG5cdFx0XHRcdGNhbGxiYWNrID0gZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrID0geGhyLm9ubG9hZCA9XG5cdFx0XHRcdFx0XHRcdFx0eGhyLm9uZXJyb3IgPSB4aHIub25hYm9ydCA9IHhoci5vbnRpbWVvdXQgPVxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG5cblx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlID09PSBcImFib3J0XCIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0eGhyLmFib3J0KCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIHR5cGUgPT09IFwiZXJyb3JcIiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0Ly8gT24gYSBtYW51YWwgbmF0aXZlIGFib3J0LCBJRTkgdGhyb3dzXG5cdFx0XHRcdFx0XHRcdFx0Ly8gZXJyb3JzIG9uIGFueSBwcm9wZXJ0eSBhY2Nlc3MgdGhhdCBpcyBub3QgcmVhZHlTdGF0ZVxuXHRcdFx0XHRcdFx0XHRcdGlmICggdHlwZW9mIHhoci5zdGF0dXMgIT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZSggMCwgXCJlcnJvclwiICk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKFxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEZpbGU6IHByb3RvY29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIDA7IHNlZSAjODYwNSwgIzE0MjA3XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcblx0XHRcdFx0XHRcdFx0XHRcdHhoclN1Y2Nlc3NTdGF0dXNbIHhoci5zdGF0dXMgXSB8fCB4aHIuc3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHQsXG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBJRTkgaGFzIG5vIFhIUjIgYnV0IHRocm93cyBvbiBiaW5hcnkgKHRyYWMtMTE0MjYpXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBGb3IgWEhSMiBub24tdGV4dCwgbGV0IHRoZSBjYWxsZXIgaGFuZGxlIGl0IChnaC0yNDk4KVxuXHRcdFx0XHRcdFx0XHRcdFx0KCB4aHIucmVzcG9uc2VUeXBlIHx8IFwidGV4dFwiICkgIT09IFwidGV4dFwiICB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHhoci5yZXNwb25zZVRleHQgIT09IFwic3RyaW5nXCIgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IGJpbmFyeTogeGhyLnJlc3BvbnNlIH0gOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IHRleHQ6IHhoci5yZXNwb25zZVRleHQgfSxcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdC8vIExpc3RlbiB0byBldmVudHNcblx0XHRcdFx0eGhyLm9ubG9hZCA9IGNhbGxiYWNrKCk7XG5cdFx0XHRcdGVycm9yQ2FsbGJhY2sgPSB4aHIub25lcnJvciA9IHhoci5vbnRpbWVvdXQgPSBjYWxsYmFjayggXCJlcnJvclwiICk7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdFx0XHRcdC8vIFVzZSBvbnJlYWR5c3RhdGVjaGFuZ2UgdG8gcmVwbGFjZSBvbmFib3J0XG5cdFx0XHRcdC8vIHRvIGhhbmRsZSB1bmNhdWdodCBhYm9ydHNcblx0XHRcdFx0aWYgKCB4aHIub25hYm9ydCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHhoci5vbmFib3J0ID0gZXJyb3JDYWxsYmFjaztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdC8vIENoZWNrIHJlYWR5U3RhdGUgYmVmb3JlIHRpbWVvdXQgYXMgaXQgY2hhbmdlc1xuXHRcdFx0XHRcdFx0aWYgKCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBBbGxvdyBvbmVycm9yIHRvIGJlIGNhbGxlZCBmaXJzdCxcblx0XHRcdFx0XHRcdFx0Ly8gYnV0IHRoYXQgd2lsbCBub3QgaGFuZGxlIGEgbmF0aXZlIGFib3J0XG5cdFx0XHRcdFx0XHRcdC8vIEFsc28sIHNhdmUgZXJyb3JDYWxsYmFjayB0byBhIHZhcmlhYmxlXG5cdFx0XHRcdFx0XHRcdC8vIGFzIHhoci5vbmVycm9yIGNhbm5vdCBiZSBhY2Nlc3NlZFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ3JlYXRlIHRoZSBhYm9ydCBjYWxsYmFja1xuXHRcdFx0XHRjYWxsYmFjayA9IGNhbGxiYWNrKCBcImFib3J0XCIgKTtcblxuXHRcdFx0XHR0cnkge1xuXG5cdFx0XHRcdFx0Ly8gRG8gc2VuZCB0aGUgcmVxdWVzdCAodGhpcyBtYXkgcmFpc2UgYW4gZXhjZXB0aW9uKVxuXHRcdFx0XHRcdHhoci5zZW5kKCBvcHRpb25zLmhhc0NvbnRlbnQgJiYgb3B0aW9ucy5kYXRhIHx8IG51bGwgKTtcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0XHQvLyAjMTQ2ODM6IE9ubHkgcmV0aHJvdyBpZiB0aGlzIGhhc24ndCBiZWVuIG5vdGlmaWVkIGFzIGFuIGVycm9yIHlldFxuXHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFByZXZlbnQgYXV0by1leGVjdXRpb24gb2Ygc2NyaXB0cyB3aGVuIG5vIGV4cGxpY2l0IGRhdGFUeXBlIHdhcyBwcm92aWRlZCAoU2VlIGdoLTI0MzIpXG5qUXVlcnkuYWpheFByZWZpbHRlciggZnVuY3Rpb24oIHMgKSB7XG5cdGlmICggcy5jcm9zc0RvbWFpbiApIHtcblx0XHRzLmNvbnRlbnRzLnNjcmlwdCA9IGZhbHNlO1xuXHR9XG59ICk7XG5cbi8vIEluc3RhbGwgc2NyaXB0IGRhdGFUeXBlXG5qUXVlcnkuYWpheFNldHVwKCB7XG5cdGFjY2VwdHM6IHtcblx0XHRzY3JpcHQ6IFwidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBcIiArXG5cdFx0XHRcImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdFwiXG5cdH0sXG5cdGNvbnRlbnRzOiB7XG5cdFx0c2NyaXB0OiAvXFxiKD86amF2YXxlY21hKXNjcmlwdFxcYi9cblx0fSxcblx0Y29udmVydGVyczoge1xuXHRcdFwidGV4dCBzY3JpcHRcIjogZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHRqUXVlcnkuZ2xvYmFsRXZhbCggdGV4dCApO1xuXHRcdFx0cmV0dXJuIHRleHQ7XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIEhhbmRsZSBjYWNoZSdzIHNwZWNpYWwgY2FzZSBhbmQgY3Jvc3NEb21haW5cbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBcInNjcmlwdFwiLCBmdW5jdGlvbiggcyApIHtcblx0aWYgKCBzLmNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0cy5jYWNoZSA9IGZhbHNlO1xuXHR9XG5cdGlmICggcy5jcm9zc0RvbWFpbiApIHtcblx0XHRzLnR5cGUgPSBcIkdFVFwiO1xuXHR9XG59ICk7XG5cbi8vIEJpbmQgc2NyaXB0IHRhZyBoYWNrIHRyYW5zcG9ydFxualF1ZXJ5LmFqYXhUcmFuc3BvcnQoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xuXG5cdC8vIFRoaXMgdHJhbnNwb3J0IG9ubHkgZGVhbHMgd2l0aCBjcm9zcyBkb21haW4gb3IgZm9yY2VkLWJ5LWF0dHJzIHJlcXVlc3RzXG5cdGlmICggcy5jcm9zc0RvbWFpbiB8fCBzLnNjcmlwdEF0dHJzICkge1xuXHRcdHZhciBzY3JpcHQsIGNhbGxiYWNrO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiBmdW5jdGlvbiggXywgY29tcGxldGUgKSB7XG5cdFx0XHRcdHNjcmlwdCA9IGpRdWVyeSggXCI8c2NyaXB0PlwiIClcblx0XHRcdFx0XHQuYXR0ciggcy5zY3JpcHRBdHRycyB8fCB7fSApXG5cdFx0XHRcdFx0LnByb3AoIHsgY2hhcnNldDogcy5zY3JpcHRDaGFyc2V0LCBzcmM6IHMudXJsIH0gKVxuXHRcdFx0XHRcdC5vbiggXCJsb2FkIGVycm9yXCIsIGNhbGxiYWNrID0gZnVuY3Rpb24oIGV2dCApIHtcblx0XHRcdFx0XHRcdHNjcmlwdC5yZW1vdmUoKTtcblx0XHRcdFx0XHRcdGNhbGxiYWNrID0gbnVsbDtcblx0XHRcdFx0XHRcdGlmICggZXZ0ICkge1xuXHRcdFx0XHRcdFx0XHRjb21wbGV0ZSggZXZ0LnR5cGUgPT09IFwiZXJyb3JcIiA/IDQwNCA6IDIwMCwgZXZ0LnR5cGUgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0Ly8gVXNlIG5hdGl2ZSBET00gbWFuaXB1bGF0aW9uIHRvIGF2b2lkIG91ciBkb21NYW5pcCBBSkFYIHRyaWNrZXJ5XG5cdFx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdFsgMCBdICk7XG5cdFx0XHR9LFxuXHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbnZhciBvbGRDYWxsYmFja3MgPSBbXSxcblx0cmpzb25wID0gLyg9KVxcPyg/PSZ8JCl8XFw/XFw/LztcblxuLy8gRGVmYXVsdCBqc29ucCBzZXR0aW5nc1xualF1ZXJ5LmFqYXhTZXR1cCgge1xuXHRqc29ucDogXCJjYWxsYmFja1wiLFxuXHRqc29ucENhbGxiYWNrOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgY2FsbGJhY2sgPSBvbGRDYWxsYmFja3MucG9wKCkgfHwgKCBqUXVlcnkuZXhwYW5kbyArIFwiX1wiICsgKCBub25jZSsrICkgKTtcblx0XHR0aGlzWyBjYWxsYmFjayBdID0gdHJ1ZTtcblx0XHRyZXR1cm4gY2FsbGJhY2s7XG5cdH1cbn0gKTtcblxuLy8gRGV0ZWN0LCBub3JtYWxpemUgb3B0aW9ucyBhbmQgaW5zdGFsbCBjYWxsYmFja3MgZm9yIGpzb25wIHJlcXVlc3RzXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJqc29uIGpzb25wXCIsIGZ1bmN0aW9uKCBzLCBvcmlnaW5hbFNldHRpbmdzLCBqcVhIUiApIHtcblxuXHR2YXIgY2FsbGJhY2tOYW1lLCBvdmVyd3JpdHRlbiwgcmVzcG9uc2VDb250YWluZXIsXG5cdFx0anNvblByb3AgPSBzLmpzb25wICE9PSBmYWxzZSAmJiAoIHJqc29ucC50ZXN0KCBzLnVybCApID9cblx0XHRcdFwidXJsXCIgOlxuXHRcdFx0dHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQoIHMuY29udGVudFR5cGUgfHwgXCJcIiApXG5cdFx0XHRcdFx0LmluZGV4T2YoIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIgKSA9PT0gMCAmJlxuXHRcdFx0XHRyanNvbnAudGVzdCggcy5kYXRhICkgJiYgXCJkYXRhXCJcblx0XHQpO1xuXG5cdC8vIEhhbmRsZSBpZmYgdGhlIGV4cGVjdGVkIGRhdGEgdHlwZSBpcyBcImpzb25wXCIgb3Igd2UgaGF2ZSBhIHBhcmFtZXRlciB0byBzZXRcblx0aWYgKCBqc29uUHJvcCB8fCBzLmRhdGFUeXBlc1sgMCBdID09PSBcImpzb25wXCIgKSB7XG5cblx0XHQvLyBHZXQgY2FsbGJhY2sgbmFtZSwgcmVtZW1iZXJpbmcgcHJlZXhpc3RpbmcgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGl0XG5cdFx0Y2FsbGJhY2tOYW1lID0gcy5qc29ucENhbGxiYWNrID0gaXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkgP1xuXHRcdFx0cy5qc29ucENhbGxiYWNrKCkgOlxuXHRcdFx0cy5qc29ucENhbGxiYWNrO1xuXG5cdFx0Ly8gSW5zZXJ0IGNhbGxiYWNrIGludG8gdXJsIG9yIGZvcm0gZGF0YVxuXHRcdGlmICgganNvblByb3AgKSB7XG5cdFx0XHRzWyBqc29uUHJvcCBdID0gc1sganNvblByb3AgXS5yZXBsYWNlKCByanNvbnAsIFwiJDFcIiArIGNhbGxiYWNrTmFtZSApO1xuXHRcdH0gZWxzZSBpZiAoIHMuanNvbnAgIT09IGZhbHNlICkge1xuXHRcdFx0cy51cmwgKz0gKCBycXVlcnkudGVzdCggcy51cmwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuanNvbnAgKyBcIj1cIiArIGNhbGxiYWNrTmFtZTtcblx0XHR9XG5cblx0XHQvLyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uXG5cdFx0cy5jb252ZXJ0ZXJzWyBcInNjcmlwdCBqc29uXCIgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCAhcmVzcG9uc2VDb250YWluZXIgKSB7XG5cdFx0XHRcdGpRdWVyeS5lcnJvciggY2FsbGJhY2tOYW1lICsgXCIgd2FzIG5vdCBjYWxsZWRcIiApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3BvbnNlQ29udGFpbmVyWyAwIF07XG5cdFx0fTtcblxuXHRcdC8vIEZvcmNlIGpzb24gZGF0YVR5cGVcblx0XHRzLmRhdGFUeXBlc1sgMCBdID0gXCJqc29uXCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrXG5cdFx0b3ZlcndyaXR0ZW4gPSB3aW5kb3dbIGNhbGxiYWNrTmFtZSBdO1xuXHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gYXJndW1lbnRzO1xuXHRcdH07XG5cblx0XHQvLyBDbGVhbi11cCBmdW5jdGlvbiAoZmlyZXMgYWZ0ZXIgY29udmVydGVycylcblx0XHRqcVhIUi5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBJZiBwcmV2aW91cyB2YWx1ZSBkaWRuJ3QgZXhpc3QgLSByZW1vdmUgaXRcblx0XHRcdGlmICggb3ZlcndyaXR0ZW4gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0alF1ZXJ5KCB3aW5kb3cgKS5yZW1vdmVQcm9wKCBjYWxsYmFja05hbWUgKTtcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHJlc3RvcmUgcHJlZXhpc3RpbmcgdmFsdWVcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBvdmVyd3JpdHRlbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2F2ZSBiYWNrIGFzIGZyZWVcblx0XHRcdGlmICggc1sgY2FsbGJhY2tOYW1lIF0gKSB7XG5cblx0XHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgcmUtdXNpbmcgdGhlIG9wdGlvbnMgZG9lc24ndCBzY3JldyB0aGluZ3MgYXJvdW5kXG5cdFx0XHRcdHMuanNvbnBDYWxsYmFjayA9IG9yaWdpbmFsU2V0dGluZ3MuanNvbnBDYWxsYmFjaztcblxuXHRcdFx0XHQvLyBTYXZlIHRoZSBjYWxsYmFjayBuYW1lIGZvciBmdXR1cmUgdXNlXG5cdFx0XHRcdG9sZENhbGxiYWNrcy5wdXNoKCBjYWxsYmFja05hbWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlXG5cdFx0XHRpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGlzRnVuY3Rpb24oIG92ZXJ3cml0dGVuICkgKSB7XG5cdFx0XHRcdG92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5lclsgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7XG5cdFx0fSApO1xuXG5cdFx0Ly8gRGVsZWdhdGUgdG8gc2NyaXB0XG5cdFx0cmV0dXJuIFwic2NyaXB0XCI7XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gU3VwcG9ydDogU2FmYXJpIDggb25seVxuLy8gSW4gU2FmYXJpIDggZG9jdW1lbnRzIGNyZWF0ZWQgdmlhIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudFxuLy8gY29sbGFwc2Ugc2libGluZyBmb3JtczogdGhlIHNlY29uZCBvbmUgYmVjb21lcyBhIGNoaWxkIG9mIHRoZSBmaXJzdCBvbmUuXG4vLyBCZWNhdXNlIG9mIHRoYXQsIHRoaXMgc2VjdXJpdHkgbWVhc3VyZSBoYXMgdG8gYmUgZGlzYWJsZWQgaW4gU2FmYXJpIDguXG4vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzM3XG5zdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCA9ICggZnVuY3Rpb24oKSB7XG5cdHZhciBib2R5ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCBcIlwiICkuYm9keTtcblx0Ym9keS5pbm5lckhUTUwgPSBcIjxmb3JtPjwvZm9ybT48Zm9ybT48L2Zvcm0+XCI7XG5cdHJldHVybiBib2R5LmNoaWxkTm9kZXMubGVuZ3RoID09PSAyO1xufSApKCk7XG5cblxuLy8gQXJndW1lbnQgXCJkYXRhXCIgc2hvdWxkIGJlIHN0cmluZyBvZiBodG1sXG4vLyBjb250ZXh0IChvcHRpb25hbCk6IElmIHNwZWNpZmllZCwgdGhlIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGlzIGNvbnRleHQsXG4vLyBkZWZhdWx0cyB0byBkb2N1bWVudFxuLy8ga2VlcFNjcmlwdHMgKG9wdGlvbmFsKTogSWYgdHJ1ZSwgd2lsbCBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBodG1sIHN0cmluZ1xualF1ZXJ5LnBhcnNlSFRNTCA9IGZ1bmN0aW9uKCBkYXRhLCBjb250ZXh0LCBrZWVwU2NyaXB0cyApIHtcblx0aWYgKCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0a2VlcFNjcmlwdHMgPSBjb250ZXh0O1xuXHRcdGNvbnRleHQgPSBmYWxzZTtcblx0fVxuXG5cdHZhciBiYXNlLCBwYXJzZWQsIHNjcmlwdHM7XG5cblx0aWYgKCAhY29udGV4dCApIHtcblxuXHRcdC8vIFN0b3Agc2NyaXB0cyBvciBpbmxpbmUgZXZlbnQgaGFuZGxlcnMgZnJvbSBiZWluZyBleGVjdXRlZCBpbW1lZGlhdGVseVxuXHRcdC8vIGJ5IHVzaW5nIGRvY3VtZW50LmltcGxlbWVudGF0aW9uXG5cdFx0aWYgKCBzdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCApIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIFwiXCIgKTtcblxuXHRcdFx0Ly8gU2V0IHRoZSBiYXNlIGhyZWYgZm9yIHRoZSBjcmVhdGVkIGRvY3VtZW50XG5cdFx0XHQvLyBzbyBhbnkgcGFyc2VkIGVsZW1lbnRzIHdpdGggVVJMc1xuXHRcdFx0Ly8gYXJlIGJhc2VkIG9uIHRoZSBkb2N1bWVudCdzIFVSTCAoZ2gtMjk2NSlcblx0XHRcdGJhc2UgPSBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiYmFzZVwiICk7XG5cdFx0XHRiYXNlLmhyZWYgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmO1xuXHRcdFx0Y29udGV4dC5oZWFkLmFwcGVuZENoaWxkKCBiYXNlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudDtcblx0XHR9XG5cdH1cblxuXHRwYXJzZWQgPSByc2luZ2xlVGFnLmV4ZWMoIGRhdGEgKTtcblx0c2NyaXB0cyA9ICFrZWVwU2NyaXB0cyAmJiBbXTtcblxuXHQvLyBTaW5nbGUgdGFnXG5cdGlmICggcGFyc2VkICkge1xuXHRcdHJldHVybiBbIGNvbnRleHQuY3JlYXRlRWxlbWVudCggcGFyc2VkWyAxIF0gKSBdO1xuXHR9XG5cblx0cGFyc2VkID0gYnVpbGRGcmFnbWVudCggWyBkYXRhIF0sIGNvbnRleHQsIHNjcmlwdHMgKTtcblxuXHRpZiAoIHNjcmlwdHMgJiYgc2NyaXB0cy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5KCBzY3JpcHRzICkucmVtb3ZlKCk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgcGFyc2VkLmNoaWxkTm9kZXMgKTtcbn07XG5cblxuLyoqXG4gKiBMb2FkIGEgdXJsIGludG8gYSBwYWdlXG4gKi9cbmpRdWVyeS5mbi5sb2FkID0gZnVuY3Rpb24oIHVybCwgcGFyYW1zLCBjYWxsYmFjayApIHtcblx0dmFyIHNlbGVjdG9yLCB0eXBlLCByZXNwb25zZSxcblx0XHRzZWxmID0gdGhpcyxcblx0XHRvZmYgPSB1cmwuaW5kZXhPZiggXCIgXCIgKTtcblxuXHRpZiAoIG9mZiA+IC0xICkge1xuXHRcdHNlbGVjdG9yID0gc3RyaXBBbmRDb2xsYXBzZSggdXJsLnNsaWNlKCBvZmYgKSApO1xuXHRcdHVybCA9IHVybC5zbGljZSggMCwgb2ZmICk7XG5cdH1cblxuXHQvLyBJZiBpdCdzIGEgZnVuY3Rpb25cblx0aWYgKCBpc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHtcblxuXHRcdC8vIFdlIGFzc3VtZSB0aGF0IGl0J3MgdGhlIGNhbGxiYWNrXG5cdFx0Y2FsbGJhY2sgPSBwYXJhbXM7XG5cdFx0cGFyYW1zID0gdW5kZWZpbmVkO1xuXG5cdC8vIE90aGVyd2lzZSwgYnVpbGQgYSBwYXJhbSBzdHJpbmdcblx0fSBlbHNlIGlmICggcGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0dHlwZSA9IFwiUE9TVFwiO1xuXHR9XG5cblx0Ly8gSWYgd2UgaGF2ZSBlbGVtZW50cyB0byBtb2RpZnksIG1ha2UgdGhlIHJlcXVlc3Rcblx0aWYgKCBzZWxmLmxlbmd0aCA+IDAgKSB7XG5cdFx0alF1ZXJ5LmFqYXgoIHtcblx0XHRcdHVybDogdXJsLFxuXG5cdFx0XHQvLyBJZiBcInR5cGVcIiB2YXJpYWJsZSBpcyB1bmRlZmluZWQsIHRoZW4gXCJHRVRcIiBtZXRob2Qgd2lsbCBiZSB1c2VkLlxuXHRcdFx0Ly8gTWFrZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIGV4cGxpY2l0IHNpbmNlXG5cdFx0XHQvLyB1c2VyIGNhbiBvdmVycmlkZSBpdCB0aHJvdWdoIGFqYXhTZXR1cCBtZXRob2Rcblx0XHRcdHR5cGU6IHR5cGUgfHwgXCJHRVRcIixcblx0XHRcdGRhdGFUeXBlOiBcImh0bWxcIixcblx0XHRcdGRhdGE6IHBhcmFtc1xuXHRcdH0gKS5kb25lKCBmdW5jdGlvbiggcmVzcG9uc2VUZXh0ICkge1xuXG5cdFx0XHQvLyBTYXZlIHJlc3BvbnNlIGZvciB1c2UgaW4gY29tcGxldGUgY2FsbGJhY2tcblx0XHRcdHJlc3BvbnNlID0gYXJndW1lbnRzO1xuXG5cdFx0XHRzZWxmLmh0bWwoIHNlbGVjdG9yID9cblxuXHRcdFx0XHQvLyBJZiBhIHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQsIGxvY2F0ZSB0aGUgcmlnaHQgZWxlbWVudHMgaW4gYSBkdW1teSBkaXZcblx0XHRcdFx0Ly8gRXhjbHVkZSBzY3JpcHRzIHRvIGF2b2lkIElFICdQZXJtaXNzaW9uIERlbmllZCcgZXJyb3JzXG5cdFx0XHRcdGpRdWVyeSggXCI8ZGl2PlwiICkuYXBwZW5kKCBqUXVlcnkucGFyc2VIVE1MKCByZXNwb25zZVRleHQgKSApLmZpbmQoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSB1c2UgdGhlIGZ1bGwgcmVzdWx0XG5cdFx0XHRcdHJlc3BvbnNlVGV4dCApO1xuXG5cdFx0Ly8gSWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImRhdGFcIiwgXCJzdGF0dXNcIiwgXCJqcVhIUlwiXG5cdFx0Ly8gYnV0IHRoZXkgYXJlIGlnbm9yZWQgYmVjYXVzZSByZXNwb25zZSB3YXMgc2V0IGFib3ZlLlxuXHRcdC8vIElmIGl0IGZhaWxzLCB0aGlzIGZ1bmN0aW9uIGdldHMgXCJqcVhIUlwiLCBcInN0YXR1c1wiLCBcImVycm9yXCJcblx0XHR9ICkuYWx3YXlzKCBjYWxsYmFjayAmJiBmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHtcblx0XHRcdHNlbGYuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGNhbGxiYWNrLmFwcGx5KCB0aGlzLCByZXNwb25zZSB8fCBbIGpxWEhSLnJlc3BvbnNlVGV4dCwgc3RhdHVzLCBqcVhIUiBdICk7XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5cblxuXG4vLyBBdHRhY2ggYSBidW5jaCBvZiBmdW5jdGlvbnMgZm9yIGhhbmRsaW5nIGNvbW1vbiBBSkFYIGV2ZW50c1xualF1ZXJ5LmVhY2goIFtcblx0XCJhamF4U3RhcnRcIixcblx0XCJhamF4U3RvcFwiLFxuXHRcImFqYXhDb21wbGV0ZVwiLFxuXHRcImFqYXhFcnJvclwiLFxuXHRcImFqYXhTdWNjZXNzXCIsXG5cdFwiYWpheFNlbmRcIlxuXSwgZnVuY3Rpb24oIGksIHR5cGUgKSB7XG5cdGpRdWVyeS5mblsgdHlwZSBdID0gZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlLCBmbiApO1xuXHR9O1xufSApO1xuXG5cblxuXG5qUXVlcnkuZXhwci5wc2V1ZG9zLmFuaW1hdGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiBqUXVlcnkuZ3JlcCggalF1ZXJ5LnRpbWVycywgZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiBlbGVtID09PSBmbi5lbGVtO1xuXHR9ICkubGVuZ3RoO1xufTtcblxuXG5cblxualF1ZXJ5Lm9mZnNldCA9IHtcblx0c2V0T2Zmc2V0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgaSApIHtcblx0XHR2YXIgY3VyUG9zaXRpb24sIGN1ckxlZnQsIGN1ckNTU1RvcCwgY3VyVG9wLCBjdXJPZmZzZXQsIGN1ckNTU0xlZnQsIGNhbGN1bGF0ZVBvc2l0aW9uLFxuXHRcdFx0cG9zaXRpb24gPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBvc2l0aW9uXCIgKSxcblx0XHRcdGN1ckVsZW0gPSBqUXVlcnkoIGVsZW0gKSxcblx0XHRcdHByb3BzID0ge307XG5cblx0XHQvLyBTZXQgcG9zaXRpb24gZmlyc3QsIGluLWNhc2UgdG9wL2xlZnQgYXJlIHNldCBldmVuIG9uIHN0YXRpYyBlbGVtXG5cdFx0aWYgKCBwb3NpdGlvbiA9PT0gXCJzdGF0aWNcIiApIHtcblx0XHRcdGVsZW0uc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG5cdFx0fVxuXG5cdFx0Y3VyT2Zmc2V0ID0gY3VyRWxlbS5vZmZzZXQoKTtcblx0XHRjdXJDU1NUb3AgPSBqUXVlcnkuY3NzKCBlbGVtLCBcInRvcFwiICk7XG5cdFx0Y3VyQ1NTTGVmdCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwibGVmdFwiICk7XG5cdFx0Y2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSBcImFic29sdXRlXCIgfHwgcG9zaXRpb24gPT09IFwiZml4ZWRcIiApICYmXG5cdFx0XHQoIGN1ckNTU1RvcCArIGN1ckNTU0xlZnQgKS5pbmRleE9mKCBcImF1dG9cIiApID4gLTE7XG5cblx0XHQvLyBOZWVkIHRvIGJlIGFibGUgdG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlmIGVpdGhlclxuXHRcdC8vIHRvcCBvciBsZWZ0IGlzIGF1dG8gYW5kIHBvc2l0aW9uIGlzIGVpdGhlciBhYnNvbHV0ZSBvciBmaXhlZFxuXHRcdGlmICggY2FsY3VsYXRlUG9zaXRpb24gKSB7XG5cdFx0XHRjdXJQb3NpdGlvbiA9IGN1ckVsZW0ucG9zaXRpb24oKTtcblx0XHRcdGN1clRvcCA9IGN1clBvc2l0aW9uLnRvcDtcblx0XHRcdGN1ckxlZnQgPSBjdXJQb3NpdGlvbi5sZWZ0O1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1clRvcCA9IHBhcnNlRmxvYXQoIGN1ckNTU1RvcCApIHx8IDA7XG5cdFx0XHRjdXJMZWZ0ID0gcGFyc2VGbG9hdCggY3VyQ1NTTGVmdCApIHx8IDA7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBvcHRpb25zICkgKSB7XG5cblx0XHRcdC8vIFVzZSBqUXVlcnkuZXh0ZW5kIGhlcmUgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIG9mIGNvb3JkaW5hdGVzIGFyZ3VtZW50IChnaC0xODQ4KVxuXHRcdFx0b3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgalF1ZXJ5LmV4dGVuZCgge30sIGN1ck9mZnNldCApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHRpb25zLnRvcCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50b3AgKSArIGN1clRvcDtcblx0XHR9XG5cdFx0aWYgKCBvcHRpb25zLmxlZnQgIT0gbnVsbCApIHtcblx0XHRcdHByb3BzLmxlZnQgPSAoIG9wdGlvbnMubGVmdCAtIGN1ck9mZnNldC5sZWZ0ICkgKyBjdXJMZWZ0O1xuXHRcdH1cblxuXHRcdGlmICggXCJ1c2luZ1wiIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRvcHRpb25zLnVzaW5nLmNhbGwoIGVsZW0sIHByb3BzICk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VyRWxlbS5jc3MoIHByb3BzICk7XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0Ly8gb2Zmc2V0KCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgYm9yZGVyIGJveCB0byB0aGUgZG9jdW1lbnQgb3JpZ2luXG5cdG9mZnNldDogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cblx0XHQvLyBQcmVzZXJ2ZSBjaGFpbmluZyBmb3Igc2V0dGVyXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHRoaXMgOlxuXHRcdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRcdGpRdWVyeS5vZmZzZXQuc2V0T2Zmc2V0KCB0aGlzLCBvcHRpb25zLCBpICk7XG5cdFx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHR2YXIgcmVjdCwgd2luLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXTtcblxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIHplcm9zIGZvciBkaXNjb25uZWN0ZWQgYW5kIGhpZGRlbiAoZGlzcGxheTogbm9uZSkgZWxlbWVudHMgKGdoLTIzMTApXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdFx0Ly8gUnVubmluZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYVxuXHRcdC8vIGRpc2Nvbm5lY3RlZCBub2RlIGluIElFIHRocm93cyBhbiBlcnJvclxuXHRcdGlmICggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4geyB0b3A6IDAsIGxlZnQ6IDAgfTtcblx0XHR9XG5cblx0XHQvLyBHZXQgZG9jdW1lbnQtcmVsYXRpdmUgcG9zaXRpb24gYnkgYWRkaW5nIHZpZXdwb3J0IHNjcm9sbCB0byB2aWV3cG9ydC1yZWxhdGl2ZSBnQkNSXG5cdFx0cmVjdCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0d2luID0gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IHJlY3QudG9wICsgd2luLnBhZ2VZT2Zmc2V0LFxuXHRcdFx0bGVmdDogcmVjdC5sZWZ0ICsgd2luLnBhZ2VYT2Zmc2V0XG5cdFx0fTtcblx0fSxcblxuXHQvLyBwb3NpdGlvbigpIHJlbGF0ZXMgYW4gZWxlbWVudCdzIG1hcmdpbiBib3ggdG8gaXRzIG9mZnNldCBwYXJlbnQncyBwYWRkaW5nIGJveFxuXHQvLyBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBiZWhhdmlvciBvZiBDU1MgYWJzb2x1dGUgcG9zaXRpb25pbmdcblx0cG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggIXRoaXNbIDAgXSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgb2Zmc2V0UGFyZW50LCBvZmZzZXQsIGRvYyxcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF0sXG5cdFx0XHRwYXJlbnRPZmZzZXQgPSB7IHRvcDogMCwgbGVmdDogMCB9O1xuXG5cdFx0Ly8gcG9zaXRpb246Zml4ZWQgZWxlbWVudHMgYXJlIG9mZnNldCBmcm9tIHRoZSB2aWV3cG9ydCwgd2hpY2ggaXRzZWxmIGFsd2F5cyBoYXMgemVybyBvZmZzZXRcblx0XHRpZiAoIGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApID09PSBcImZpeGVkXCIgKSB7XG5cblx0XHRcdC8vIEFzc3VtZSBwb3NpdGlvbjpmaXhlZCBpbXBsaWVzIGF2YWlsYWJpbGl0eSBvZiBnZXRCb3VuZGluZ0NsaWVudFJlY3Rcblx0XHRcdG9mZnNldCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0b2Zmc2V0ID0gdGhpcy5vZmZzZXQoKTtcblxuXHRcdFx0Ly8gQWNjb3VudCBmb3IgdGhlICpyZWFsKiBvZmZzZXQgcGFyZW50LCB3aGljaCBjYW4gYmUgdGhlIGRvY3VtZW50IG9yIGl0cyByb290IGVsZW1lbnRcblx0XHRcdC8vIHdoZW4gYSBzdGF0aWNhbGx5IHBvc2l0aW9uZWQgZWxlbWVudCBpcyBpZGVudGlmaWVkXG5cdFx0XHRkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cdFx0XHRvZmZzZXRQYXJlbnQgPSBlbGVtLm9mZnNldFBhcmVudCB8fCBkb2MuZG9jdW1lbnRFbGVtZW50O1xuXHRcdFx0d2hpbGUgKCBvZmZzZXRQYXJlbnQgJiZcblx0XHRcdFx0KCBvZmZzZXRQYXJlbnQgPT09IGRvYy5ib2R5IHx8IG9mZnNldFBhcmVudCA9PT0gZG9jLmRvY3VtZW50RWxlbWVudCApICYmXG5cdFx0XHRcdGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cblx0XHRcdFx0b2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIG9mZnNldFBhcmVudCAmJiBvZmZzZXRQYXJlbnQgIT09IGVsZW0gJiYgb2Zmc2V0UGFyZW50Lm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdC8vIEluY29ycG9yYXRlIGJvcmRlcnMgaW50byBpdHMgb2Zmc2V0LCBzaW5jZSB0aGV5IGFyZSBvdXRzaWRlIGl0cyBjb250ZW50IG9yaWdpblxuXHRcdFx0XHRwYXJlbnRPZmZzZXQgPSBqUXVlcnkoIG9mZnNldFBhcmVudCApLm9mZnNldCgpO1xuXHRcdFx0XHRwYXJlbnRPZmZzZXQudG9wICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJib3JkZXJUb3BXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHRcdHBhcmVudE9mZnNldC5sZWZ0ICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJib3JkZXJMZWZ0V2lkdGhcIiwgdHJ1ZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFN1YnRyYWN0IHBhcmVudCBvZmZzZXRzIGFuZCBlbGVtZW50IG1hcmdpbnNcblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiBvZmZzZXQudG9wIC0gcGFyZW50T2Zmc2V0LnRvcCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luVG9wXCIsIHRydWUgKSxcblx0XHRcdGxlZnQ6IG9mZnNldC5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnQgLSBqUXVlcnkuY3NzKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiwgdHJ1ZSApXG5cdFx0fTtcblx0fSxcblxuXHQvLyBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiBkb2N1bWVudEVsZW1lbnQgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcblx0Ly8gMSkgRm9yIHRoZSBlbGVtZW50IGluc2lkZSB0aGUgaWZyYW1lIHdpdGhvdXQgb2Zmc2V0UGFyZW50LCB0aGlzIG1ldGhvZCB3aWxsIHJldHVyblxuXHQvLyAgICBkb2N1bWVudEVsZW1lbnQgb2YgdGhlIHBhcmVudCB3aW5kb3dcblx0Ly8gMikgRm9yIHRoZSBoaWRkZW4gb3IgZGV0YWNoZWQgZWxlbWVudFxuXHQvLyAzKSBGb3IgYm9keSBvciBodG1sIGVsZW1lbnQsIGkuZS4gaW4gY2FzZSBvZiB0aGUgaHRtbCBub2RlIC0gaXQgd2lsbCByZXR1cm4gaXRzZWxmXG5cdC8vXG5cdC8vIGJ1dCB0aG9zZSBleGNlcHRpb25zIHdlcmUgbmV2ZXIgcHJlc2VudGVkIGFzIGEgcmVhbCBsaWZlIHVzZS1jYXNlc1xuXHQvLyBhbmQgbWlnaHQgYmUgY29uc2lkZXJlZCBhcyBtb3JlIHByZWZlcmFibGUgcmVzdWx0cy5cblx0Ly9cblx0Ly8gVGhpcyBsb2dpYywgaG93ZXZlciwgaXMgbm90IGd1YXJhbnRlZWQgYW5kIGNhbiBjaGFuZ2UgYXQgYW55IHBvaW50IGluIHRoZSBmdXR1cmVcblx0b2Zmc2V0UGFyZW50OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50O1xuXG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJiBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwicG9zaXRpb25cIiApID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50RWxlbWVudDtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNjcm9sbFRvcCBtZXRob2RzXG5qUXVlcnkuZWFjaCggeyBzY3JvbGxMZWZ0OiBcInBhZ2VYT2Zmc2V0XCIsIHNjcm9sbFRvcDogXCJwYWdlWU9mZnNldFwiIH0sIGZ1bmN0aW9uKCBtZXRob2QsIHByb3AgKSB7XG5cdHZhciB0b3AgPSBcInBhZ2VZT2Zmc2V0XCIgPT09IHByb3A7XG5cblx0alF1ZXJ5LmZuWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG1ldGhvZCwgdmFsICkge1xuXG5cdFx0XHQvLyBDb2FsZXNjZSBkb2N1bWVudHMgYW5kIHdpbmRvd3Ncblx0XHRcdHZhciB3aW47XG5cdFx0XHRpZiAoIGlzV2luZG93KCBlbGVtICkgKSB7XG5cdFx0XHRcdHdpbiA9IGVsZW07XG5cdFx0XHR9IGVsc2UgaWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR3aW4gPSBlbGVtLmRlZmF1bHRWaWV3O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gd2luID8gd2luWyBwcm9wIF0gOiBlbGVtWyBtZXRob2QgXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB3aW4gKSB7XG5cdFx0XHRcdHdpbi5zY3JvbGxUbyhcblx0XHRcdFx0XHQhdG9wID8gdmFsIDogd2luLnBhZ2VYT2Zmc2V0LFxuXHRcdFx0XHRcdHRvcCA/IHZhbCA6IHdpbi5wYWdlWU9mZnNldFxuXHRcdFx0XHQpO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtWyBtZXRob2QgXSA9IHZhbDtcblx0XHRcdH1cblx0XHR9LCBtZXRob2QsIHZhbCwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9O1xufSApO1xuXG4vLyBTdXBwb3J0OiBTYWZhcmkgPD03IC0gOS4xLCBDaHJvbWUgPD0zNyAtIDQ5XG4vLyBBZGQgdGhlIHRvcC9sZWZ0IGNzc0hvb2tzIHVzaW5nIGpRdWVyeS5mbi5wb3NpdGlvblxuLy8gV2Via2l0IGJ1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MDg0XG4vLyBCbGluayBidWc6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTU4OTM0N1xuLy8gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHBlcmNlbnQgd2hlbiBzcGVjaWZpZWQgZm9yIHRvcC9sZWZ0L2JvdHRvbS9yaWdodDtcbi8vIHJhdGhlciB0aGFuIG1ha2UgdGhlIGNzcyBtb2R1bGUgZGVwZW5kIG9uIHRoZSBvZmZzZXQgbW9kdWxlLCBqdXN0IGNoZWNrIGZvciBpdCBoZXJlXG5qUXVlcnkuZWFjaCggWyBcInRvcFwiLCBcImxlZnRcIiBdLCBmdW5jdGlvbiggaSwgcHJvcCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucGl4ZWxQb3NpdGlvbixcblx0XHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0XHRjb21wdXRlZCA9IGN1ckNTUyggZWxlbSwgcHJvcCApO1xuXG5cdFx0XHRcdC8vIElmIGN1ckNTUyByZXR1cm5zIHBlcmNlbnRhZ2UsIGZhbGxiYWNrIHRvIG9mZnNldFxuXHRcdFx0XHRyZXR1cm4gcm51bW5vbnB4LnRlc3QoIGNvbXB1dGVkICkgP1xuXHRcdFx0XHRcdGpRdWVyeSggZWxlbSApLnBvc2l0aW9uKClbIHByb3AgXSArIFwicHhcIiA6XG5cdFx0XHRcdFx0Y29tcHV0ZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xufSApO1xuXG5cbi8vIENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgaGVpZ2h0LCB3aWR0aCwgb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGggbWV0aG9kc1xualF1ZXJ5LmVhY2goIHsgSGVpZ2h0OiBcImhlaWdodFwiLCBXaWR0aDogXCJ3aWR0aFwiIH0sIGZ1bmN0aW9uKCBuYW1lLCB0eXBlICkge1xuXHRqUXVlcnkuZWFjaCggeyBwYWRkaW5nOiBcImlubmVyXCIgKyBuYW1lLCBjb250ZW50OiB0eXBlLCBcIlwiOiBcIm91dGVyXCIgKyBuYW1lIH0sXG5cdFx0ZnVuY3Rpb24oIGRlZmF1bHRFeHRyYSwgZnVuY05hbWUgKSB7XG5cblx0XHQvLyBNYXJnaW4gaXMgb25seSBmb3Igb3V0ZXJIZWlnaHQsIG91dGVyV2lkdGhcblx0XHRqUXVlcnkuZm5bIGZ1bmNOYW1lIF0gPSBmdW5jdGlvbiggbWFyZ2luLCB2YWx1ZSApIHtcblx0XHRcdHZhciBjaGFpbmFibGUgPSBhcmd1bWVudHMubGVuZ3RoICYmICggZGVmYXVsdEV4dHJhIHx8IHR5cGVvZiBtYXJnaW4gIT09IFwiYm9vbGVhblwiICksXG5cdFx0XHRcdGV4dHJhID0gZGVmYXVsdEV4dHJhIHx8ICggbWFyZ2luID09PSB0cnVlIHx8IHZhbHVlID09PSB0cnVlID8gXCJtYXJnaW5cIiA6IFwiYm9yZGVyXCIgKTtcblxuXHRcdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgZG9jO1xuXG5cdFx0XHRcdGlmICggaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0XHRcdC8vICQoIHdpbmRvdyApLm91dGVyV2lkdGgvSGVpZ2h0IHJldHVybiB3L2ggaW5jbHVkaW5nIHNjcm9sbGJhcnMgKGdoLTE3MjkpXG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmNOYW1lLmluZGV4T2YoIFwib3V0ZXJcIiApID09PSAwID9cblx0XHRcdFx0XHRcdGVsZW1bIFwiaW5uZXJcIiArIG5hbWUgXSA6XG5cdFx0XHRcdFx0XHRlbGVtLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsgXCJjbGllbnRcIiArIG5hbWUgXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEdldCBkb2N1bWVudCB3aWR0aCBvciBoZWlnaHRcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdGRvYyA9IGVsZW0uZG9jdW1lbnRFbGVtZW50O1xuXG5cdFx0XHRcdFx0Ly8gRWl0aGVyIHNjcm9sbFtXaWR0aC9IZWlnaHRdIG9yIG9mZnNldFtXaWR0aC9IZWlnaHRdIG9yIGNsaWVudFtXaWR0aC9IZWlnaHRdLFxuXHRcdFx0XHRcdC8vIHdoaWNoZXZlciBpcyBncmVhdGVzdFxuXHRcdFx0XHRcdHJldHVybiBNYXRoLm1heChcblx0XHRcdFx0XHRcdGVsZW0uYm9keVsgXCJzY3JvbGxcIiArIG5hbWUgXSwgZG9jWyBcInNjcm9sbFwiICsgbmFtZSBdLFxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcIm9mZnNldFwiICsgbmFtZSBdLCBkb2NbIFwib2Zmc2V0XCIgKyBuYW1lIF0sXG5cdFx0XHRcdFx0XHRkb2NbIFwiY2xpZW50XCIgKyBuYW1lIF1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xuXG5cdFx0XHRcdFx0Ly8gR2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudCwgcmVxdWVzdGluZyBidXQgbm90IGZvcmNpbmcgcGFyc2VGbG9hdFxuXHRcdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUsIGV4dHJhICkgOlxuXG5cdFx0XHRcdFx0Ly8gU2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudFxuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgdHlwZSwgdmFsdWUsIGV4dHJhICk7XG5cdFx0XHR9LCB0eXBlLCBjaGFpbmFibGUgPyBtYXJnaW4gOiB1bmRlZmluZWQsIGNoYWluYWJsZSApO1xuXHRcdH07XG5cdH0gKTtcbn0gKTtcblxuXG5qUXVlcnkuZWFjaCggKCBcImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCByZXNpemUgc2Nyb2xsIGNsaWNrIGRibGNsaWNrIFwiICtcblx0XCJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBcIiArXG5cdFwiY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBjb250ZXh0bWVudVwiICkuc3BsaXQoIFwiIFwiICksXG5cdGZ1bmN0aW9uKCBpLCBuYW1lICkge1xuXG5cdC8vIEhhbmRsZSBldmVudCBiaW5kaW5nXG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/XG5cdFx0XHR0aGlzLm9uKCBuYW1lLCBudWxsLCBkYXRhLCBmbiApIDpcblx0XHRcdHRoaXMudHJpZ2dlciggbmFtZSApO1xuXHR9O1xufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGhvdmVyOiBmdW5jdGlvbiggZm5PdmVyLCBmbk91dCApIHtcblx0XHRyZXR1cm4gdGhpcy5tb3VzZWVudGVyKCBmbk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBmbk92ZXIgKTtcblx0fVxufSApO1xuXG5cblxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0YmluZDogZnVuY3Rpb24oIHR5cGVzLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIG51bGwsIGRhdGEsIGZuICk7XG5cdH0sXG5cdHVuYmluZDogZnVuY3Rpb24oIHR5cGVzLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vZmYoIHR5cGVzLCBudWxsLCBmbiApO1xuXHR9LFxuXG5cdGRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuXHR9LFxuXHR1bmRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBmbiApIHtcblxuXHRcdC8vICggbmFtZXNwYWNlICkgb3IgKCBzZWxlY3RvciwgdHlwZXMgWywgZm5dIClcblx0XHRyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/XG5cdFx0XHR0aGlzLm9mZiggc2VsZWN0b3IsIFwiKipcIiApIDpcblx0XHRcdHRoaXMub2ZmKCB0eXBlcywgc2VsZWN0b3IgfHwgXCIqKlwiLCBmbiApO1xuXHR9XG59ICk7XG5cbi8vIEJpbmQgYSBmdW5jdGlvbiB0byBhIGNvbnRleHQsIG9wdGlvbmFsbHkgcGFydGlhbGx5IGFwcGx5aW5nIGFueVxuLy8gYXJndW1lbnRzLlxuLy8galF1ZXJ5LnByb3h5IGlzIGRlcHJlY2F0ZWQgdG8gcHJvbW90ZSBzdGFuZGFyZHMgKHNwZWNpZmljYWxseSBGdW5jdGlvbiNiaW5kKVxuLy8gSG93ZXZlciwgaXQgaXMgbm90IHNsYXRlZCBmb3IgcmVtb3ZhbCBhbnkgdGltZSBzb29uXG5qUXVlcnkucHJveHkgPSBmdW5jdGlvbiggZm4sIGNvbnRleHQgKSB7XG5cdHZhciB0bXAsIGFyZ3MsIHByb3h5O1xuXG5cdGlmICggdHlwZW9mIGNvbnRleHQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0dG1wID0gZm5bIGNvbnRleHQgXTtcblx0XHRjb250ZXh0ID0gZm47XG5cdFx0Zm4gPSB0bXA7XG5cdH1cblxuXHQvLyBRdWljayBjaGVjayB0byBkZXRlcm1pbmUgaWYgdGFyZ2V0IGlzIGNhbGxhYmxlLCBpbiB0aGUgc3BlY1xuXHQvLyB0aGlzIHRocm93cyBhIFR5cGVFcnJvciwgYnV0IHdlIHdpbGwganVzdCByZXR1cm4gdW5kZWZpbmVkLlxuXHRpZiAoICFpc0Z1bmN0aW9uKCBmbiApICkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBTaW11bGF0ZWQgYmluZFxuXHRhcmdzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzLCAyICk7XG5cdHByb3h5ID0gZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGZuLmFwcGx5KCBjb250ZXh0IHx8IHRoaXMsIGFyZ3MuY29uY2F0KCBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSApICk7XG5cdH07XG5cblx0Ly8gU2V0IHRoZSBndWlkIG9mIHVuaXF1ZSBoYW5kbGVyIHRvIHRoZSBzYW1lIG9mIG9yaWdpbmFsIGhhbmRsZXIsIHNvIGl0IGNhbiBiZSByZW1vdmVkXG5cdHByb3h5Lmd1aWQgPSBmbi5ndWlkID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrO1xuXG5cdHJldHVybiBwcm94eTtcbn07XG5cbmpRdWVyeS5ob2xkUmVhZHkgPSBmdW5jdGlvbiggaG9sZCApIHtcblx0aWYgKCBob2xkICkge1xuXHRcdGpRdWVyeS5yZWFkeVdhaXQrKztcblx0fSBlbHNlIHtcblx0XHRqUXVlcnkucmVhZHkoIHRydWUgKTtcblx0fVxufTtcbmpRdWVyeS5pc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbmpRdWVyeS5wYXJzZUpTT04gPSBKU09OLnBhcnNlO1xualF1ZXJ5Lm5vZGVOYW1lID0gbm9kZU5hbWU7XG5qUXVlcnkuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5qUXVlcnkuaXNXaW5kb3cgPSBpc1dpbmRvdztcbmpRdWVyeS5jYW1lbENhc2UgPSBjYW1lbENhc2U7XG5qUXVlcnkudHlwZSA9IHRvVHlwZTtcblxualF1ZXJ5Lm5vdyA9IERhdGUubm93O1xuXG5qUXVlcnkuaXNOdW1lcmljID0gZnVuY3Rpb24oIG9iaiApIHtcblxuXHQvLyBBcyBvZiBqUXVlcnkgMy4wLCBpc051bWVyaWMgaXMgbGltaXRlZCB0b1xuXHQvLyBzdHJpbmdzIGFuZCBudW1iZXJzIChwcmltaXRpdmVzIG9yIG9iamVjdHMpXG5cdC8vIHRoYXQgY2FuIGJlIGNvZXJjZWQgdG8gZmluaXRlIG51bWJlcnMgKGdoLTI2NjIpXG5cdHZhciB0eXBlID0galF1ZXJ5LnR5cGUoIG9iaiApO1xuXHRyZXR1cm4gKCB0eXBlID09PSBcIm51bWJlclwiIHx8IHR5cGUgPT09IFwic3RyaW5nXCIgKSAmJlxuXG5cdFx0Ly8gcGFyc2VGbG9hdCBOYU5zIG51bWVyaWMtY2FzdCBmYWxzZSBwb3NpdGl2ZXMgKFwiXCIpXG5cdFx0Ly8gLi4uYnV0IG1pc2ludGVycHJldHMgbGVhZGluZy1udW1iZXIgc3RyaW5ncywgcGFydGljdWxhcmx5IGhleCBsaXRlcmFscyAoXCIweC4uLlwiKVxuXHRcdC8vIHN1YnRyYWN0aW9uIGZvcmNlcyBpbmZpbml0aWVzIHRvIE5hTlxuXHRcdCFpc05hTiggb2JqIC0gcGFyc2VGbG9hdCggb2JqICkgKTtcbn07XG5cblxuXG5cbi8vIFJlZ2lzdGVyIGFzIGEgbmFtZWQgQU1EIG1vZHVsZSwgc2luY2UgalF1ZXJ5IGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aCBvdGhlclxuLy8gZmlsZXMgdGhhdCBtYXkgdXNlIGRlZmluZSwgYnV0IG5vdCB2aWEgYSBwcm9wZXIgY29uY2F0ZW5hdGlvbiBzY3JpcHQgdGhhdFxuLy8gdW5kZXJzdGFuZHMgYW5vbnltb3VzIEFNRCBtb2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5kIG1vc3Qgcm9idXN0XG4vLyB3YXkgdG8gcmVnaXN0ZXIuIExvd2VyY2FzZSBqcXVlcnkgaXMgdXNlZCBiZWNhdXNlIEFNRCBtb2R1bGUgbmFtZXMgYXJlXG4vLyBkZXJpdmVkIGZyb20gZmlsZSBuYW1lcywgYW5kIGpRdWVyeSBpcyBub3JtYWxseSBkZWxpdmVyZWQgaW4gYSBsb3dlcmNhc2Vcbi8vIGZpbGUgbmFtZS4gRG8gdGhpcyBhZnRlciBjcmVhdGluZyB0aGUgZ2xvYmFsIHNvIHRoYXQgaWYgYW4gQU1EIG1vZHVsZSB3YW50c1xuLy8gdG8gY2FsbCBub0NvbmZsaWN0IHRvIGhpZGUgdGhpcyB2ZXJzaW9uIG9mIGpRdWVyeSwgaXQgd2lsbCB3b3JrLlxuXG4vLyBOb3RlIHRoYXQgZm9yIG1heGltdW0gcG9ydGFiaWxpdHksIGxpYnJhcmllcyB0aGF0IGFyZSBub3QgalF1ZXJ5IHNob3VsZFxuLy8gZGVjbGFyZSB0aGVtc2VsdmVzIGFzIGFub255bW91cyBtb2R1bGVzLCBhbmQgYXZvaWQgc2V0dGluZyBhIGdsb2JhbCBpZiBhblxuLy8gQU1EIGxvYWRlciBpcyBwcmVzZW50LiBqUXVlcnkgaXMgYSBzcGVjaWFsIGNhc2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcmJ1cmtlL3JlcXVpcmVqcy93aWtpL1VwZGF0aW5nLWV4aXN0aW5nLWxpYnJhcmllcyN3aWtpLWFub25cblxuaWYgKCB0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCApIHtcblx0ZGVmaW5lKCBcImpxdWVyeVwiLCBbXSwgZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGpRdWVyeTtcblx0fSApO1xufVxuXG5cblxuXG52YXJcblxuXHQvLyBNYXAgb3ZlciBqUXVlcnkgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0X2pRdWVyeSA9IHdpbmRvdy5qUXVlcnksXG5cblx0Ly8gTWFwIG92ZXIgdGhlICQgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0XyQgPSB3aW5kb3cuJDtcblxualF1ZXJ5Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiggZGVlcCApIHtcblx0aWYgKCB3aW5kb3cuJCA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy4kID0gXyQ7XG5cdH1cblxuXHRpZiAoIGRlZXAgJiYgd2luZG93LmpRdWVyeSA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy5qUXVlcnkgPSBfalF1ZXJ5O1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeTtcbn07XG5cbi8vIEV4cG9zZSBqUXVlcnkgYW5kICQgaWRlbnRpZmllcnMsIGV2ZW4gaW4gQU1EXG4vLyAoIzcxMDIjY29tbWVudDoxMCwgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvcHVsbC81NTcpXG4vLyBhbmQgQ29tbW9uSlMgZm9yIGJyb3dzZXIgZW11bGF0b3JzICgjMTM1NjYpXG5pZiAoICFub0dsb2JhbCApIHtcblx0d2luZG93LmpRdWVyeSA9IHdpbmRvdy4kID0galF1ZXJ5O1xufVxuXG5cblxuXG5yZXR1cm4galF1ZXJ5O1xufSApO1xuIiwiLyohXG4gKiBKYXZhU2NyaXB0IENvb2tpZSB2Mi4yLjFcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9qcy1jb29raWUvanMtY29va2llXG4gKlxuICogQ29weXJpZ2h0IDIwMDYsIDIwMTUgS2xhdXMgSGFydGwgJiBGYWduZXIgQnJhY2tcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG47KGZ1bmN0aW9uIChmYWN0b3J5KSB7XG5cdHZhciByZWdpc3RlcmVkSW5Nb2R1bGVMb2FkZXI7XG5cdGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcblx0XHRkZWZpbmUoZmFjdG9yeSk7XG5cdFx0cmVnaXN0ZXJlZEluTW9kdWxlTG9hZGVyID0gdHJ1ZTtcblx0fVxuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdFx0cmVnaXN0ZXJlZEluTW9kdWxlTG9hZGVyID0gdHJ1ZTtcblx0fVxuXHRpZiAoIXJlZ2lzdGVyZWRJbk1vZHVsZUxvYWRlcikge1xuXHRcdHZhciBPbGRDb29raWVzID0gd2luZG93LkNvb2tpZXM7XG5cdFx0dmFyIGFwaSA9IHdpbmRvdy5Db29raWVzID0gZmFjdG9yeSgpO1xuXHRcdGFwaS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0d2luZG93LkNvb2tpZXMgPSBPbGRDb29raWVzO1xuXHRcdFx0cmV0dXJuIGFwaTtcblx0XHR9O1xuXHR9XG59KGZ1bmN0aW9uICgpIHtcblx0ZnVuY3Rpb24gZXh0ZW5kICgpIHtcblx0XHR2YXIgaSA9IDA7XG5cdFx0dmFyIHJlc3VsdCA9IHt9O1xuXHRcdGZvciAoOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXR0cmlidXRlcyA9IGFyZ3VtZW50c1sgaSBdO1xuXHRcdFx0Zm9yICh2YXIga2V5IGluIGF0dHJpYnV0ZXMpIHtcblx0XHRcdFx0cmVzdWx0W2tleV0gPSBhdHRyaWJ1dGVzW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRmdW5jdGlvbiBkZWNvZGUgKHMpIHtcblx0XHRyZXR1cm4gcy5yZXBsYWNlKC8oJVswLTlBLVpdezJ9KSsvZywgZGVjb2RlVVJJQ29tcG9uZW50KTtcblx0fVxuXG5cdGZ1bmN0aW9uIGluaXQgKGNvbnZlcnRlcikge1xuXHRcdGZ1bmN0aW9uIGFwaSgpIHt9XG5cblx0XHRmdW5jdGlvbiBzZXQgKGtleSwgdmFsdWUsIGF0dHJpYnV0ZXMpIHtcblx0XHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0YXR0cmlidXRlcyA9IGV4dGVuZCh7XG5cdFx0XHRcdHBhdGg6ICcvJ1xuXHRcdFx0fSwgYXBpLmRlZmF1bHRzLCBhdHRyaWJ1dGVzKTtcblxuXHRcdFx0aWYgKHR5cGVvZiBhdHRyaWJ1dGVzLmV4cGlyZXMgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdGF0dHJpYnV0ZXMuZXhwaXJlcyA9IG5ldyBEYXRlKG5ldyBEYXRlKCkgKiAxICsgYXR0cmlidXRlcy5leHBpcmVzICogODY0ZSs1KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gV2UncmUgdXNpbmcgXCJleHBpcmVzXCIgYmVjYXVzZSBcIm1heC1hZ2VcIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IElFXG5cdFx0XHRhdHRyaWJ1dGVzLmV4cGlyZXMgPSBhdHRyaWJ1dGVzLmV4cGlyZXMgPyBhdHRyaWJ1dGVzLmV4cGlyZXMudG9VVENTdHJpbmcoKSA6ICcnO1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR2YXIgcmVzdWx0ID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuXHRcdFx0XHRpZiAoL15bXFx7XFxbXS8udGVzdChyZXN1bHQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSByZXN1bHQ7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHRcdHZhbHVlID0gY29udmVydGVyLndyaXRlID9cblx0XHRcdFx0Y29udmVydGVyLndyaXRlKHZhbHVlLCBrZXkpIDpcblx0XHRcdFx0ZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyh2YWx1ZSkpXG5cdFx0XHRcdFx0LnJlcGxhY2UoLyUoMjN8MjR8MjZ8MkJ8M0F8M0N8M0V8M0R8MkZ8M0Z8NDB8NUJ8NUR8NUV8NjB8N0J8N0R8N0MpL2csIGRlY29kZVVSSUNvbXBvbmVudCk7XG5cblx0XHRcdGtleSA9IGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoa2V5KSlcblx0XHRcdFx0LnJlcGxhY2UoLyUoMjN8MjR8MjZ8MkJ8NUV8NjB8N0MpL2csIGRlY29kZVVSSUNvbXBvbmVudClcblx0XHRcdFx0LnJlcGxhY2UoL1tcXChcXCldL2csIGVzY2FwZSk7XG5cblx0XHRcdHZhciBzdHJpbmdpZmllZEF0dHJpYnV0ZXMgPSAnJztcblx0XHRcdGZvciAodmFyIGF0dHJpYnV0ZU5hbWUgaW4gYXR0cmlidXRlcykge1xuXHRcdFx0XHRpZiAoIWF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0pIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzdHJpbmdpZmllZEF0dHJpYnV0ZXMgKz0gJzsgJyArIGF0dHJpYnV0ZU5hbWU7XG5cdFx0XHRcdGlmIChhdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDb25zaWRlcnMgUkZDIDYyNjUgc2VjdGlvbiA1LjI6XG5cdFx0XHRcdC8vIC4uLlxuXHRcdFx0XHQvLyAzLiAgSWYgdGhlIHJlbWFpbmluZyB1bnBhcnNlZC1hdHRyaWJ1dGVzIGNvbnRhaW5zIGEgJXgzQiAoXCI7XCIpXG5cdFx0XHRcdC8vICAgICBjaGFyYWN0ZXI6XG5cdFx0XHRcdC8vIENvbnN1bWUgdGhlIGNoYXJhY3RlcnMgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgdXAgdG8sXG5cdFx0XHRcdC8vIG5vdCBpbmNsdWRpbmcsIHRoZSBmaXJzdCAleDNCIChcIjtcIikgY2hhcmFjdGVyLlxuXHRcdFx0XHQvLyAuLi5cblx0XHRcdFx0c3RyaW5naWZpZWRBdHRyaWJ1dGVzICs9ICc9JyArIGF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0uc3BsaXQoJzsnKVswXTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIChkb2N1bWVudC5jb29raWUgPSBrZXkgKyAnPScgKyB2YWx1ZSArIHN0cmluZ2lmaWVkQXR0cmlidXRlcyk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZ2V0IChrZXksIGpzb24pIHtcblx0XHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGphciA9IHt9O1xuXHRcdFx0Ly8gVG8gcHJldmVudCB0aGUgZm9yIGxvb3AgaW4gdGhlIGZpcnN0IHBsYWNlIGFzc2lnbiBhbiBlbXB0eSBhcnJheVxuXHRcdFx0Ly8gaW4gY2FzZSB0aGVyZSBhcmUgbm8gY29va2llcyBhdCBhbGwuXG5cdFx0XHR2YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZSA/IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOyAnKSA6IFtdO1xuXHRcdFx0dmFyIGkgPSAwO1xuXG5cdFx0XHRmb3IgKDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFyIHBhcnRzID0gY29va2llc1tpXS5zcGxpdCgnPScpO1xuXHRcdFx0XHR2YXIgY29va2llID0gcGFydHMuc2xpY2UoMSkuam9pbignPScpO1xuXG5cdFx0XHRcdGlmICghanNvbiAmJiBjb29raWUuY2hhckF0KDApID09PSAnXCInKSB7XG5cdFx0XHRcdFx0Y29va2llID0gY29va2llLnNsaWNlKDEsIC0xKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0dmFyIG5hbWUgPSBkZWNvZGUocGFydHNbMF0pO1xuXHRcdFx0XHRcdGNvb2tpZSA9IChjb252ZXJ0ZXIucmVhZCB8fCBjb252ZXJ0ZXIpKGNvb2tpZSwgbmFtZSkgfHxcblx0XHRcdFx0XHRcdGRlY29kZShjb29raWUpO1xuXG5cdFx0XHRcdFx0aWYgKGpzb24pIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGNvb2tpZSA9IEpTT04ucGFyc2UoY29va2llKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHt9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0amFyW25hbWVdID0gY29va2llO1xuXG5cdFx0XHRcdFx0aWYgKGtleSA9PT0gbmFtZSkge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIChlKSB7fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4ga2V5ID8gamFyW2tleV0gOiBqYXI7XG5cdFx0fVxuXG5cdFx0YXBpLnNldCA9IHNldDtcblx0XHRhcGkuZ2V0ID0gZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0cmV0dXJuIGdldChrZXksIGZhbHNlIC8qIHJlYWQgYXMgcmF3ICovKTtcblx0XHR9O1xuXHRcdGFwaS5nZXRKU09OID0gZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0cmV0dXJuIGdldChrZXksIHRydWUgLyogcmVhZCBhcyBqc29uICovKTtcblx0XHR9O1xuXHRcdGFwaS5yZW1vdmUgPSBmdW5jdGlvbiAoa2V5LCBhdHRyaWJ1dGVzKSB7XG5cdFx0XHRzZXQoa2V5LCAnJywgZXh0ZW5kKGF0dHJpYnV0ZXMsIHtcblx0XHRcdFx0ZXhwaXJlczogLTFcblx0XHRcdH0pKTtcblx0XHR9O1xuXG5cdFx0YXBpLmRlZmF1bHRzID0ge307XG5cblx0XHRhcGkud2l0aENvbnZlcnRlciA9IGluaXQ7XG5cblx0XHRyZXR1cm4gYXBpO1xuXHR9XG5cblx0cmV0dXJuIGluaXQoZnVuY3Rpb24gKCkge30pO1xufSkpO1xuIiwiLyohIE1hZ25pZmljIFBvcHVwIC0gdjEuMS4wIC0gMjAxNi0wMi0yMFxuKiBodHRwOi8vZGltc2VtZW5vdi5jb20vcGx1Z2lucy9tYWduaWZpYy1wb3B1cC9cbiogQ29weXJpZ2h0IChjKSAyMDE2IERtaXRyeSBTZW1lbm92OyAqL1xuOyhmdW5jdGlvbiAoZmFjdG9yeSkgeyBcbmlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHsgXG4gLy8gQU1ELiBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgbW9kdWxlLiBcbiBkZWZpbmUoWydqcXVlcnknXSwgZmFjdG9yeSk7IFxuIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7IFxuIC8vIE5vZGUvQ29tbW9uSlMgXG4gZmFjdG9yeShyZXF1aXJlKCdqcXVlcnknKSk7IFxuIH0gZWxzZSB7IFxuIC8vIEJyb3dzZXIgZ2xvYmFscyBcbiBmYWN0b3J5KHdpbmRvdy5qUXVlcnkgfHwgd2luZG93LlplcHRvKTsgXG4gfSBcbiB9KGZ1bmN0aW9uKCQpIHsgXG5cbi8qPj5jb3JlKi9cbi8qKlxuICogXG4gKiBNYWduaWZpYyBQb3B1cCBDb3JlIEpTIGZpbGVcbiAqIFxuICovXG5cblxuLyoqXG4gKiBQcml2YXRlIHN0YXRpYyBjb25zdGFudHNcbiAqL1xudmFyIENMT1NFX0VWRU5UID0gJ0Nsb3NlJyxcblx0QkVGT1JFX0NMT1NFX0VWRU5UID0gJ0JlZm9yZUNsb3NlJyxcblx0QUZURVJfQ0xPU0VfRVZFTlQgPSAnQWZ0ZXJDbG9zZScsXG5cdEJFRk9SRV9BUFBFTkRfRVZFTlQgPSAnQmVmb3JlQXBwZW5kJyxcblx0TUFSS1VQX1BBUlNFX0VWRU5UID0gJ01hcmt1cFBhcnNlJyxcblx0T1BFTl9FVkVOVCA9ICdPcGVuJyxcblx0Q0hBTkdFX0VWRU5UID0gJ0NoYW5nZScsXG5cdE5TID0gJ21mcCcsXG5cdEVWRU5UX05TID0gJy4nICsgTlMsXG5cdFJFQURZX0NMQVNTID0gJ21mcC1yZWFkeScsXG5cdFJFTU9WSU5HX0NMQVNTID0gJ21mcC1yZW1vdmluZycsXG5cdFBSRVZFTlRfQ0xPU0VfQ0xBU1MgPSAnbWZwLXByZXZlbnQtY2xvc2UnO1xuXG5cbi8qKlxuICogUHJpdmF0ZSB2YXJzIFxuICovXG4vKmpzaGludCAtVzA3OSAqL1xudmFyIG1mcCwgLy8gQXMgd2UgaGF2ZSBvbmx5IG9uZSBpbnN0YW5jZSBvZiBNYWduaWZpY1BvcHVwIG9iamVjdCwgd2UgZGVmaW5lIGl0IGxvY2FsbHkgdG8gbm90IHRvIHVzZSAndGhpcydcblx0TWFnbmlmaWNQb3B1cCA9IGZ1bmN0aW9uKCl7fSxcblx0X2lzSlEgPSAhISh3aW5kb3cualF1ZXJ5KSxcblx0X3ByZXZTdGF0dXMsXG5cdF93aW5kb3cgPSAkKHdpbmRvdyksXG5cdF9kb2N1bWVudCxcblx0X3ByZXZDb250ZW50VHlwZSxcblx0X3dyYXBDbGFzc2VzLFxuXHRfY3VyclBvcHVwVHlwZTtcblxuXG4vKipcbiAqIFByaXZhdGUgZnVuY3Rpb25zXG4gKi9cbnZhciBfbWZwT24gPSBmdW5jdGlvbihuYW1lLCBmKSB7XG5cdFx0bWZwLmV2Lm9uKE5TICsgbmFtZSArIEVWRU5UX05TLCBmKTtcblx0fSxcblx0X2dldEVsID0gZnVuY3Rpb24oY2xhc3NOYW1lLCBhcHBlbmRUbywgaHRtbCwgcmF3KSB7XG5cdFx0dmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdFx0ZWwuY2xhc3NOYW1lID0gJ21mcC0nK2NsYXNzTmFtZTtcblx0XHRpZihodG1sKSB7XG5cdFx0XHRlbC5pbm5lckhUTUwgPSBodG1sO1xuXHRcdH1cblx0XHRpZighcmF3KSB7XG5cdFx0XHRlbCA9ICQoZWwpO1xuXHRcdFx0aWYoYXBwZW5kVG8pIHtcblx0XHRcdFx0ZWwuYXBwZW5kVG8oYXBwZW5kVG8pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZihhcHBlbmRUbykge1xuXHRcdFx0YXBwZW5kVG8uYXBwZW5kQ2hpbGQoZWwpO1xuXHRcdH1cblx0XHRyZXR1cm4gZWw7XG5cdH0sXG5cdF9tZnBUcmlnZ2VyID0gZnVuY3Rpb24oZSwgZGF0YSkge1xuXHRcdG1mcC5ldi50cmlnZ2VySGFuZGxlcihOUyArIGUsIGRhdGEpO1xuXG5cdFx0aWYobWZwLnN0LmNhbGxiYWNrcykge1xuXHRcdFx0Ly8gY29udmVydHMgXCJtZnBFdmVudE5hbWVcIiB0byBcImV2ZW50TmFtZVwiIGNhbGxiYWNrIGFuZCB0cmlnZ2VycyBpdCBpZiBpdCdzIHByZXNlbnRcblx0XHRcdGUgPSBlLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgZS5zbGljZSgxKTtcblx0XHRcdGlmKG1mcC5zdC5jYWxsYmFja3NbZV0pIHtcblx0XHRcdFx0bWZwLnN0LmNhbGxiYWNrc1tlXS5hcHBseShtZnAsICQuaXNBcnJheShkYXRhKSA/IGRhdGEgOiBbZGF0YV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0X2dldENsb3NlQnRuID0gZnVuY3Rpb24odHlwZSkge1xuXHRcdGlmKHR5cGUgIT09IF9jdXJyUG9wdXBUeXBlIHx8ICFtZnAuY3VyclRlbXBsYXRlLmNsb3NlQnRuKSB7XG5cdFx0XHRtZnAuY3VyclRlbXBsYXRlLmNsb3NlQnRuID0gJCggbWZwLnN0LmNsb3NlTWFya3VwLnJlcGxhY2UoJyV0aXRsZSUnLCBtZnAuc3QudENsb3NlICkgKTtcblx0XHRcdF9jdXJyUG9wdXBUeXBlID0gdHlwZTtcblx0XHR9XG5cdFx0cmV0dXJuIG1mcC5jdXJyVGVtcGxhdGUuY2xvc2VCdG47XG5cdH0sXG5cdC8vIEluaXRpYWxpemUgTWFnbmlmaWMgUG9wdXAgb25seSB3aGVuIGNhbGxlZCBhdCBsZWFzdCBvbmNlXG5cdF9jaGVja0luc3RhbmNlID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYoISQubWFnbmlmaWNQb3B1cC5pbnN0YW5jZSkge1xuXHRcdFx0Lypqc2hpbnQgLVcwMjAgKi9cblx0XHRcdG1mcCA9IG5ldyBNYWduaWZpY1BvcHVwKCk7XG5cdFx0XHRtZnAuaW5pdCgpO1xuXHRcdFx0JC5tYWduaWZpY1BvcHVwLmluc3RhbmNlID0gbWZwO1xuXHRcdH1cblx0fSxcblx0Ly8gQ1NTIHRyYW5zaXRpb24gZGV0ZWN0aW9uLCBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzcyNjQ4OTkvZGV0ZWN0LWNzcy10cmFuc2l0aW9ucy11c2luZy1qYXZhc2NyaXB0LWFuZC13aXRob3V0LW1vZGVybml6clxuXHRzdXBwb3J0c1RyYW5zaXRpb25zID0gZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJykuc3R5bGUsIC8vICdzJyBmb3Igc3R5bGUuIGJldHRlciB0byBjcmVhdGUgYW4gZWxlbWVudCBpZiBib2R5IHlldCB0byBleGlzdFxuXHRcdFx0diA9IFsnbXMnLCdPJywnTW96JywnV2Via2l0J107IC8vICd2JyBmb3IgdmVuZG9yXG5cblx0XHRpZiggc1sndHJhbnNpdGlvbiddICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTsgXG5cdFx0fVxuXHRcdFx0XG5cdFx0d2hpbGUoIHYubGVuZ3RoICkge1xuXHRcdFx0aWYoIHYucG9wKCkgKyAnVHJhbnNpdGlvbicgaW4gcyApIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdFx0XHRcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG5cblxuXG4vKipcbiAqIFB1YmxpYyBmdW5jdGlvbnNcbiAqL1xuTWFnbmlmaWNQb3B1cC5wcm90b3R5cGUgPSB7XG5cblx0Y29uc3RydWN0b3I6IE1hZ25pZmljUG9wdXAsXG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIE1hZ25pZmljIFBvcHVwIHBsdWdpbi4gXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkIG9ubHkgb25jZSB3aGVuICQuZm4ubWFnbmlmaWNQb3B1cCBvciAkLm1hZ25pZmljUG9wdXAgaXMgZXhlY3V0ZWRcblx0ICovXG5cdGluaXQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBhcHBWZXJzaW9uID0gbmF2aWdhdG9yLmFwcFZlcnNpb247XG5cdFx0bWZwLmlzTG93SUUgPSBtZnAuaXNJRTggPSBkb2N1bWVudC5hbGwgJiYgIWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXI7XG5cdFx0bWZwLmlzQW5kcm9pZCA9ICgvYW5kcm9pZC9naSkudGVzdChhcHBWZXJzaW9uKTtcblx0XHRtZnAuaXNJT1MgPSAoL2lwaG9uZXxpcGFkfGlwb2QvZ2kpLnRlc3QoYXBwVmVyc2lvbik7XG5cdFx0bWZwLnN1cHBvcnRzVHJhbnNpdGlvbiA9IHN1cHBvcnRzVHJhbnNpdGlvbnMoKTtcblxuXHRcdC8vIFdlIGRpc2FibGUgZml4ZWQgcG9zaXRpb25lZCBsaWdodGJveCBvbiBkZXZpY2VzIHRoYXQgZG9uJ3QgaGFuZGxlIGl0IG5pY2VseS5cblx0XHQvLyBJZiB5b3Uga25vdyBhIGJldHRlciB3YXkgb2YgZGV0ZWN0aW5nIHRoaXMgLSBsZXQgbWUga25vdy5cblx0XHRtZnAucHJvYmFibHlNb2JpbGUgPSAobWZwLmlzQW5kcm9pZCB8fCBtZnAuaXNJT1MgfHwgLyhPcGVyYSBNaW5pKXxLaW5kbGV8d2ViT1N8QmxhY2tCZXJyeXwoT3BlcmEgTW9iaSl8KFdpbmRvd3MgUGhvbmUpfElFTW9iaWxlL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSApO1xuXHRcdF9kb2N1bWVudCA9ICQoZG9jdW1lbnQpO1xuXG5cdFx0bWZwLnBvcHVwc0NhY2hlID0ge307XG5cdH0sXG5cblx0LyoqXG5cdCAqIE9wZW5zIHBvcHVwXG5cdCAqIEBwYXJhbSAgZGF0YSBbZGVzY3JpcHRpb25dXG5cdCAqL1xuXHRvcGVuOiBmdW5jdGlvbihkYXRhKSB7XG5cblx0XHR2YXIgaTtcblxuXHRcdGlmKGRhdGEuaXNPYmogPT09IGZhbHNlKSB7IFxuXHRcdFx0Ly8gY29udmVydCBqUXVlcnkgY29sbGVjdGlvbiB0byBhcnJheSB0byBhdm9pZCBjb25mbGljdHMgbGF0ZXJcblx0XHRcdG1mcC5pdGVtcyA9IGRhdGEuaXRlbXMudG9BcnJheSgpO1xuXG5cdFx0XHRtZnAuaW5kZXggPSAwO1xuXHRcdFx0dmFyIGl0ZW1zID0gZGF0YS5pdGVtcyxcblx0XHRcdFx0aXRlbTtcblx0XHRcdGZvcihpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGl0ZW0gPSBpdGVtc1tpXTtcblx0XHRcdFx0aWYoaXRlbS5wYXJzZWQpIHtcblx0XHRcdFx0XHRpdGVtID0gaXRlbS5lbFswXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZihpdGVtID09PSBkYXRhLmVsWzBdKSB7XG5cdFx0XHRcdFx0bWZwLmluZGV4ID0gaTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtZnAuaXRlbXMgPSAkLmlzQXJyYXkoZGF0YS5pdGVtcykgPyBkYXRhLml0ZW1zIDogW2RhdGEuaXRlbXNdO1xuXHRcdFx0bWZwLmluZGV4ID0gZGF0YS5pbmRleCB8fCAwO1xuXHRcdH1cblxuXHRcdC8vIGlmIHBvcHVwIGlzIGFscmVhZHkgb3BlbmVkIC0gd2UganVzdCB1cGRhdGUgdGhlIGNvbnRlbnRcblx0XHRpZihtZnAuaXNPcGVuKSB7XG5cdFx0XHRtZnAudXBkYXRlSXRlbUhUTUwoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0XG5cdFx0bWZwLnR5cGVzID0gW107IFxuXHRcdF93cmFwQ2xhc3NlcyA9ICcnO1xuXHRcdGlmKGRhdGEubWFpbkVsICYmIGRhdGEubWFpbkVsLmxlbmd0aCkge1xuXHRcdFx0bWZwLmV2ID0gZGF0YS5tYWluRWwuZXEoMCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1mcC5ldiA9IF9kb2N1bWVudDtcblx0XHR9XG5cblx0XHRpZihkYXRhLmtleSkge1xuXHRcdFx0aWYoIW1mcC5wb3B1cHNDYWNoZVtkYXRhLmtleV0pIHtcblx0XHRcdFx0bWZwLnBvcHVwc0NhY2hlW2RhdGEua2V5XSA9IHt9O1xuXHRcdFx0fVxuXHRcdFx0bWZwLmN1cnJUZW1wbGF0ZSA9IG1mcC5wb3B1cHNDYWNoZVtkYXRhLmtleV07XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1mcC5jdXJyVGVtcGxhdGUgPSB7fTtcblx0XHR9XG5cblxuXG5cdFx0bWZwLnN0ID0gJC5leHRlbmQodHJ1ZSwge30sICQubWFnbmlmaWNQb3B1cC5kZWZhdWx0cywgZGF0YSApOyBcblx0XHRtZnAuZml4ZWRDb250ZW50UG9zID0gbWZwLnN0LmZpeGVkQ29udGVudFBvcyA9PT0gJ2F1dG8nID8gIW1mcC5wcm9iYWJseU1vYmlsZSA6IG1mcC5zdC5maXhlZENvbnRlbnRQb3M7XG5cblx0XHRpZihtZnAuc3QubW9kYWwpIHtcblx0XHRcdG1mcC5zdC5jbG9zZU9uQ29udGVudENsaWNrID0gZmFsc2U7XG5cdFx0XHRtZnAuc3QuY2xvc2VPbkJnQ2xpY2sgPSBmYWxzZTtcblx0XHRcdG1mcC5zdC5zaG93Q2xvc2VCdG4gPSBmYWxzZTtcblx0XHRcdG1mcC5zdC5lbmFibGVFc2NhcGVLZXkgPSBmYWxzZTtcblx0XHR9XG5cdFx0XG5cblx0XHQvLyBCdWlsZGluZyBtYXJrdXBcblx0XHQvLyBtYWluIGNvbnRhaW5lcnMgYXJlIGNyZWF0ZWQgb25seSBvbmNlXG5cdFx0aWYoIW1mcC5iZ092ZXJsYXkpIHtcblxuXHRcdFx0Ly8gRGFyayBvdmVybGF5XG5cdFx0XHRtZnAuYmdPdmVybGF5ID0gX2dldEVsKCdiZycpLm9uKCdjbGljaycrRVZFTlRfTlMsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRtZnAuY2xvc2UoKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRtZnAud3JhcCA9IF9nZXRFbCgnd3JhcCcpLmF0dHIoJ3RhYmluZGV4JywgLTEpLm9uKCdjbGljaycrRVZFTlRfTlMsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0aWYobWZwLl9jaGVja0lmQ2xvc2UoZS50YXJnZXQpKSB7XG5cdFx0XHRcdFx0bWZwLmNsb3NlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRtZnAuY29udGFpbmVyID0gX2dldEVsKCdjb250YWluZXInLCBtZnAud3JhcCk7XG5cdFx0fVxuXG5cdFx0bWZwLmNvbnRlbnRDb250YWluZXIgPSBfZ2V0RWwoJ2NvbnRlbnQnKTtcblx0XHRpZihtZnAuc3QucHJlbG9hZGVyKSB7XG5cdFx0XHRtZnAucHJlbG9hZGVyID0gX2dldEVsKCdwcmVsb2FkZXInLCBtZnAuY29udGFpbmVyLCBtZnAuc3QudExvYWRpbmcpO1xuXHRcdH1cblxuXG5cdFx0Ly8gSW5pdGlhbGl6aW5nIG1vZHVsZXNcblx0XHR2YXIgbW9kdWxlcyA9ICQubWFnbmlmaWNQb3B1cC5tb2R1bGVzO1xuXHRcdGZvcihpID0gMDsgaSA8IG1vZHVsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBuID0gbW9kdWxlc1tpXTtcblx0XHRcdG4gPSBuLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbi5zbGljZSgxKTtcblx0XHRcdG1mcFsnaW5pdCcrbl0uY2FsbChtZnApO1xuXHRcdH1cblx0XHRfbWZwVHJpZ2dlcignQmVmb3JlT3BlbicpO1xuXG5cblx0XHRpZihtZnAuc3Quc2hvd0Nsb3NlQnRuKSB7XG5cdFx0XHQvLyBDbG9zZSBidXR0b25cblx0XHRcdGlmKCFtZnAuc3QuY2xvc2VCdG5JbnNpZGUpIHtcblx0XHRcdFx0bWZwLndyYXAuYXBwZW5kKCBfZ2V0Q2xvc2VCdG4oKSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0X21mcE9uKE1BUktVUF9QQVJTRV9FVkVOVCwgZnVuY3Rpb24oZSwgdGVtcGxhdGUsIHZhbHVlcywgaXRlbSkge1xuXHRcdFx0XHRcdHZhbHVlcy5jbG9zZV9yZXBsYWNlV2l0aCA9IF9nZXRDbG9zZUJ0bihpdGVtLnR5cGUpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0X3dyYXBDbGFzc2VzICs9ICcgbWZwLWNsb3NlLWJ0bi1pbic7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYobWZwLnN0LmFsaWduVG9wKSB7XG5cdFx0XHRfd3JhcENsYXNzZXMgKz0gJyBtZnAtYWxpZ24tdG9wJztcblx0XHR9XG5cblx0XG5cblx0XHRpZihtZnAuZml4ZWRDb250ZW50UG9zKSB7XG5cdFx0XHRtZnAud3JhcC5jc3Moe1xuXHRcdFx0XHRvdmVyZmxvdzogbWZwLnN0Lm92ZXJmbG93WSxcblx0XHRcdFx0b3ZlcmZsb3dYOiAnaGlkZGVuJyxcblx0XHRcdFx0b3ZlcmZsb3dZOiBtZnAuc3Qub3ZlcmZsb3dZXG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWZwLndyYXAuY3NzKHsgXG5cdFx0XHRcdHRvcDogX3dpbmRvdy5zY3JvbGxUb3AoKSxcblx0XHRcdFx0cG9zaXRpb246ICdhYnNvbHV0ZSdcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiggbWZwLnN0LmZpeGVkQmdQb3MgPT09IGZhbHNlIHx8IChtZnAuc3QuZml4ZWRCZ1BvcyA9PT0gJ2F1dG8nICYmICFtZnAuZml4ZWRDb250ZW50UG9zKSApIHtcblx0XHRcdG1mcC5iZ092ZXJsYXkuY3NzKHtcblx0XHRcdFx0aGVpZ2h0OiBfZG9jdW1lbnQuaGVpZ2h0KCksXG5cdFx0XHRcdHBvc2l0aW9uOiAnYWJzb2x1dGUnXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRcblxuXHRcdGlmKG1mcC5zdC5lbmFibGVFc2NhcGVLZXkpIHtcblx0XHRcdC8vIENsb3NlIG9uIEVTQyBrZXlcblx0XHRcdF9kb2N1bWVudC5vbigna2V5dXAnICsgRVZFTlRfTlMsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0aWYoZS5rZXlDb2RlID09PSAyNykge1xuXHRcdFx0XHRcdG1mcC5jbG9zZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRfd2luZG93Lm9uKCdyZXNpemUnICsgRVZFTlRfTlMsIGZ1bmN0aW9uKCkge1xuXHRcdFx0bWZwLnVwZGF0ZVNpemUoKTtcblx0XHR9KTtcblxuXG5cdFx0aWYoIW1mcC5zdC5jbG9zZU9uQ29udGVudENsaWNrKSB7XG5cdFx0XHRfd3JhcENsYXNzZXMgKz0gJyBtZnAtYXV0by1jdXJzb3InO1xuXHRcdH1cblx0XHRcblx0XHRpZihfd3JhcENsYXNzZXMpXG5cdFx0XHRtZnAud3JhcC5hZGRDbGFzcyhfd3JhcENsYXNzZXMpO1xuXG5cblx0XHQvLyB0aGlzIHRyaWdnZXJzIHJlY2FsY3VsYXRpb24gb2YgbGF5b3V0LCBzbyB3ZSBnZXQgaXQgb25jZSB0byBub3QgdG8gdHJpZ2dlciB0d2ljZVxuXHRcdHZhciB3aW5kb3dIZWlnaHQgPSBtZnAud0ggPSBfd2luZG93LmhlaWdodCgpO1xuXG5cdFx0XG5cdFx0dmFyIHdpbmRvd1N0eWxlcyA9IHt9O1xuXG5cdFx0aWYoIG1mcC5maXhlZENvbnRlbnRQb3MgKSB7XG4gICAgICAgICAgICBpZihtZnAuX2hhc1Njcm9sbEJhcih3aW5kb3dIZWlnaHQpKXtcbiAgICAgICAgICAgICAgICB2YXIgcyA9IG1mcC5fZ2V0U2Nyb2xsYmFyU2l6ZSgpO1xuICAgICAgICAgICAgICAgIGlmKHMpIHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93U3R5bGVzLm1hcmdpblJpZ2h0ID0gcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuXHRcdGlmKG1mcC5maXhlZENvbnRlbnRQb3MpIHtcblx0XHRcdGlmKCFtZnAuaXNJRTcpIHtcblx0XHRcdFx0d2luZG93U3R5bGVzLm92ZXJmbG93ID0gJ2hpZGRlbic7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBpZTcgZG91YmxlLXNjcm9sbCBidWdcblx0XHRcdFx0JCgnYm9keSwgaHRtbCcpLmNzcygnb3ZlcmZsb3cnLCAnaGlkZGVuJyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0XG5cdFx0XG5cdFx0dmFyIGNsYXNzZXNUb2FkZCA9IG1mcC5zdC5tYWluQ2xhc3M7XG5cdFx0aWYobWZwLmlzSUU3KSB7XG5cdFx0XHRjbGFzc2VzVG9hZGQgKz0gJyBtZnAtaWU3Jztcblx0XHR9XG5cdFx0aWYoY2xhc3Nlc1RvYWRkKSB7XG5cdFx0XHRtZnAuX2FkZENsYXNzVG9NRlAoIGNsYXNzZXNUb2FkZCApO1xuXHRcdH1cblxuXHRcdC8vIGFkZCBjb250ZW50XG5cdFx0bWZwLnVwZGF0ZUl0ZW1IVE1MKCk7XG5cblx0XHRfbWZwVHJpZ2dlcignQnVpbGRDb250cm9scycpO1xuXG5cdFx0Ly8gcmVtb3ZlIHNjcm9sbGJhciwgYWRkIG1hcmdpbiBlLnQuY1xuXHRcdCQoJ2h0bWwnKS5jc3Mod2luZG93U3R5bGVzKTtcblx0XHRcblx0XHQvLyBhZGQgZXZlcnl0aGluZyB0byBET01cblx0XHRtZnAuYmdPdmVybGF5LmFkZChtZnAud3JhcCkucHJlcGVuZFRvKCBtZnAuc3QucHJlcGVuZFRvIHx8ICQoZG9jdW1lbnQuYm9keSkgKTtcblxuXHRcdC8vIFNhdmUgbGFzdCBmb2N1c2VkIGVsZW1lbnRcblx0XHRtZnAuX2xhc3RGb2N1c2VkRWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuXHRcdFxuXHRcdC8vIFdhaXQgZm9yIG5leHQgY3ljbGUgdG8gYWxsb3cgQ1NTIHRyYW5zaXRpb25cblx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXHRcdFx0XG5cdFx0XHRpZihtZnAuY29udGVudCkge1xuXHRcdFx0XHRtZnAuX2FkZENsYXNzVG9NRlAoUkVBRFlfQ0xBU1MpO1xuXHRcdFx0XHRtZnAuX3NldEZvY3VzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBpZiBjb250ZW50IGlzIG5vdCBkZWZpbmVkIChub3QgbG9hZGVkIGUudC5jKSB3ZSBhZGQgY2xhc3Mgb25seSBmb3IgQkdcblx0XHRcdFx0bWZwLmJnT3ZlcmxheS5hZGRDbGFzcyhSRUFEWV9DTEFTUyk7XG5cdFx0XHR9XG5cdFx0XHRcblx0XHRcdC8vIFRyYXAgdGhlIGZvY3VzIGluIHBvcHVwXG5cdFx0XHRfZG9jdW1lbnQub24oJ2ZvY3VzaW4nICsgRVZFTlRfTlMsIG1mcC5fb25Gb2N1c0luKTtcblxuXHRcdH0sIDE2KTtcblxuXHRcdG1mcC5pc09wZW4gPSB0cnVlO1xuXHRcdG1mcC51cGRhdGVTaXplKHdpbmRvd0hlaWdodCk7XG5cdFx0X21mcFRyaWdnZXIoT1BFTl9FVkVOVCk7XG5cblx0XHRyZXR1cm4gZGF0YTtcblx0fSxcblxuXHQvKipcblx0ICogQ2xvc2VzIHRoZSBwb3B1cFxuXHQgKi9cblx0Y2xvc2U6IGZ1bmN0aW9uKCkge1xuXHRcdGlmKCFtZnAuaXNPcGVuKSByZXR1cm47XG5cdFx0X21mcFRyaWdnZXIoQkVGT1JFX0NMT1NFX0VWRU5UKTtcblxuXHRcdG1mcC5pc09wZW4gPSBmYWxzZTtcblx0XHQvLyBmb3IgQ1NTMyBhbmltYXRpb25cblx0XHRpZihtZnAuc3QucmVtb3ZhbERlbGF5ICYmICFtZnAuaXNMb3dJRSAmJiBtZnAuc3VwcG9ydHNUcmFuc2l0aW9uICkgIHtcblx0XHRcdG1mcC5fYWRkQ2xhc3NUb01GUChSRU1PVklOR19DTEFTUyk7XG5cdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRtZnAuX2Nsb3NlKCk7XG5cdFx0XHR9LCBtZnAuc3QucmVtb3ZhbERlbGF5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWZwLl9jbG9zZSgpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogSGVscGVyIGZvciBjbG9zZSgpIGZ1bmN0aW9uXG5cdCAqL1xuXHRfY2xvc2U6IGZ1bmN0aW9uKCkge1xuXHRcdF9tZnBUcmlnZ2VyKENMT1NFX0VWRU5UKTtcblxuXHRcdHZhciBjbGFzc2VzVG9SZW1vdmUgPSBSRU1PVklOR19DTEFTUyArICcgJyArIFJFQURZX0NMQVNTICsgJyAnO1xuXG5cdFx0bWZwLmJnT3ZlcmxheS5kZXRhY2goKTtcblx0XHRtZnAud3JhcC5kZXRhY2goKTtcblx0XHRtZnAuY29udGFpbmVyLmVtcHR5KCk7XG5cblx0XHRpZihtZnAuc3QubWFpbkNsYXNzKSB7XG5cdFx0XHRjbGFzc2VzVG9SZW1vdmUgKz0gbWZwLnN0Lm1haW5DbGFzcyArICcgJztcblx0XHR9XG5cblx0XHRtZnAuX3JlbW92ZUNsYXNzRnJvbU1GUChjbGFzc2VzVG9SZW1vdmUpO1xuXG5cdFx0aWYobWZwLmZpeGVkQ29udGVudFBvcykge1xuXHRcdFx0dmFyIHdpbmRvd1N0eWxlcyA9IHttYXJnaW5SaWdodDogJyd9O1xuXHRcdFx0aWYobWZwLmlzSUU3KSB7XG5cdFx0XHRcdCQoJ2JvZHksIGh0bWwnKS5jc3MoJ292ZXJmbG93JywgJycpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2luZG93U3R5bGVzLm92ZXJmbG93ID0gJyc7XG5cdFx0XHR9XG5cdFx0XHQkKCdodG1sJykuY3NzKHdpbmRvd1N0eWxlcyk7XG5cdFx0fVxuXHRcdFxuXHRcdF9kb2N1bWVudC5vZmYoJ2tleXVwJyArIEVWRU5UX05TICsgJyBmb2N1c2luJyArIEVWRU5UX05TKTtcblx0XHRtZnAuZXYub2ZmKEVWRU5UX05TKTtcblxuXHRcdC8vIGNsZWFuIHVwIERPTSBlbGVtZW50cyB0aGF0IGFyZW4ndCByZW1vdmVkXG5cdFx0bWZwLndyYXAuYXR0cignY2xhc3MnLCAnbWZwLXdyYXAnKS5yZW1vdmVBdHRyKCdzdHlsZScpO1xuXHRcdG1mcC5iZ092ZXJsYXkuYXR0cignY2xhc3MnLCAnbWZwLWJnJyk7XG5cdFx0bWZwLmNvbnRhaW5lci5hdHRyKCdjbGFzcycsICdtZnAtY29udGFpbmVyJyk7XG5cblx0XHQvLyByZW1vdmUgY2xvc2UgYnV0dG9uIGZyb20gdGFyZ2V0IGVsZW1lbnRcblx0XHRpZihtZnAuc3Quc2hvd0Nsb3NlQnRuICYmXG5cdFx0KCFtZnAuc3QuY2xvc2VCdG5JbnNpZGUgfHwgbWZwLmN1cnJUZW1wbGF0ZVttZnAuY3Vyckl0ZW0udHlwZV0gPT09IHRydWUpKSB7XG5cdFx0XHRpZihtZnAuY3VyclRlbXBsYXRlLmNsb3NlQnRuKVxuXHRcdFx0XHRtZnAuY3VyclRlbXBsYXRlLmNsb3NlQnRuLmRldGFjaCgpO1xuXHRcdH1cblxuXG5cdFx0aWYobWZwLnN0LmF1dG9Gb2N1c0xhc3QgJiYgbWZwLl9sYXN0Rm9jdXNlZEVsKSB7XG5cdFx0XHQkKG1mcC5fbGFzdEZvY3VzZWRFbCkuZm9jdXMoKTsgLy8gcHV0IHRhYiBmb2N1cyBiYWNrXG5cdFx0fVxuXHRcdG1mcC5jdXJySXRlbSA9IG51bGw7XHRcblx0XHRtZnAuY29udGVudCA9IG51bGw7XG5cdFx0bWZwLmN1cnJUZW1wbGF0ZSA9IG51bGw7XG5cdFx0bWZwLnByZXZIZWlnaHQgPSAwO1xuXG5cdFx0X21mcFRyaWdnZXIoQUZURVJfQ0xPU0VfRVZFTlQpO1xuXHR9LFxuXHRcblx0dXBkYXRlU2l6ZTogZnVuY3Rpb24od2luSGVpZ2h0KSB7XG5cblx0XHRpZihtZnAuaXNJT1MpIHtcblx0XHRcdC8vIGZpeGVzIGlPUyBuYXYgYmFycyBodHRwczovL2dpdGh1Yi5jb20vZGltc2VtZW5vdi9NYWduaWZpYy1Qb3B1cC9pc3N1ZXMvMlxuXHRcdFx0dmFyIHpvb21MZXZlbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCAvIHdpbmRvdy5pbm5lcldpZHRoO1xuXHRcdFx0dmFyIGhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAqIHpvb21MZXZlbDtcblx0XHRcdG1mcC53cmFwLmNzcygnaGVpZ2h0JywgaGVpZ2h0KTtcblx0XHRcdG1mcC53SCA9IGhlaWdodDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWZwLndIID0gd2luSGVpZ2h0IHx8IF93aW5kb3cuaGVpZ2h0KCk7XG5cdFx0fVxuXHRcdC8vIEZpeGVzICM4NDogcG9wdXAgaW5jb3JyZWN0bHkgcG9zaXRpb25lZCB3aXRoIHBvc2l0aW9uOnJlbGF0aXZlIG9uIGJvZHlcblx0XHRpZighbWZwLmZpeGVkQ29udGVudFBvcykge1xuXHRcdFx0bWZwLndyYXAuY3NzKCdoZWlnaHQnLCBtZnAud0gpO1xuXHRcdH1cblxuXHRcdF9tZnBUcmlnZ2VyKCdSZXNpemUnKTtcblxuXHR9LFxuXG5cdC8qKlxuXHQgKiBTZXQgY29udGVudCBvZiBwb3B1cCBiYXNlZCBvbiBjdXJyZW50IGluZGV4XG5cdCAqL1xuXHR1cGRhdGVJdGVtSFRNTDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGl0ZW0gPSBtZnAuaXRlbXNbbWZwLmluZGV4XTtcblxuXHRcdC8vIERldGFjaCBhbmQgcGVyZm9ybSBtb2RpZmljYXRpb25zXG5cdFx0bWZwLmNvbnRlbnRDb250YWluZXIuZGV0YWNoKCk7XG5cblx0XHRpZihtZnAuY29udGVudClcblx0XHRcdG1mcC5jb250ZW50LmRldGFjaCgpO1xuXG5cdFx0aWYoIWl0ZW0ucGFyc2VkKSB7XG5cdFx0XHRpdGVtID0gbWZwLnBhcnNlRWwoIG1mcC5pbmRleCApO1xuXHRcdH1cblxuXHRcdHZhciB0eXBlID0gaXRlbS50eXBlO1xuXG5cdFx0X21mcFRyaWdnZXIoJ0JlZm9yZUNoYW5nZScsIFttZnAuY3Vyckl0ZW0gPyBtZnAuY3Vyckl0ZW0udHlwZSA6ICcnLCB0eXBlXSk7XG5cdFx0Ly8gQmVmb3JlQ2hhbmdlIGV2ZW50IHdvcmtzIGxpa2Ugc286XG5cdFx0Ly8gX21mcE9uKCdCZWZvcmVDaGFuZ2UnLCBmdW5jdGlvbihlLCBwcmV2VHlwZSwgbmV3VHlwZSkgeyB9KTtcblxuXHRcdG1mcC5jdXJySXRlbSA9IGl0ZW07XG5cblx0XHRpZighbWZwLmN1cnJUZW1wbGF0ZVt0eXBlXSkge1xuXHRcdFx0dmFyIG1hcmt1cCA9IG1mcC5zdFt0eXBlXSA/IG1mcC5zdFt0eXBlXS5tYXJrdXAgOiBmYWxzZTtcblxuXHRcdFx0Ly8gYWxsb3dzIHRvIG1vZGlmeSBtYXJrdXBcblx0XHRcdF9tZnBUcmlnZ2VyKCdGaXJzdE1hcmt1cFBhcnNlJywgbWFya3VwKTtcblxuXHRcdFx0aWYobWFya3VwKSB7XG5cdFx0XHRcdG1mcC5jdXJyVGVtcGxhdGVbdHlwZV0gPSAkKG1hcmt1cCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBpZiB0aGVyZSBpcyBubyBtYXJrdXAgZm91bmQgd2UganVzdCBkZWZpbmUgdGhhdCB0ZW1wbGF0ZSBpcyBwYXJzZWRcblx0XHRcdFx0bWZwLmN1cnJUZW1wbGF0ZVt0eXBlXSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYoX3ByZXZDb250ZW50VHlwZSAmJiBfcHJldkNvbnRlbnRUeXBlICE9PSBpdGVtLnR5cGUpIHtcblx0XHRcdG1mcC5jb250YWluZXIucmVtb3ZlQ2xhc3MoJ21mcC0nK19wcmV2Q29udGVudFR5cGUrJy1ob2xkZXInKTtcblx0XHR9XG5cblx0XHR2YXIgbmV3Q29udGVudCA9IG1mcFsnZ2V0JyArIHR5cGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0eXBlLnNsaWNlKDEpXShpdGVtLCBtZnAuY3VyclRlbXBsYXRlW3R5cGVdKTtcblx0XHRtZnAuYXBwZW5kQ29udGVudChuZXdDb250ZW50LCB0eXBlKTtcblxuXHRcdGl0ZW0ucHJlbG9hZGVkID0gdHJ1ZTtcblxuXHRcdF9tZnBUcmlnZ2VyKENIQU5HRV9FVkVOVCwgaXRlbSk7XG5cdFx0X3ByZXZDb250ZW50VHlwZSA9IGl0ZW0udHlwZTtcblxuXHRcdC8vIEFwcGVuZCBjb250YWluZXIgYmFjayBhZnRlciBpdHMgY29udGVudCBjaGFuZ2VkXG5cdFx0bWZwLmNvbnRhaW5lci5wcmVwZW5kKG1mcC5jb250ZW50Q29udGFpbmVyKTtcblxuXHRcdF9tZnBUcmlnZ2VyKCdBZnRlckNoYW5nZScpO1xuXHR9LFxuXG5cblx0LyoqXG5cdCAqIFNldCBIVE1MIGNvbnRlbnQgb2YgcG9wdXBcblx0ICovXG5cdGFwcGVuZENvbnRlbnQ6IGZ1bmN0aW9uKG5ld0NvbnRlbnQsIHR5cGUpIHtcblx0XHRtZnAuY29udGVudCA9IG5ld0NvbnRlbnQ7XG5cblx0XHRpZihuZXdDb250ZW50KSB7XG5cdFx0XHRpZihtZnAuc3Quc2hvd0Nsb3NlQnRuICYmIG1mcC5zdC5jbG9zZUJ0bkluc2lkZSAmJlxuXHRcdFx0XHRtZnAuY3VyclRlbXBsYXRlW3R5cGVdID09PSB0cnVlKSB7XG5cdFx0XHRcdC8vIGlmIHRoZXJlIGlzIG5vIG1hcmt1cCwgd2UganVzdCBhcHBlbmQgY2xvc2UgYnV0dG9uIGVsZW1lbnQgaW5zaWRlXG5cdFx0XHRcdGlmKCFtZnAuY29udGVudC5maW5kKCcubWZwLWNsb3NlJykubGVuZ3RoKSB7XG5cdFx0XHRcdFx0bWZwLmNvbnRlbnQuYXBwZW5kKF9nZXRDbG9zZUJ0bigpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWZwLmNvbnRlbnQgPSBuZXdDb250ZW50O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtZnAuY29udGVudCA9ICcnO1xuXHRcdH1cblxuXHRcdF9tZnBUcmlnZ2VyKEJFRk9SRV9BUFBFTkRfRVZFTlQpO1xuXHRcdG1mcC5jb250YWluZXIuYWRkQ2xhc3MoJ21mcC0nK3R5cGUrJy1ob2xkZXInKTtcblxuXHRcdG1mcC5jb250ZW50Q29udGFpbmVyLmFwcGVuZChtZnAuY29udGVudCk7XG5cdH0sXG5cblxuXHQvKipcblx0ICogQ3JlYXRlcyBNYWduaWZpYyBQb3B1cCBkYXRhIG9iamVjdCBiYXNlZCBvbiBnaXZlbiBkYXRhXG5cdCAqIEBwYXJhbSAge2ludH0gaW5kZXggSW5kZXggb2YgaXRlbSB0byBwYXJzZVxuXHQgKi9cblx0cGFyc2VFbDogZnVuY3Rpb24oaW5kZXgpIHtcblx0XHR2YXIgaXRlbSA9IG1mcC5pdGVtc1tpbmRleF0sXG5cdFx0XHR0eXBlO1xuXG5cdFx0aWYoaXRlbS50YWdOYW1lKSB7XG5cdFx0XHRpdGVtID0geyBlbDogJChpdGVtKSB9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0eXBlID0gaXRlbS50eXBlO1xuXHRcdFx0aXRlbSA9IHsgZGF0YTogaXRlbSwgc3JjOiBpdGVtLnNyYyB9O1xuXHRcdH1cblxuXHRcdGlmKGl0ZW0uZWwpIHtcblx0XHRcdHZhciB0eXBlcyA9IG1mcC50eXBlcztcblxuXHRcdFx0Ly8gY2hlY2sgZm9yICdtZnAtVFlQRScgY2xhc3Ncblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiggaXRlbS5lbC5oYXNDbGFzcygnbWZwLScrdHlwZXNbaV0pICkge1xuXHRcdFx0XHRcdHR5cGUgPSB0eXBlc1tpXTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpdGVtLnNyYyA9IGl0ZW0uZWwuYXR0cignZGF0YS1tZnAtc3JjJyk7XG5cdFx0XHRpZighaXRlbS5zcmMpIHtcblx0XHRcdFx0aXRlbS5zcmMgPSBpdGVtLmVsLmF0dHIoJ2hyZWYnKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpdGVtLnR5cGUgPSB0eXBlIHx8IG1mcC5zdC50eXBlIHx8ICdpbmxpbmUnO1xuXHRcdGl0ZW0uaW5kZXggPSBpbmRleDtcblx0XHRpdGVtLnBhcnNlZCA9IHRydWU7XG5cdFx0bWZwLml0ZW1zW2luZGV4XSA9IGl0ZW07XG5cdFx0X21mcFRyaWdnZXIoJ0VsZW1lbnRQYXJzZScsIGl0ZW0pO1xuXG5cdFx0cmV0dXJuIG1mcC5pdGVtc1tpbmRleF07XG5cdH0sXG5cblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgc2luZ2xlIHBvcHVwIG9yIGEgZ3JvdXAgb2YgcG9wdXBzXG5cdCAqL1xuXHRhZGRHcm91cDogZnVuY3Rpb24oZWwsIG9wdGlvbnMpIHtcblx0XHR2YXIgZUhhbmRsZXIgPSBmdW5jdGlvbihlKSB7XG5cdFx0XHRlLm1mcEVsID0gdGhpcztcblx0XHRcdG1mcC5fb3BlbkNsaWNrKGUsIGVsLCBvcHRpb25zKTtcblx0XHR9O1xuXG5cdFx0aWYoIW9wdGlvbnMpIHtcblx0XHRcdG9wdGlvbnMgPSB7fTtcblx0XHR9XG5cblx0XHR2YXIgZU5hbWUgPSAnY2xpY2subWFnbmlmaWNQb3B1cCc7XG5cdFx0b3B0aW9ucy5tYWluRWwgPSBlbDtcblxuXHRcdGlmKG9wdGlvbnMuaXRlbXMpIHtcblx0XHRcdG9wdGlvbnMuaXNPYmogPSB0cnVlO1xuXHRcdFx0ZWwub2ZmKGVOYW1lKS5vbihlTmFtZSwgZUhhbmRsZXIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvcHRpb25zLmlzT2JqID0gZmFsc2U7XG5cdFx0XHRpZihvcHRpb25zLmRlbGVnYXRlKSB7XG5cdFx0XHRcdGVsLm9mZihlTmFtZSkub24oZU5hbWUsIG9wdGlvbnMuZGVsZWdhdGUgLCBlSGFuZGxlcik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvcHRpb25zLml0ZW1zID0gZWw7XG5cdFx0XHRcdGVsLm9mZihlTmFtZSkub24oZU5hbWUsIGVIYW5kbGVyKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdF9vcGVuQ2xpY2s6IGZ1bmN0aW9uKGUsIGVsLCBvcHRpb25zKSB7XG5cdFx0dmFyIG1pZENsaWNrID0gb3B0aW9ucy5taWRDbGljayAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5taWRDbGljayA6ICQubWFnbmlmaWNQb3B1cC5kZWZhdWx0cy5taWRDbGljaztcblxuXG5cdFx0aWYoIW1pZENsaWNrICYmICggZS53aGljaCA9PT0gMiB8fCBlLmN0cmxLZXkgfHwgZS5tZXRhS2V5IHx8IGUuYWx0S2V5IHx8IGUuc2hpZnRLZXkgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgZGlzYWJsZU9uID0gb3B0aW9ucy5kaXNhYmxlT24gIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuZGlzYWJsZU9uIDogJC5tYWduaWZpY1BvcHVwLmRlZmF1bHRzLmRpc2FibGVPbjtcblxuXHRcdGlmKGRpc2FibGVPbikge1xuXHRcdFx0aWYoJC5pc0Z1bmN0aW9uKGRpc2FibGVPbikpIHtcblx0XHRcdFx0aWYoICFkaXNhYmxlT24uY2FsbChtZnApICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgeyAvLyBlbHNlIGl0J3MgbnVtYmVyXG5cdFx0XHRcdGlmKCBfd2luZG93LndpZHRoKCkgPCBkaXNhYmxlT24gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZihlLnR5cGUpIHtcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblxuXHRcdFx0Ly8gVGhpcyB3aWxsIHByZXZlbnQgcG9wdXAgZnJvbSBjbG9zaW5nIGlmIGVsZW1lbnQgaXMgaW5zaWRlIGFuZCBwb3B1cCBpcyBhbHJlYWR5IG9wZW5lZFxuXHRcdFx0aWYobWZwLmlzT3Blbikge1xuXHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdG9wdGlvbnMuZWwgPSAkKGUubWZwRWwpO1xuXHRcdGlmKG9wdGlvbnMuZGVsZWdhdGUpIHtcblx0XHRcdG9wdGlvbnMuaXRlbXMgPSBlbC5maW5kKG9wdGlvbnMuZGVsZWdhdGUpO1xuXHRcdH1cblx0XHRtZnAub3BlbihvcHRpb25zKTtcblx0fSxcblxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRleHQgb24gcHJlbG9hZGVyXG5cdCAqL1xuXHR1cGRhdGVTdGF0dXM6IGZ1bmN0aW9uKHN0YXR1cywgdGV4dCkge1xuXG5cdFx0aWYobWZwLnByZWxvYWRlcikge1xuXHRcdFx0aWYoX3ByZXZTdGF0dXMgIT09IHN0YXR1cykge1xuXHRcdFx0XHRtZnAuY29udGFpbmVyLnJlbW92ZUNsYXNzKCdtZnAtcy0nK19wcmV2U3RhdHVzKTtcblx0XHRcdH1cblxuXHRcdFx0aWYoIXRleHQgJiYgc3RhdHVzID09PSAnbG9hZGluZycpIHtcblx0XHRcdFx0dGV4dCA9IG1mcC5zdC50TG9hZGluZztcblx0XHRcdH1cblxuXHRcdFx0dmFyIGRhdGEgPSB7XG5cdFx0XHRcdHN0YXR1czogc3RhdHVzLFxuXHRcdFx0XHR0ZXh0OiB0ZXh0XG5cdFx0XHR9O1xuXHRcdFx0Ly8gYWxsb3dzIHRvIG1vZGlmeSBzdGF0dXNcblx0XHRcdF9tZnBUcmlnZ2VyKCdVcGRhdGVTdGF0dXMnLCBkYXRhKTtcblxuXHRcdFx0c3RhdHVzID0gZGF0YS5zdGF0dXM7XG5cdFx0XHR0ZXh0ID0gZGF0YS50ZXh0O1xuXG5cdFx0XHRtZnAucHJlbG9hZGVyLmh0bWwodGV4dCk7XG5cblx0XHRcdG1mcC5wcmVsb2FkZXIuZmluZCgnYScpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRtZnAuY29udGFpbmVyLmFkZENsYXNzKCdtZnAtcy0nK3N0YXR1cyk7XG5cdFx0XHRfcHJldlN0YXR1cyA9IHN0YXR1cztcblx0XHR9XG5cdH0sXG5cblxuXHQvKlxuXHRcdFwiUHJpdmF0ZVwiIGhlbHBlcnMgdGhhdCBhcmVuJ3QgcHJpdmF0ZSBhdCBhbGxcblx0ICovXG5cdC8vIENoZWNrIHRvIGNsb3NlIHBvcHVwIG9yIG5vdFxuXHQvLyBcInRhcmdldFwiIGlzIGFuIGVsZW1lbnQgdGhhdCB3YXMgY2xpY2tlZFxuXHRfY2hlY2tJZkNsb3NlOiBmdW5jdGlvbih0YXJnZXQpIHtcblxuXHRcdGlmKCQodGFyZ2V0KS5oYXNDbGFzcyhQUkVWRU5UX0NMT1NFX0NMQVNTKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBjbG9zZU9uQ29udGVudCA9IG1mcC5zdC5jbG9zZU9uQ29udGVudENsaWNrO1xuXHRcdHZhciBjbG9zZU9uQmcgPSBtZnAuc3QuY2xvc2VPbkJnQ2xpY2s7XG5cblx0XHRpZihjbG9zZU9uQ29udGVudCAmJiBjbG9zZU9uQmcpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIFdlIGNsb3NlIHRoZSBwb3B1cCBpZiBjbGljayBpcyBvbiBjbG9zZSBidXR0b24gb3Igb24gcHJlbG9hZGVyLiBPciBpZiB0aGVyZSBpcyBubyBjb250ZW50LlxuXHRcdFx0aWYoIW1mcC5jb250ZW50IHx8ICQodGFyZ2V0KS5oYXNDbGFzcygnbWZwLWNsb3NlJykgfHwgKG1mcC5wcmVsb2FkZXIgJiYgdGFyZ2V0ID09PSBtZnAucHJlbG9hZGVyWzBdKSApIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGlmIGNsaWNrIGlzIG91dHNpZGUgdGhlIGNvbnRlbnRcblx0XHRcdGlmKCAgKHRhcmdldCAhPT0gbWZwLmNvbnRlbnRbMF0gJiYgISQuY29udGFpbnMobWZwLmNvbnRlbnRbMF0sIHRhcmdldCkpICApIHtcblx0XHRcdFx0aWYoY2xvc2VPbkJnKSB7XG5cdFx0XHRcdFx0Ly8gbGFzdCBjaGVjaywgaWYgdGhlIGNsaWNrZWQgZWxlbWVudCBpcyBpbiBET00sIChpbiBjYXNlIGl0J3MgcmVtb3ZlZCBvbmNsaWNrKVxuXHRcdFx0XHRcdGlmKCAkLmNvbnRhaW5zKGRvY3VtZW50LCB0YXJnZXQpICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYoY2xvc2VPbkNvbnRlbnQpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXHRfYWRkQ2xhc3NUb01GUDogZnVuY3Rpb24oY05hbWUpIHtcblx0XHRtZnAuYmdPdmVybGF5LmFkZENsYXNzKGNOYW1lKTtcblx0XHRtZnAud3JhcC5hZGRDbGFzcyhjTmFtZSk7XG5cdH0sXG5cdF9yZW1vdmVDbGFzc0Zyb21NRlA6IGZ1bmN0aW9uKGNOYW1lKSB7XG5cdFx0dGhpcy5iZ092ZXJsYXkucmVtb3ZlQ2xhc3MoY05hbWUpO1xuXHRcdG1mcC53cmFwLnJlbW92ZUNsYXNzKGNOYW1lKTtcblx0fSxcblx0X2hhc1Njcm9sbEJhcjogZnVuY3Rpb24od2luSGVpZ2h0KSB7XG5cdFx0cmV0dXJuICggIChtZnAuaXNJRTcgPyBfZG9jdW1lbnQuaGVpZ2h0KCkgOiBkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCkgPiAod2luSGVpZ2h0IHx8IF93aW5kb3cuaGVpZ2h0KCkpICk7XG5cdH0sXG5cdF9zZXRGb2N1czogZnVuY3Rpb24oKSB7XG5cdFx0KG1mcC5zdC5mb2N1cyA/IG1mcC5jb250ZW50LmZpbmQobWZwLnN0LmZvY3VzKS5lcSgwKSA6IG1mcC53cmFwKS5mb2N1cygpO1xuXHR9LFxuXHRfb25Gb2N1c0luOiBmdW5jdGlvbihlKSB7XG5cdFx0aWYoIGUudGFyZ2V0ICE9PSBtZnAud3JhcFswXSAmJiAhJC5jb250YWlucyhtZnAud3JhcFswXSwgZS50YXJnZXQpICkge1xuXHRcdFx0bWZwLl9zZXRGb2N1cygpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fSxcblx0X3BhcnNlTWFya3VwOiBmdW5jdGlvbih0ZW1wbGF0ZSwgdmFsdWVzLCBpdGVtKSB7XG5cdFx0dmFyIGFycjtcblx0XHRpZihpdGVtLmRhdGEpIHtcblx0XHRcdHZhbHVlcyA9ICQuZXh0ZW5kKGl0ZW0uZGF0YSwgdmFsdWVzKTtcblx0XHR9XG5cdFx0X21mcFRyaWdnZXIoTUFSS1VQX1BBUlNFX0VWRU5ULCBbdGVtcGxhdGUsIHZhbHVlcywgaXRlbV0gKTtcblxuXHRcdCQuZWFjaCh2YWx1ZXMsIGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IGZhbHNlKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0YXJyID0ga2V5LnNwbGl0KCdfJyk7XG5cdFx0XHRpZihhcnIubGVuZ3RoID4gMSkge1xuXHRcdFx0XHR2YXIgZWwgPSB0ZW1wbGF0ZS5maW5kKEVWRU5UX05TICsgJy0nK2FyclswXSk7XG5cblx0XHRcdFx0aWYoZWwubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdHZhciBhdHRyID0gYXJyWzFdO1xuXHRcdFx0XHRcdGlmKGF0dHIgPT09ICdyZXBsYWNlV2l0aCcpIHtcblx0XHRcdFx0XHRcdGlmKGVsWzBdICE9PSB2YWx1ZVswXSkge1xuXHRcdFx0XHRcdFx0XHRlbC5yZXBsYWNlV2l0aCh2YWx1ZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIGlmKGF0dHIgPT09ICdpbWcnKSB7XG5cdFx0XHRcdFx0XHRpZihlbC5pcygnaW1nJykpIHtcblx0XHRcdFx0XHRcdFx0ZWwuYXR0cignc3JjJywgdmFsdWUpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0ZWwucmVwbGFjZVdpdGgoICQoJzxpbWc+JykuYXR0cignc3JjJywgdmFsdWUpLmF0dHIoJ2NsYXNzJywgZWwuYXR0cignY2xhc3MnKSkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ZWwuYXR0cihhcnJbMV0sIHZhbHVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGVtcGxhdGUuZmluZChFVkVOVF9OUyArICctJytrZXkpLmh0bWwodmFsdWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9LFxuXG5cdF9nZXRTY3JvbGxiYXJTaXplOiBmdW5jdGlvbigpIHtcblx0XHQvLyB0aHggRGF2aWRcblx0XHRpZihtZnAuc2Nyb2xsYmFyU2l6ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YXIgc2Nyb2xsRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRcdHNjcm9sbERpdi5zdHlsZS5jc3NUZXh0ID0gJ3dpZHRoOiA5OXB4OyBoZWlnaHQ6IDk5cHg7IG92ZXJmbG93OiBzY3JvbGw7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAtOTk5OXB4Oyc7XG5cdFx0XHRkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcm9sbERpdik7XG5cdFx0XHRtZnAuc2Nyb2xsYmFyU2l6ZSA9IHNjcm9sbERpdi5vZmZzZXRXaWR0aCAtIHNjcm9sbERpdi5jbGllbnRXaWR0aDtcblx0XHRcdGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoc2Nyb2xsRGl2KTtcblx0XHR9XG5cdFx0cmV0dXJuIG1mcC5zY3JvbGxiYXJTaXplO1xuXHR9XG5cbn07IC8qIE1hZ25pZmljUG9wdXAgY29yZSBwcm90b3R5cGUgZW5kICovXG5cblxuXG5cbi8qKlxuICogUHVibGljIHN0YXRpYyBmdW5jdGlvbnNcbiAqL1xuJC5tYWduaWZpY1BvcHVwID0ge1xuXHRpbnN0YW5jZTogbnVsbCxcblx0cHJvdG86IE1hZ25pZmljUG9wdXAucHJvdG90eXBlLFxuXHRtb2R1bGVzOiBbXSxcblxuXHRvcGVuOiBmdW5jdGlvbihvcHRpb25zLCBpbmRleCkge1xuXHRcdF9jaGVja0luc3RhbmNlKCk7XG5cblx0XHRpZighb3B0aW9ucykge1xuXHRcdFx0b3B0aW9ucyA9IHt9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvcHRpb25zID0gJC5leHRlbmQodHJ1ZSwge30sIG9wdGlvbnMpO1xuXHRcdH1cblxuXHRcdG9wdGlvbnMuaXNPYmogPSB0cnVlO1xuXHRcdG9wdGlvbnMuaW5kZXggPSBpbmRleCB8fCAwO1xuXHRcdHJldHVybiB0aGlzLmluc3RhbmNlLm9wZW4ob3B0aW9ucyk7XG5cdH0sXG5cblx0Y2xvc2U6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiAkLm1hZ25pZmljUG9wdXAuaW5zdGFuY2UgJiYgJC5tYWduaWZpY1BvcHVwLmluc3RhbmNlLmNsb3NlKCk7XG5cdH0sXG5cblx0cmVnaXN0ZXJNb2R1bGU6IGZ1bmN0aW9uKG5hbWUsIG1vZHVsZSkge1xuXHRcdGlmKG1vZHVsZS5vcHRpb25zKSB7XG5cdFx0XHQkLm1hZ25pZmljUG9wdXAuZGVmYXVsdHNbbmFtZV0gPSBtb2R1bGUub3B0aW9ucztcblx0XHR9XG5cdFx0JC5leHRlbmQodGhpcy5wcm90bywgbW9kdWxlLnByb3RvKTtcblx0XHR0aGlzLm1vZHVsZXMucHVzaChuYW1lKTtcblx0fSxcblxuXHRkZWZhdWx0czoge1xuXG5cdFx0Ly8gSW5mbyBhYm91dCBvcHRpb25zIGlzIGluIGRvY3M6XG5cdFx0Ly8gaHR0cDovL2RpbXNlbWVub3YuY29tL3BsdWdpbnMvbWFnbmlmaWMtcG9wdXAvZG9jdW1lbnRhdGlvbi5odG1sI29wdGlvbnNcblxuXHRcdGRpc2FibGVPbjogMCxcblxuXHRcdGtleTogbnVsbCxcblxuXHRcdG1pZENsaWNrOiBmYWxzZSxcblxuXHRcdG1haW5DbGFzczogJycsXG5cblx0XHRwcmVsb2FkZXI6IHRydWUsXG5cblx0XHRmb2N1czogJycsIC8vIENTUyBzZWxlY3RvciBvZiBpbnB1dCB0byBmb2N1cyBhZnRlciBwb3B1cCBpcyBvcGVuZWRcblxuXHRcdGNsb3NlT25Db250ZW50Q2xpY2s6IGZhbHNlLFxuXG5cdFx0Y2xvc2VPbkJnQ2xpY2s6IHRydWUsXG5cblx0XHRjbG9zZUJ0bkluc2lkZTogdHJ1ZSxcblxuXHRcdHNob3dDbG9zZUJ0bjogdHJ1ZSxcblxuXHRcdGVuYWJsZUVzY2FwZUtleTogdHJ1ZSxcblxuXHRcdG1vZGFsOiBmYWxzZSxcblxuXHRcdGFsaWduVG9wOiBmYWxzZSxcblxuXHRcdHJlbW92YWxEZWxheTogMCxcblxuXHRcdHByZXBlbmRUbzogbnVsbCxcblxuXHRcdGZpeGVkQ29udGVudFBvczogJ2F1dG8nLFxuXG5cdFx0Zml4ZWRCZ1BvczogJ2F1dG8nLFxuXG5cdFx0b3ZlcmZsb3dZOiAnYXV0bycsXG5cblx0XHRjbG9zZU1hcmt1cDogJzxidXR0b24gdGl0bGU9XCIldGl0bGUlXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibWZwLWNsb3NlXCI+JiMyMTU7PC9idXR0b24+JyxcblxuXHRcdHRDbG9zZTogJ0Nsb3NlIChFc2MpJyxcblxuXHRcdHRMb2FkaW5nOiAnTG9hZGluZy4uLicsXG5cblx0XHRhdXRvRm9jdXNMYXN0OiB0cnVlXG5cblx0fVxufTtcblxuXG5cbiQuZm4ubWFnbmlmaWNQb3B1cCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcblx0X2NoZWNrSW5zdGFuY2UoKTtcblxuXHR2YXIganFFbCA9ICQodGhpcyk7XG5cblx0Ly8gV2UgY2FsbCBzb21lIEFQSSBtZXRob2Qgb2YgZmlyc3QgcGFyYW0gaXMgYSBzdHJpbmdcblx0aWYgKHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiICkge1xuXG5cdFx0aWYob3B0aW9ucyA9PT0gJ29wZW4nKSB7XG5cdFx0XHR2YXIgaXRlbXMsXG5cdFx0XHRcdGl0ZW1PcHRzID0gX2lzSlEgPyBqcUVsLmRhdGEoJ21hZ25pZmljUG9wdXAnKSA6IGpxRWxbMF0ubWFnbmlmaWNQb3B1cCxcblx0XHRcdFx0aW5kZXggPSBwYXJzZUludChhcmd1bWVudHNbMV0sIDEwKSB8fCAwO1xuXG5cdFx0XHRpZihpdGVtT3B0cy5pdGVtcykge1xuXHRcdFx0XHRpdGVtcyA9IGl0ZW1PcHRzLml0ZW1zW2luZGV4XTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGl0ZW1zID0ganFFbDtcblx0XHRcdFx0aWYoaXRlbU9wdHMuZGVsZWdhdGUpIHtcblx0XHRcdFx0XHRpdGVtcyA9IGl0ZW1zLmZpbmQoaXRlbU9wdHMuZGVsZWdhdGUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGl0ZW1zID0gaXRlbXMuZXEoIGluZGV4ICk7XG5cdFx0XHR9XG5cdFx0XHRtZnAuX29wZW5DbGljayh7bWZwRWw6aXRlbXN9LCBqcUVsLCBpdGVtT3B0cyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmKG1mcC5pc09wZW4pXG5cdFx0XHRcdG1mcFtvcHRpb25zXS5hcHBseShtZnAsIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuXHRcdH1cblxuXHR9IGVsc2Uge1xuXHRcdC8vIGNsb25lIG9wdGlvbnMgb2JqXG5cdFx0b3B0aW9ucyA9ICQuZXh0ZW5kKHRydWUsIHt9LCBvcHRpb25zKTtcblxuXHRcdC8qXG5cdFx0ICogQXMgWmVwdG8gZG9lc24ndCBzdXBwb3J0IC5kYXRhKCkgbWV0aG9kIGZvciBvYmplY3RzXG5cdFx0ICogYW5kIGl0IHdvcmtzIG9ubHkgaW4gbm9ybWFsIGJyb3dzZXJzXG5cdFx0ICogd2UgYXNzaWduIFwib3B0aW9uc1wiIG9iamVjdCBkaXJlY3RseSB0byB0aGUgRE9NIGVsZW1lbnQuIEZUVyFcblx0XHQgKi9cblx0XHRpZihfaXNKUSkge1xuXHRcdFx0anFFbC5kYXRhKCdtYWduaWZpY1BvcHVwJywgb3B0aW9ucyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGpxRWxbMF0ubWFnbmlmaWNQb3B1cCA9IG9wdGlvbnM7XG5cdFx0fVxuXG5cdFx0bWZwLmFkZEdyb3VwKGpxRWwsIG9wdGlvbnMpO1xuXG5cdH1cblx0cmV0dXJuIGpxRWw7XG59O1xuXG4vKj4+Y29yZSovXG5cbi8qPj5pbmxpbmUqL1xuXG52YXIgSU5MSU5FX05TID0gJ2lubGluZScsXG5cdF9oaWRkZW5DbGFzcyxcblx0X2lubGluZVBsYWNlaG9sZGVyLFxuXHRfbGFzdElubGluZUVsZW1lbnQsXG5cdF9wdXRJbmxpbmVFbGVtZW50c0JhY2sgPSBmdW5jdGlvbigpIHtcblx0XHRpZihfbGFzdElubGluZUVsZW1lbnQpIHtcblx0XHRcdF9pbmxpbmVQbGFjZWhvbGRlci5hZnRlciggX2xhc3RJbmxpbmVFbGVtZW50LmFkZENsYXNzKF9oaWRkZW5DbGFzcykgKS5kZXRhY2goKTtcblx0XHRcdF9sYXN0SW5saW5lRWxlbWVudCA9IG51bGw7XG5cdFx0fVxuXHR9O1xuXG4kLm1hZ25pZmljUG9wdXAucmVnaXN0ZXJNb2R1bGUoSU5MSU5FX05TLCB7XG5cdG9wdGlvbnM6IHtcblx0XHRoaWRkZW5DbGFzczogJ2hpZGUnLCAvLyB3aWxsIGJlIGFwcGVuZGVkIHdpdGggYG1mcC1gIHByZWZpeFxuXHRcdG1hcmt1cDogJycsXG5cdFx0dE5vdEZvdW5kOiAnQ29udGVudCBub3QgZm91bmQnXG5cdH0sXG5cdHByb3RvOiB7XG5cblx0XHRpbml0SW5saW5lOiBmdW5jdGlvbigpIHtcblx0XHRcdG1mcC50eXBlcy5wdXNoKElOTElORV9OUyk7XG5cblx0XHRcdF9tZnBPbihDTE9TRV9FVkVOVCsnLicrSU5MSU5FX05TLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0X3B1dElubGluZUVsZW1lbnRzQmFjaygpO1xuXHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdGdldElubGluZTogZnVuY3Rpb24oaXRlbSwgdGVtcGxhdGUpIHtcblxuXHRcdFx0X3B1dElubGluZUVsZW1lbnRzQmFjaygpO1xuXG5cdFx0XHRpZihpdGVtLnNyYykge1xuXHRcdFx0XHR2YXIgaW5saW5lU3QgPSBtZnAuc3QuaW5saW5lLFxuXHRcdFx0XHRcdGVsID0gJChpdGVtLnNyYyk7XG5cblx0XHRcdFx0aWYoZWwubGVuZ3RoKSB7XG5cblx0XHRcdFx0XHQvLyBJZiB0YXJnZXQgZWxlbWVudCBoYXMgcGFyZW50IC0gd2UgcmVwbGFjZSBpdCB3aXRoIHBsYWNlaG9sZGVyIGFuZCBwdXQgaXQgYmFjayBhZnRlciBwb3B1cCBpcyBjbG9zZWRcblx0XHRcdFx0XHR2YXIgcGFyZW50ID0gZWxbMF0ucGFyZW50Tm9kZTtcblx0XHRcdFx0XHRpZihwYXJlbnQgJiYgcGFyZW50LnRhZ05hbWUpIHtcblx0XHRcdFx0XHRcdGlmKCFfaW5saW5lUGxhY2Vob2xkZXIpIHtcblx0XHRcdFx0XHRcdFx0X2hpZGRlbkNsYXNzID0gaW5saW5lU3QuaGlkZGVuQ2xhc3M7XG5cdFx0XHRcdFx0XHRcdF9pbmxpbmVQbGFjZWhvbGRlciA9IF9nZXRFbChfaGlkZGVuQ2xhc3MpO1xuXHRcdFx0XHRcdFx0XHRfaGlkZGVuQ2xhc3MgPSAnbWZwLScrX2hpZGRlbkNsYXNzO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Ly8gcmVwbGFjZSB0YXJnZXQgaW5saW5lIGVsZW1lbnQgd2l0aCBwbGFjZWhvbGRlclxuXHRcdFx0XHRcdFx0X2xhc3RJbmxpbmVFbGVtZW50ID0gZWwuYWZ0ZXIoX2lubGluZVBsYWNlaG9sZGVyKS5kZXRhY2goKS5yZW1vdmVDbGFzcyhfaGlkZGVuQ2xhc3MpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG1mcC51cGRhdGVTdGF0dXMoJ3JlYWR5Jyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bWZwLnVwZGF0ZVN0YXR1cygnZXJyb3InLCBpbmxpbmVTdC50Tm90Rm91bmQpO1xuXHRcdFx0XHRcdGVsID0gJCgnPGRpdj4nKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGl0ZW0uaW5saW5lRWxlbWVudCA9IGVsO1xuXHRcdFx0XHRyZXR1cm4gZWw7XG5cdFx0XHR9XG5cblx0XHRcdG1mcC51cGRhdGVTdGF0dXMoJ3JlYWR5Jyk7XG5cdFx0XHRtZnAuX3BhcnNlTWFya3VwKHRlbXBsYXRlLCB7fSwgaXRlbSk7XG5cdFx0XHRyZXR1cm4gdGVtcGxhdGU7XG5cdFx0fVxuXHR9XG59KTtcblxuLyo+PmlubGluZSovXG5cbi8qPj5hamF4Ki9cbnZhciBBSkFYX05TID0gJ2FqYXgnLFxuXHRfYWpheEN1cixcblx0X3JlbW92ZUFqYXhDdXJzb3IgPSBmdW5jdGlvbigpIHtcblx0XHRpZihfYWpheEN1cikge1xuXHRcdFx0JChkb2N1bWVudC5ib2R5KS5yZW1vdmVDbGFzcyhfYWpheEN1cik7XG5cdFx0fVxuXHR9LFxuXHRfZGVzdHJveUFqYXhSZXF1ZXN0ID0gZnVuY3Rpb24oKSB7XG5cdFx0X3JlbW92ZUFqYXhDdXJzb3IoKTtcblx0XHRpZihtZnAucmVxKSB7XG5cdFx0XHRtZnAucmVxLmFib3J0KCk7XG5cdFx0fVxuXHR9O1xuXG4kLm1hZ25pZmljUG9wdXAucmVnaXN0ZXJNb2R1bGUoQUpBWF9OUywge1xuXG5cdG9wdGlvbnM6IHtcblx0XHRzZXR0aW5nczogbnVsbCxcblx0XHRjdXJzb3I6ICdtZnAtYWpheC1jdXInLFxuXHRcdHRFcnJvcjogJzxhIGhyZWY9XCIldXJsJVwiPlRoZSBjb250ZW50PC9hPiBjb3VsZCBub3QgYmUgbG9hZGVkLidcblx0fSxcblxuXHRwcm90bzoge1xuXHRcdGluaXRBamF4OiBmdW5jdGlvbigpIHtcblx0XHRcdG1mcC50eXBlcy5wdXNoKEFKQVhfTlMpO1xuXHRcdFx0X2FqYXhDdXIgPSBtZnAuc3QuYWpheC5jdXJzb3I7XG5cblx0XHRcdF9tZnBPbihDTE9TRV9FVkVOVCsnLicrQUpBWF9OUywgX2Rlc3Ryb3lBamF4UmVxdWVzdCk7XG5cdFx0XHRfbWZwT24oJ0JlZm9yZUNoYW5nZS4nICsgQUpBWF9OUywgX2Rlc3Ryb3lBamF4UmVxdWVzdCk7XG5cdFx0fSxcblx0XHRnZXRBamF4OiBmdW5jdGlvbihpdGVtKSB7XG5cblx0XHRcdGlmKF9hamF4Q3VyKSB7XG5cdFx0XHRcdCQoZG9jdW1lbnQuYm9keSkuYWRkQ2xhc3MoX2FqYXhDdXIpO1xuXHRcdFx0fVxuXG5cdFx0XHRtZnAudXBkYXRlU3RhdHVzKCdsb2FkaW5nJyk7XG5cblx0XHRcdHZhciBvcHRzID0gJC5leHRlbmQoe1xuXHRcdFx0XHR1cmw6IGl0ZW0uc3JjLFxuXHRcdFx0XHRzdWNjZXNzOiBmdW5jdGlvbihkYXRhLCB0ZXh0U3RhdHVzLCBqcVhIUikge1xuXHRcdFx0XHRcdHZhciB0ZW1wID0ge1xuXHRcdFx0XHRcdFx0ZGF0YTpkYXRhLFxuXHRcdFx0XHRcdFx0eGhyOmpxWEhSXG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdF9tZnBUcmlnZ2VyKCdQYXJzZUFqYXgnLCB0ZW1wKTtcblxuXHRcdFx0XHRcdG1mcC5hcHBlbmRDb250ZW50KCAkKHRlbXAuZGF0YSksIEFKQVhfTlMgKTtcblxuXHRcdFx0XHRcdGl0ZW0uZmluaXNoZWQgPSB0cnVlO1xuXG5cdFx0XHRcdFx0X3JlbW92ZUFqYXhDdXJzb3IoKTtcblxuXHRcdFx0XHRcdG1mcC5fc2V0Rm9jdXMoKTtcblxuXHRcdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRtZnAud3JhcC5hZGRDbGFzcyhSRUFEWV9DTEFTUyk7XG5cdFx0XHRcdFx0fSwgMTYpO1xuXG5cdFx0XHRcdFx0bWZwLnVwZGF0ZVN0YXR1cygncmVhZHknKTtcblxuXHRcdFx0XHRcdF9tZnBUcmlnZ2VyKCdBamF4Q29udGVudEFkZGVkJyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGVycm9yOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRfcmVtb3ZlQWpheEN1cnNvcigpO1xuXHRcdFx0XHRcdGl0ZW0uZmluaXNoZWQgPSBpdGVtLmxvYWRFcnJvciA9IHRydWU7XG5cdFx0XHRcdFx0bWZwLnVwZGF0ZVN0YXR1cygnZXJyb3InLCBtZnAuc3QuYWpheC50RXJyb3IucmVwbGFjZSgnJXVybCUnLCBpdGVtLnNyYykpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCBtZnAuc3QuYWpheC5zZXR0aW5ncyk7XG5cblx0XHRcdG1mcC5yZXEgPSAkLmFqYXgob3B0cyk7XG5cblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cdH1cbn0pO1xuXG4vKj4+YWpheCovXG5cbi8qPj5pbWFnZSovXG52YXIgX2ltZ0ludGVydmFsLFxuXHRfZ2V0VGl0bGUgPSBmdW5jdGlvbihpdGVtKSB7XG5cdFx0aWYoaXRlbS5kYXRhICYmIGl0ZW0uZGF0YS50aXRsZSAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGl0ZW0uZGF0YS50aXRsZTtcblxuXHRcdHZhciBzcmMgPSBtZnAuc3QuaW1hZ2UudGl0bGVTcmM7XG5cblx0XHRpZihzcmMpIHtcblx0XHRcdGlmKCQuaXNGdW5jdGlvbihzcmMpKSB7XG5cdFx0XHRcdHJldHVybiBzcmMuY2FsbChtZnAsIGl0ZW0pO1xuXHRcdFx0fSBlbHNlIGlmKGl0ZW0uZWwpIHtcblx0XHRcdFx0cmV0dXJuIGl0ZW0uZWwuYXR0cihzcmMpIHx8ICcnO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gJyc7XG5cdH07XG5cbiQubWFnbmlmaWNQb3B1cC5yZWdpc3Rlck1vZHVsZSgnaW1hZ2UnLCB7XG5cblx0b3B0aW9uczoge1xuXHRcdG1hcmt1cDogJzxkaXYgY2xhc3M9XCJtZnAtZmlndXJlXCI+Jytcblx0XHRcdFx0XHQnPGRpdiBjbGFzcz1cIm1mcC1jbG9zZVwiPjwvZGl2PicrXG5cdFx0XHRcdFx0JzxmaWd1cmU+Jytcblx0XHRcdFx0XHRcdCc8ZGl2IGNsYXNzPVwibWZwLWltZ1wiPjwvZGl2PicrXG5cdFx0XHRcdFx0XHQnPGZpZ2NhcHRpb24+Jytcblx0XHRcdFx0XHRcdFx0JzxkaXYgY2xhc3M9XCJtZnAtYm90dG9tLWJhclwiPicrXG5cdFx0XHRcdFx0XHRcdFx0JzxkaXYgY2xhc3M9XCJtZnAtdGl0bGVcIj48L2Rpdj4nK1xuXHRcdFx0XHRcdFx0XHRcdCc8ZGl2IGNsYXNzPVwibWZwLWNvdW50ZXJcIj48L2Rpdj4nK1xuXHRcdFx0XHRcdFx0XHQnPC9kaXY+Jytcblx0XHRcdFx0XHRcdCc8L2ZpZ2NhcHRpb24+Jytcblx0XHRcdFx0XHQnPC9maWd1cmU+Jytcblx0XHRcdFx0JzwvZGl2PicsXG5cdFx0Y3Vyc29yOiAnbWZwLXpvb20tb3V0LWN1cicsXG5cdFx0dGl0bGVTcmM6ICd0aXRsZScsXG5cdFx0dmVydGljYWxGaXQ6IHRydWUsXG5cdFx0dEVycm9yOiAnPGEgaHJlZj1cIiV1cmwlXCI+VGhlIGltYWdlPC9hPiBjb3VsZCBub3QgYmUgbG9hZGVkLidcblx0fSxcblxuXHRwcm90bzoge1xuXHRcdGluaXRJbWFnZTogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaW1nU3QgPSBtZnAuc3QuaW1hZ2UsXG5cdFx0XHRcdG5zID0gJy5pbWFnZSc7XG5cblx0XHRcdG1mcC50eXBlcy5wdXNoKCdpbWFnZScpO1xuXG5cdFx0XHRfbWZwT24oT1BFTl9FVkVOVCtucywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmKG1mcC5jdXJySXRlbS50eXBlID09PSAnaW1hZ2UnICYmIGltZ1N0LmN1cnNvcikge1xuXHRcdFx0XHRcdCQoZG9jdW1lbnQuYm9keSkuYWRkQ2xhc3MoaW1nU3QuY3Vyc29yKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdF9tZnBPbihDTE9TRV9FVkVOVCtucywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmKGltZ1N0LmN1cnNvcikge1xuXHRcdFx0XHRcdCQoZG9jdW1lbnQuYm9keSkucmVtb3ZlQ2xhc3MoaW1nU3QuY3Vyc29yKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRfd2luZG93Lm9mZigncmVzaXplJyArIEVWRU5UX05TKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRfbWZwT24oJ1Jlc2l6ZScrbnMsIG1mcC5yZXNpemVJbWFnZSk7XG5cdFx0XHRpZihtZnAuaXNMb3dJRSkge1xuXHRcdFx0XHRfbWZwT24oJ0FmdGVyQ2hhbmdlJywgbWZwLnJlc2l6ZUltYWdlKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHJlc2l6ZUltYWdlOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpdGVtID0gbWZwLmN1cnJJdGVtO1xuXHRcdFx0aWYoIWl0ZW0gfHwgIWl0ZW0uaW1nKSByZXR1cm47XG5cblx0XHRcdGlmKG1mcC5zdC5pbWFnZS52ZXJ0aWNhbEZpdCkge1xuXHRcdFx0XHR2YXIgZGVjciA9IDA7XG5cdFx0XHRcdC8vIGZpeCBib3gtc2l6aW5nIGluIGllNy84XG5cdFx0XHRcdGlmKG1mcC5pc0xvd0lFKSB7XG5cdFx0XHRcdFx0ZGVjciA9IHBhcnNlSW50KGl0ZW0uaW1nLmNzcygncGFkZGluZy10b3AnKSwgMTApICsgcGFyc2VJbnQoaXRlbS5pbWcuY3NzKCdwYWRkaW5nLWJvdHRvbScpLDEwKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpdGVtLmltZy5jc3MoJ21heC1oZWlnaHQnLCBtZnAud0gtZGVjcik7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRfb25JbWFnZUhhc1NpemU6IGZ1bmN0aW9uKGl0ZW0pIHtcblx0XHRcdGlmKGl0ZW0uaW1nKSB7XG5cblx0XHRcdFx0aXRlbS5oYXNTaXplID0gdHJ1ZTtcblxuXHRcdFx0XHRpZihfaW1nSW50ZXJ2YWwpIHtcblx0XHRcdFx0XHRjbGVhckludGVydmFsKF9pbWdJbnRlcnZhbCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpdGVtLmlzQ2hlY2tpbmdJbWdTaXplID0gZmFsc2U7XG5cblx0XHRcdFx0X21mcFRyaWdnZXIoJ0ltYWdlSGFzU2l6ZScsIGl0ZW0pO1xuXG5cdFx0XHRcdGlmKGl0ZW0uaW1nSGlkZGVuKSB7XG5cdFx0XHRcdFx0aWYobWZwLmNvbnRlbnQpXG5cdFx0XHRcdFx0XHRtZnAuY29udGVudC5yZW1vdmVDbGFzcygnbWZwLWxvYWRpbmcnKTtcblxuXHRcdFx0XHRcdGl0ZW0uaW1nSGlkZGVuID0gZmFsc2U7XG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBGdW5jdGlvbiB0aGF0IGxvb3BzIHVudGlsIHRoZSBpbWFnZSBoYXMgc2l6ZSB0byBkaXNwbGF5IGVsZW1lbnRzIHRoYXQgcmVseSBvbiBpdCBhc2FwXG5cdFx0ICovXG5cdFx0ZmluZEltYWdlU2l6ZTogZnVuY3Rpb24oaXRlbSkge1xuXG5cdFx0XHR2YXIgY291bnRlciA9IDAsXG5cdFx0XHRcdGltZyA9IGl0ZW0uaW1nWzBdLFxuXHRcdFx0XHRtZnBTZXRJbnRlcnZhbCA9IGZ1bmN0aW9uKGRlbGF5KSB7XG5cblx0XHRcdFx0XHRpZihfaW1nSW50ZXJ2YWwpIHtcblx0XHRcdFx0XHRcdGNsZWFySW50ZXJ2YWwoX2ltZ0ludGVydmFsKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gZGVjZWxlcmF0aW5nIGludGVydmFsIHRoYXQgY2hlY2tzIGZvciBzaXplIG9mIGFuIGltYWdlXG5cdFx0XHRcdFx0X2ltZ0ludGVydmFsID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRpZihpbWcubmF0dXJhbFdpZHRoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRtZnAuX29uSW1hZ2VIYXNTaXplKGl0ZW0pO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGNvdW50ZXIgPiAyMDApIHtcblx0XHRcdFx0XHRcdFx0Y2xlYXJJbnRlcnZhbChfaW1nSW50ZXJ2YWwpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjb3VudGVyKys7XG5cdFx0XHRcdFx0XHRpZihjb3VudGVyID09PSAzKSB7XG5cdFx0XHRcdFx0XHRcdG1mcFNldEludGVydmFsKDEwKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZihjb3VudGVyID09PSA0MCkge1xuXHRcdFx0XHRcdFx0XHRtZnBTZXRJbnRlcnZhbCg1MCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYoY291bnRlciA9PT0gMTAwKSB7XG5cdFx0XHRcdFx0XHRcdG1mcFNldEludGVydmFsKDUwMCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSwgZGVsYXkpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRtZnBTZXRJbnRlcnZhbCgxKTtcblx0XHR9LFxuXG5cdFx0Z2V0SW1hZ2U6IGZ1bmN0aW9uKGl0ZW0sIHRlbXBsYXRlKSB7XG5cblx0XHRcdHZhciBndWFyZCA9IDAsXG5cblx0XHRcdFx0Ly8gaW1hZ2UgbG9hZCBjb21wbGV0ZSBoYW5kbGVyXG5cdFx0XHRcdG9uTG9hZENvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYoaXRlbSkge1xuXHRcdFx0XHRcdFx0aWYgKGl0ZW0uaW1nWzBdLmNvbXBsZXRlKSB7XG5cdFx0XHRcdFx0XHRcdGl0ZW0uaW1nLm9mZignLm1mcGxvYWRlcicpO1xuXG5cdFx0XHRcdFx0XHRcdGlmKGl0ZW0gPT09IG1mcC5jdXJySXRlbSl7XG5cdFx0XHRcdFx0XHRcdFx0bWZwLl9vbkltYWdlSGFzU2l6ZShpdGVtKTtcblxuXHRcdFx0XHRcdFx0XHRcdG1mcC51cGRhdGVTdGF0dXMoJ3JlYWR5Jyk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpdGVtLmhhc1NpemUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRpdGVtLmxvYWRlZCA9IHRydWU7XG5cblx0XHRcdFx0XHRcdFx0X21mcFRyaWdnZXIoJ0ltYWdlTG9hZENvbXBsZXRlJyk7XG5cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQvLyBpZiBpbWFnZSBjb21wbGV0ZSBjaGVjayBmYWlscyAyMDAgdGltZXMgKDIwIHNlYyksIHdlIGFzc3VtZSB0aGF0IHRoZXJlIHdhcyBhbiBlcnJvci5cblx0XHRcdFx0XHRcdFx0Z3VhcmQrKztcblx0XHRcdFx0XHRcdFx0aWYoZ3VhcmQgPCAyMDApIHtcblx0XHRcdFx0XHRcdFx0XHRzZXRUaW1lb3V0KG9uTG9hZENvbXBsZXRlLDEwMCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0b25Mb2FkRXJyb3IoKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBpbWFnZSBlcnJvciBoYW5kbGVyXG5cdFx0XHRcdG9uTG9hZEVycm9yID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYoaXRlbSkge1xuXHRcdFx0XHRcdFx0aXRlbS5pbWcub2ZmKCcubWZwbG9hZGVyJyk7XG5cdFx0XHRcdFx0XHRpZihpdGVtID09PSBtZnAuY3Vyckl0ZW0pe1xuXHRcdFx0XHRcdFx0XHRtZnAuX29uSW1hZ2VIYXNTaXplKGl0ZW0pO1xuXHRcdFx0XHRcdFx0XHRtZnAudXBkYXRlU3RhdHVzKCdlcnJvcicsIGltZ1N0LnRFcnJvci5yZXBsYWNlKCcldXJsJScsIGl0ZW0uc3JjKSApO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpdGVtLmhhc1NpemUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0aXRlbS5sb2FkZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0aXRlbS5sb2FkRXJyb3IgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0aW1nU3QgPSBtZnAuc3QuaW1hZ2U7XG5cblxuXHRcdFx0dmFyIGVsID0gdGVtcGxhdGUuZmluZCgnLm1mcC1pbWcnKTtcblx0XHRcdGlmKGVsLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG5cdFx0XHRcdGltZy5jbGFzc05hbWUgPSAnbWZwLWltZyc7XG5cdFx0XHRcdGlmKGl0ZW0uZWwgJiYgaXRlbS5lbC5maW5kKCdpbWcnKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRpbWcuYWx0ID0gaXRlbS5lbC5maW5kKCdpbWcnKS5hdHRyKCdhbHQnKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpdGVtLmltZyA9ICQoaW1nKS5vbignbG9hZC5tZnBsb2FkZXInLCBvbkxvYWRDb21wbGV0ZSkub24oJ2Vycm9yLm1mcGxvYWRlcicsIG9uTG9hZEVycm9yKTtcblx0XHRcdFx0aW1nLnNyYyA9IGl0ZW0uc3JjO1xuXG5cdFx0XHRcdC8vIHdpdGhvdXQgY2xvbmUoKSBcImVycm9yXCIgZXZlbnQgaXMgbm90IGZpcmluZyB3aGVuIElNRyBpcyByZXBsYWNlZCBieSBuZXcgSU1HXG5cdFx0XHRcdC8vIFRPRE86IGZpbmQgYSB3YXkgdG8gYXZvaWQgc3VjaCBjbG9uaW5nXG5cdFx0XHRcdGlmKGVsLmlzKCdpbWcnKSkge1xuXHRcdFx0XHRcdGl0ZW0uaW1nID0gaXRlbS5pbWcuY2xvbmUoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGltZyA9IGl0ZW0uaW1nWzBdO1xuXHRcdFx0XHRpZihpbWcubmF0dXJhbFdpZHRoID4gMCkge1xuXHRcdFx0XHRcdGl0ZW0uaGFzU2l6ZSA9IHRydWU7XG5cdFx0XHRcdH0gZWxzZSBpZighaW1nLndpZHRoKSB7XG5cdFx0XHRcdFx0aXRlbS5oYXNTaXplID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0bWZwLl9wYXJzZU1hcmt1cCh0ZW1wbGF0ZSwge1xuXHRcdFx0XHR0aXRsZTogX2dldFRpdGxlKGl0ZW0pLFxuXHRcdFx0XHRpbWdfcmVwbGFjZVdpdGg6IGl0ZW0uaW1nXG5cdFx0XHR9LCBpdGVtKTtcblxuXHRcdFx0bWZwLnJlc2l6ZUltYWdlKCk7XG5cblx0XHRcdGlmKGl0ZW0uaGFzU2l6ZSkge1xuXHRcdFx0XHRpZihfaW1nSW50ZXJ2YWwpIGNsZWFySW50ZXJ2YWwoX2ltZ0ludGVydmFsKTtcblxuXHRcdFx0XHRpZihpdGVtLmxvYWRFcnJvcikge1xuXHRcdFx0XHRcdHRlbXBsYXRlLmFkZENsYXNzKCdtZnAtbG9hZGluZycpO1xuXHRcdFx0XHRcdG1mcC51cGRhdGVTdGF0dXMoJ2Vycm9yJywgaW1nU3QudEVycm9yLnJlcGxhY2UoJyV1cmwlJywgaXRlbS5zcmMpICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGVtcGxhdGUucmVtb3ZlQ2xhc3MoJ21mcC1sb2FkaW5nJyk7XG5cdFx0XHRcdFx0bWZwLnVwZGF0ZVN0YXR1cygncmVhZHknKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGVtcGxhdGU7XG5cdFx0XHR9XG5cblx0XHRcdG1mcC51cGRhdGVTdGF0dXMoJ2xvYWRpbmcnKTtcblx0XHRcdGl0ZW0ubG9hZGluZyA9IHRydWU7XG5cblx0XHRcdGlmKCFpdGVtLmhhc1NpemUpIHtcblx0XHRcdFx0aXRlbS5pbWdIaWRkZW4gPSB0cnVlO1xuXHRcdFx0XHR0ZW1wbGF0ZS5hZGRDbGFzcygnbWZwLWxvYWRpbmcnKTtcblx0XHRcdFx0bWZwLmZpbmRJbWFnZVNpemUoaXRlbSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0ZW1wbGF0ZTtcblx0XHR9XG5cdH1cbn0pO1xuXG4vKj4+aW1hZ2UqL1xuXG4vKj4+em9vbSovXG52YXIgaGFzTW96VHJhbnNmb3JtLFxuXHRnZXRIYXNNb3pUcmFuc2Zvcm0gPSBmdW5jdGlvbigpIHtcblx0XHRpZihoYXNNb3pUcmFuc2Zvcm0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aGFzTW96VHJhbnNmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpLnN0eWxlLk1velRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gaGFzTW96VHJhbnNmb3JtO1xuXHR9O1xuXG4kLm1hZ25pZmljUG9wdXAucmVnaXN0ZXJNb2R1bGUoJ3pvb20nLCB7XG5cblx0b3B0aW9uczoge1xuXHRcdGVuYWJsZWQ6IGZhbHNlLFxuXHRcdGVhc2luZzogJ2Vhc2UtaW4tb3V0Jyxcblx0XHRkdXJhdGlvbjogMzAwLFxuXHRcdG9wZW5lcjogZnVuY3Rpb24oZWxlbWVudCkge1xuXHRcdFx0cmV0dXJuIGVsZW1lbnQuaXMoJ2ltZycpID8gZWxlbWVudCA6IGVsZW1lbnQuZmluZCgnaW1nJyk7XG5cdFx0fVxuXHR9LFxuXG5cdHByb3RvOiB7XG5cblx0XHRpbml0Wm9vbTogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgem9vbVN0ID0gbWZwLnN0Lnpvb20sXG5cdFx0XHRcdG5zID0gJy56b29tJyxcblx0XHRcdFx0aW1hZ2U7XG5cblx0XHRcdGlmKCF6b29tU3QuZW5hYmxlZCB8fCAhbWZwLnN1cHBvcnRzVHJhbnNpdGlvbikge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHZhciBkdXJhdGlvbiA9IHpvb21TdC5kdXJhdGlvbixcblx0XHRcdFx0Z2V0RWxUb0FuaW1hdGUgPSBmdW5jdGlvbihpbWFnZSkge1xuXHRcdFx0XHRcdHZhciBuZXdJbWcgPSBpbWFnZS5jbG9uZSgpLnJlbW92ZUF0dHIoJ3N0eWxlJykucmVtb3ZlQXR0cignY2xhc3MnKS5hZGRDbGFzcygnbWZwLWFuaW1hdGVkLWltYWdlJyksXG5cdFx0XHRcdFx0XHR0cmFuc2l0aW9uID0gJ2FsbCAnKyh6b29tU3QuZHVyYXRpb24vMTAwMCkrJ3MgJyArIHpvb21TdC5lYXNpbmcsXG5cdFx0XHRcdFx0XHRjc3NPYmogPSB7XG5cdFx0XHRcdFx0XHRcdHBvc2l0aW9uOiAnZml4ZWQnLFxuXHRcdFx0XHRcdFx0XHR6SW5kZXg6IDk5OTksXG5cdFx0XHRcdFx0XHRcdGxlZnQ6IDAsXG5cdFx0XHRcdFx0XHRcdHRvcDogMCxcblx0XHRcdFx0XHRcdFx0Jy13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eSc6ICdoaWRkZW4nXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0dCA9ICd0cmFuc2l0aW9uJztcblxuXHRcdFx0XHRcdGNzc09ialsnLXdlYmtpdC0nK3RdID0gY3NzT2JqWyctbW96LScrdF0gPSBjc3NPYmpbJy1vLScrdF0gPSBjc3NPYmpbdF0gPSB0cmFuc2l0aW9uO1xuXG5cdFx0XHRcdFx0bmV3SW1nLmNzcyhjc3NPYmopO1xuXHRcdFx0XHRcdHJldHVybiBuZXdJbWc7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNob3dNYWluQ29udGVudCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdG1mcC5jb250ZW50LmNzcygndmlzaWJpbGl0eScsICd2aXNpYmxlJyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG9wZW5UaW1lb3V0LFxuXHRcdFx0XHRhbmltYXRlZEltZztcblxuXHRcdFx0X21mcE9uKCdCdWlsZENvbnRyb2xzJytucywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmKG1mcC5fYWxsb3dab29tKCkpIHtcblxuXHRcdFx0XHRcdGNsZWFyVGltZW91dChvcGVuVGltZW91dCk7XG5cdFx0XHRcdFx0bWZwLmNvbnRlbnQuY3NzKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuXG5cdFx0XHRcdFx0Ly8gQmFzaWNhbGx5LCBhbGwgY29kZSBiZWxvdyBkb2VzIGlzIGNsb25lcyBleGlzdGluZyBpbWFnZSwgcHV0cyBpbiBvbiB0b3Agb2YgdGhlIGN1cnJlbnQgb25lIGFuZCBhbmltYXRlZCBpdFxuXG5cdFx0XHRcdFx0aW1hZ2UgPSBtZnAuX2dldEl0ZW1Ub1pvb20oKTtcblxuXHRcdFx0XHRcdGlmKCFpbWFnZSkge1xuXHRcdFx0XHRcdFx0c2hvd01haW5Db250ZW50KCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YW5pbWF0ZWRJbWcgPSBnZXRFbFRvQW5pbWF0ZShpbWFnZSk7XG5cblx0XHRcdFx0XHRhbmltYXRlZEltZy5jc3MoIG1mcC5fZ2V0T2Zmc2V0KCkgKTtcblxuXHRcdFx0XHRcdG1mcC53cmFwLmFwcGVuZChhbmltYXRlZEltZyk7XG5cblx0XHRcdFx0XHRvcGVuVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRhbmltYXRlZEltZy5jc3MoIG1mcC5fZ2V0T2Zmc2V0KCB0cnVlICkgKTtcblx0XHRcdFx0XHRcdG9wZW5UaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdFx0XHRzaG93TWFpbkNvbnRlbnQoKTtcblxuXHRcdFx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdGFuaW1hdGVkSW1nLnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0XHRcdGltYWdlID0gYW5pbWF0ZWRJbWcgPSBudWxsO1xuXHRcdFx0XHRcdFx0XHRcdF9tZnBUcmlnZ2VyKCdab29tQW5pbWF0aW9uRW5kZWQnKTtcblx0XHRcdFx0XHRcdFx0fSwgMTYpOyAvLyBhdm9pZCBibGluayB3aGVuIHN3aXRjaGluZyBpbWFnZXNcblxuXHRcdFx0XHRcdFx0fSwgZHVyYXRpb24pOyAvLyB0aGlzIHRpbWVvdXQgZXF1YWxzIGFuaW1hdGlvbiBkdXJhdGlvblxuXG5cdFx0XHRcdFx0fSwgMTYpOyAvLyBieSBhZGRpbmcgdGhpcyB0aW1lb3V0IHdlIGF2b2lkIHNob3J0IGdsaXRjaCBhdCB0aGUgYmVnaW5uaW5nIG9mIGFuaW1hdGlvblxuXG5cblx0XHRcdFx0XHQvLyBMb3RzIG9mIHRpbWVvdXRzLi4uXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0X21mcE9uKEJFRk9SRV9DTE9TRV9FVkVOVCtucywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmKG1mcC5fYWxsb3dab29tKCkpIHtcblxuXHRcdFx0XHRcdGNsZWFyVGltZW91dChvcGVuVGltZW91dCk7XG5cblx0XHRcdFx0XHRtZnAuc3QucmVtb3ZhbERlbGF5ID0gZHVyYXRpb247XG5cblx0XHRcdFx0XHRpZighaW1hZ2UpIHtcblx0XHRcdFx0XHRcdGltYWdlID0gbWZwLl9nZXRJdGVtVG9ab29tKCk7XG5cdFx0XHRcdFx0XHRpZighaW1hZ2UpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YW5pbWF0ZWRJbWcgPSBnZXRFbFRvQW5pbWF0ZShpbWFnZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YW5pbWF0ZWRJbWcuY3NzKCBtZnAuX2dldE9mZnNldCh0cnVlKSApO1xuXHRcdFx0XHRcdG1mcC53cmFwLmFwcGVuZChhbmltYXRlZEltZyk7XG5cdFx0XHRcdFx0bWZwLmNvbnRlbnQuY3NzKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuXG5cdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGFuaW1hdGVkSW1nLmNzcyggbWZwLl9nZXRPZmZzZXQoKSApO1xuXHRcdFx0XHRcdH0sIDE2KTtcblx0XHRcdFx0fVxuXG5cdFx0XHR9KTtcblxuXHRcdFx0X21mcE9uKENMT1NFX0VWRU5UK25zLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYobWZwLl9hbGxvd1pvb20oKSkge1xuXHRcdFx0XHRcdHNob3dNYWluQ29udGVudCgpO1xuXHRcdFx0XHRcdGlmKGFuaW1hdGVkSW1nKSB7XG5cdFx0XHRcdFx0XHRhbmltYXRlZEltZy5yZW1vdmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aW1hZ2UgPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0X2FsbG93Wm9vbTogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gbWZwLmN1cnJJdGVtLnR5cGUgPT09ICdpbWFnZSc7XG5cdFx0fSxcblxuXHRcdF9nZXRJdGVtVG9ab29tOiBmdW5jdGlvbigpIHtcblx0XHRcdGlmKG1mcC5jdXJySXRlbS5oYXNTaXplKSB7XG5cdFx0XHRcdHJldHVybiBtZnAuY3Vyckl0ZW0uaW1nO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBHZXQgZWxlbWVudCBwb3N0aW9uIHJlbGF0aXZlIHRvIHZpZXdwb3J0XG5cdFx0X2dldE9mZnNldDogZnVuY3Rpb24oaXNMYXJnZSkge1xuXHRcdFx0dmFyIGVsO1xuXHRcdFx0aWYoaXNMYXJnZSkge1xuXHRcdFx0XHRlbCA9IG1mcC5jdXJySXRlbS5pbWc7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbCA9IG1mcC5zdC56b29tLm9wZW5lcihtZnAuY3Vyckl0ZW0uZWwgfHwgbWZwLmN1cnJJdGVtKTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIG9mZnNldCA9IGVsLm9mZnNldCgpO1xuXHRcdFx0dmFyIHBhZGRpbmdUb3AgPSBwYXJzZUludChlbC5jc3MoJ3BhZGRpbmctdG9wJyksMTApO1xuXHRcdFx0dmFyIHBhZGRpbmdCb3R0b20gPSBwYXJzZUludChlbC5jc3MoJ3BhZGRpbmctYm90dG9tJyksMTApO1xuXHRcdFx0b2Zmc2V0LnRvcCAtPSAoICQod2luZG93KS5zY3JvbGxUb3AoKSAtIHBhZGRpbmdUb3AgKTtcblxuXG5cdFx0XHQvKlxuXG5cdFx0XHRBbmltYXRpbmcgbGVmdCArIHRvcCArIHdpZHRoL2hlaWdodCBsb29rcyBnbGl0Y2h5IGluIEZpcmVmb3gsIGJ1dCBwZXJmZWN0IGluIENocm9tZS4gQW5kIHZpY2UtdmVyc2EuXG5cblx0XHRcdCAqL1xuXHRcdFx0dmFyIG9iaiA9IHtcblx0XHRcdFx0d2lkdGg6IGVsLndpZHRoKCksXG5cdFx0XHRcdC8vIGZpeCBaZXB0byBoZWlnaHQrcGFkZGluZyBpc3N1ZVxuXHRcdFx0XHRoZWlnaHQ6IChfaXNKUSA/IGVsLmlubmVySGVpZ2h0KCkgOiBlbFswXS5vZmZzZXRIZWlnaHQpIC0gcGFkZGluZ0JvdHRvbSAtIHBhZGRpbmdUb3Bcblx0XHRcdH07XG5cblx0XHRcdC8vIEkgaGF0ZSB0byBkbyB0aGlzLCBidXQgdGhlcmUgaXMgbm8gYW5vdGhlciBvcHRpb25cblx0XHRcdGlmKCBnZXRIYXNNb3pUcmFuc2Zvcm0oKSApIHtcblx0XHRcdFx0b2JqWyctbW96LXRyYW5zZm9ybSddID0gb2JqWyd0cmFuc2Zvcm0nXSA9ICd0cmFuc2xhdGUoJyArIG9mZnNldC5sZWZ0ICsgJ3B4LCcgKyBvZmZzZXQudG9wICsgJ3B4KSc7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvYmoubGVmdCA9IG9mZnNldC5sZWZ0O1xuXHRcdFx0XHRvYmoudG9wID0gb2Zmc2V0LnRvcDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBvYmo7XG5cdFx0fVxuXG5cdH1cbn0pO1xuXG5cblxuLyo+Pnpvb20qL1xuXG4vKj4+aWZyYW1lKi9cblxudmFyIElGUkFNRV9OUyA9ICdpZnJhbWUnLFxuXHRfZW1wdHlQYWdlID0gJy8vYWJvdXQ6YmxhbmsnLFxuXG5cdF9maXhJZnJhbWVCdWdzID0gZnVuY3Rpb24oaXNTaG93aW5nKSB7XG5cdFx0aWYobWZwLmN1cnJUZW1wbGF0ZVtJRlJBTUVfTlNdKSB7XG5cdFx0XHR2YXIgZWwgPSBtZnAuY3VyclRlbXBsYXRlW0lGUkFNRV9OU10uZmluZCgnaWZyYW1lJyk7XG5cdFx0XHRpZihlbC5sZW5ndGgpIHtcblx0XHRcdFx0Ly8gcmVzZXQgc3JjIGFmdGVyIHRoZSBwb3B1cCBpcyBjbG9zZWQgdG8gYXZvaWQgXCJ2aWRlbyBrZWVwcyBwbGF5aW5nIGFmdGVyIHBvcHVwIGlzIGNsb3NlZFwiIGJ1Z1xuXHRcdFx0XHRpZighaXNTaG93aW5nKSB7XG5cdFx0XHRcdFx0ZWxbMF0uc3JjID0gX2VtcHR5UGFnZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElFOCBibGFjayBzY3JlZW4gYnVnIGZpeFxuXHRcdFx0XHRpZihtZnAuaXNJRTgpIHtcblx0XHRcdFx0XHRlbC5jc3MoJ2Rpc3BsYXknLCBpc1Nob3dpbmcgPyAnYmxvY2snIDogJ25vbmUnKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuJC5tYWduaWZpY1BvcHVwLnJlZ2lzdGVyTW9kdWxlKElGUkFNRV9OUywge1xuXG5cdG9wdGlvbnM6IHtcblx0XHRtYXJrdXA6ICc8ZGl2IGNsYXNzPVwibWZwLWlmcmFtZS1zY2FsZXJcIj4nK1xuXHRcdFx0XHRcdCc8ZGl2IGNsYXNzPVwibWZwLWNsb3NlXCI+PC9kaXY+Jytcblx0XHRcdFx0XHQnPGlmcmFtZSBjbGFzcz1cIm1mcC1pZnJhbWVcIiBzcmM9XCIvL2Fib3V0OmJsYW5rXCIgZnJhbWVib3JkZXI9XCIwXCIgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPicrXG5cdFx0XHRcdCc8L2Rpdj4nLFxuXG5cdFx0c3JjQWN0aW9uOiAnaWZyYW1lX3NyYycsXG5cblx0XHQvLyB3ZSBkb24ndCBjYXJlIGFuZCBzdXBwb3J0IG9ubHkgb25lIGRlZmF1bHQgdHlwZSBvZiBVUkwgYnkgZGVmYXVsdFxuXHRcdHBhdHRlcm5zOiB7XG5cdFx0XHR5b3V0dWJlOiB7XG5cdFx0XHRcdGluZGV4OiAneW91dHViZS5jb20nLFxuXHRcdFx0XHRpZDogJ3Y9Jyxcblx0XHRcdFx0c3JjOiAnLy93d3cueW91dHViZS5jb20vZW1iZWQvJWlkJT9hdXRvcGxheT0xJ1xuXHRcdFx0fSxcblx0XHRcdHZpbWVvOiB7XG5cdFx0XHRcdGluZGV4OiAndmltZW8uY29tLycsXG5cdFx0XHRcdGlkOiAnLycsXG5cdFx0XHRcdHNyYzogJy8vcGxheWVyLnZpbWVvLmNvbS92aWRlby8laWQlP2F1dG9wbGF5PTEnXG5cdFx0XHR9LFxuXHRcdFx0Z21hcHM6IHtcblx0XHRcdFx0aW5kZXg6ICcvL21hcHMuZ29vZ2xlLicsXG5cdFx0XHRcdHNyYzogJyVpZCUmb3V0cHV0PWVtYmVkJ1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRwcm90bzoge1xuXHRcdGluaXRJZnJhbWU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0bWZwLnR5cGVzLnB1c2goSUZSQU1FX05TKTtcblxuXHRcdFx0X21mcE9uKCdCZWZvcmVDaGFuZ2UnLCBmdW5jdGlvbihlLCBwcmV2VHlwZSwgbmV3VHlwZSkge1xuXHRcdFx0XHRpZihwcmV2VHlwZSAhPT0gbmV3VHlwZSkge1xuXHRcdFx0XHRcdGlmKHByZXZUeXBlID09PSBJRlJBTUVfTlMpIHtcblx0XHRcdFx0XHRcdF9maXhJZnJhbWVCdWdzKCk7IC8vIGlmcmFtZSBpZiByZW1vdmVkXG5cdFx0XHRcdFx0fSBlbHNlIGlmKG5ld1R5cGUgPT09IElGUkFNRV9OUykge1xuXHRcdFx0XHRcdFx0X2ZpeElmcmFtZUJ1Z3ModHJ1ZSk7IC8vIGlmcmFtZSBpcyBzaG93aW5nXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9Ly8gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gaWZyYW1lIHNvdXJjZSBpcyBzd2l0Y2hlZCwgZG9uJ3QgZG8gYW55dGhpbmdcblx0XHRcdFx0Ly99XG5cdFx0XHR9KTtcblxuXHRcdFx0X21mcE9uKENMT1NFX0VWRU5UICsgJy4nICsgSUZSQU1FX05TLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0X2ZpeElmcmFtZUJ1Z3MoKTtcblx0XHRcdH0pO1xuXHRcdH0sXG5cblx0XHRnZXRJZnJhbWU6IGZ1bmN0aW9uKGl0ZW0sIHRlbXBsYXRlKSB7XG5cdFx0XHR2YXIgZW1iZWRTcmMgPSBpdGVtLnNyYztcblx0XHRcdHZhciBpZnJhbWVTdCA9IG1mcC5zdC5pZnJhbWU7XG5cblx0XHRcdCQuZWFjaChpZnJhbWVTdC5wYXR0ZXJucywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmKGVtYmVkU3JjLmluZGV4T2YoIHRoaXMuaW5kZXggKSA+IC0xKSB7XG5cdFx0XHRcdFx0aWYodGhpcy5pZCkge1xuXHRcdFx0XHRcdFx0aWYodHlwZW9mIHRoaXMuaWQgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0XHRcdGVtYmVkU3JjID0gZW1iZWRTcmMuc3Vic3RyKGVtYmVkU3JjLmxhc3RJbmRleE9mKHRoaXMuaWQpK3RoaXMuaWQubGVuZ3RoLCBlbWJlZFNyYy5sZW5ndGgpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0ZW1iZWRTcmMgPSB0aGlzLmlkLmNhbGwoIHRoaXMsIGVtYmVkU3JjICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVtYmVkU3JjID0gdGhpcy5zcmMucmVwbGFjZSgnJWlkJScsIGVtYmVkU3JjICk7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlOyAvLyBicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHZhciBkYXRhT2JqID0ge307XG5cdFx0XHRpZihpZnJhbWVTdC5zcmNBY3Rpb24pIHtcblx0XHRcdFx0ZGF0YU9ialtpZnJhbWVTdC5zcmNBY3Rpb25dID0gZW1iZWRTcmM7XG5cdFx0XHR9XG5cdFx0XHRtZnAuX3BhcnNlTWFya3VwKHRlbXBsYXRlLCBkYXRhT2JqLCBpdGVtKTtcblxuXHRcdFx0bWZwLnVwZGF0ZVN0YXR1cygncmVhZHknKTtcblxuXHRcdFx0cmV0dXJuIHRlbXBsYXRlO1xuXHRcdH1cblx0fVxufSk7XG5cblxuXG4vKj4+aWZyYW1lKi9cblxuLyo+PmdhbGxlcnkqL1xuLyoqXG4gKiBHZXQgbG9vcGVkIGluZGV4IGRlcGVuZGluZyBvbiBudW1iZXIgb2Ygc2xpZGVzXG4gKi9cbnZhciBfZ2V0TG9vcGVkSWQgPSBmdW5jdGlvbihpbmRleCkge1xuXHRcdHZhciBudW1TbGlkZXMgPSBtZnAuaXRlbXMubGVuZ3RoO1xuXHRcdGlmKGluZGV4ID4gbnVtU2xpZGVzIC0gMSkge1xuXHRcdFx0cmV0dXJuIGluZGV4IC0gbnVtU2xpZGVzO1xuXHRcdH0gZWxzZSAgaWYoaW5kZXggPCAwKSB7XG5cdFx0XHRyZXR1cm4gbnVtU2xpZGVzICsgaW5kZXg7XG5cdFx0fVxuXHRcdHJldHVybiBpbmRleDtcblx0fSxcblx0X3JlcGxhY2VDdXJyVG90YWwgPSBmdW5jdGlvbih0ZXh0LCBjdXJyLCB0b3RhbCkge1xuXHRcdHJldHVybiB0ZXh0LnJlcGxhY2UoLyVjdXJyJS9naSwgY3VyciArIDEpLnJlcGxhY2UoLyV0b3RhbCUvZ2ksIHRvdGFsKTtcblx0fTtcblxuJC5tYWduaWZpY1BvcHVwLnJlZ2lzdGVyTW9kdWxlKCdnYWxsZXJ5Jywge1xuXG5cdG9wdGlvbnM6IHtcblx0XHRlbmFibGVkOiBmYWxzZSxcblx0XHRhcnJvd01hcmt1cDogJzxidXR0b24gdGl0bGU9XCIldGl0bGUlXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibWZwLWFycm93IG1mcC1hcnJvdy0lZGlyJVwiPjwvYnV0dG9uPicsXG5cdFx0cHJlbG9hZDogWzAsMl0sXG5cdFx0bmF2aWdhdGVCeUltZ0NsaWNrOiB0cnVlLFxuXHRcdGFycm93czogdHJ1ZSxcblxuXHRcdHRQcmV2OiAnUHJldmlvdXMgKExlZnQgYXJyb3cga2V5KScsXG5cdFx0dE5leHQ6ICdOZXh0IChSaWdodCBhcnJvdyBrZXkpJyxcblx0XHR0Q291bnRlcjogJyVjdXJyJSBvZiAldG90YWwlJ1xuXHR9LFxuXG5cdHByb3RvOiB7XG5cdFx0aW5pdEdhbGxlcnk6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHR2YXIgZ1N0ID0gbWZwLnN0LmdhbGxlcnksXG5cdFx0XHRcdG5zID0gJy5tZnAtZ2FsbGVyeSc7XG5cblx0XHRcdG1mcC5kaXJlY3Rpb24gPSB0cnVlOyAvLyB0cnVlIC0gbmV4dCwgZmFsc2UgLSBwcmV2XG5cblx0XHRcdGlmKCFnU3QgfHwgIWdTdC5lbmFibGVkICkgcmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRfd3JhcENsYXNzZXMgKz0gJyBtZnAtZ2FsbGVyeSc7XG5cblx0XHRcdF9tZnBPbihPUEVOX0VWRU5UK25zLCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRpZihnU3QubmF2aWdhdGVCeUltZ0NsaWNrKSB7XG5cdFx0XHRcdFx0bWZwLndyYXAub24oJ2NsaWNrJytucywgJy5tZnAtaW1nJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRpZihtZnAuaXRlbXMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdFx0XHRtZnAubmV4dCgpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRfZG9jdW1lbnQub24oJ2tleWRvd24nK25zLCBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdFx0aWYgKGUua2V5Q29kZSA9PT0gMzcpIHtcblx0XHRcdFx0XHRcdG1mcC5wcmV2KCk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChlLmtleUNvZGUgPT09IDM5KSB7XG5cdFx0XHRcdFx0XHRtZnAubmV4dCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0X21mcE9uKCdVcGRhdGVTdGF0dXMnK25zLCBmdW5jdGlvbihlLCBkYXRhKSB7XG5cdFx0XHRcdGlmKGRhdGEudGV4dCkge1xuXHRcdFx0XHRcdGRhdGEudGV4dCA9IF9yZXBsYWNlQ3VyclRvdGFsKGRhdGEudGV4dCwgbWZwLmN1cnJJdGVtLmluZGV4LCBtZnAuaXRlbXMubGVuZ3RoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdF9tZnBPbihNQVJLVVBfUEFSU0VfRVZFTlQrbnMsIGZ1bmN0aW9uKGUsIGVsZW1lbnQsIHZhbHVlcywgaXRlbSkge1xuXHRcdFx0XHR2YXIgbCA9IG1mcC5pdGVtcy5sZW5ndGg7XG5cdFx0XHRcdHZhbHVlcy5jb3VudGVyID0gbCA+IDEgPyBfcmVwbGFjZUN1cnJUb3RhbChnU3QudENvdW50ZXIsIGl0ZW0uaW5kZXgsIGwpIDogJyc7XG5cdFx0XHR9KTtcblxuXHRcdFx0X21mcE9uKCdCdWlsZENvbnRyb2xzJyArIG5zLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYobWZwLml0ZW1zLmxlbmd0aCA+IDEgJiYgZ1N0LmFycm93cyAmJiAhbWZwLmFycm93TGVmdCkge1xuXHRcdFx0XHRcdHZhciBtYXJrdXAgPSBnU3QuYXJyb3dNYXJrdXAsXG5cdFx0XHRcdFx0XHRhcnJvd0xlZnQgPSBtZnAuYXJyb3dMZWZ0ID0gJCggbWFya3VwLnJlcGxhY2UoLyV0aXRsZSUvZ2ksIGdTdC50UHJldikucmVwbGFjZSgvJWRpciUvZ2ksICdsZWZ0JykgKS5hZGRDbGFzcyhQUkVWRU5UX0NMT1NFX0NMQVNTKSxcblx0XHRcdFx0XHRcdGFycm93UmlnaHQgPSBtZnAuYXJyb3dSaWdodCA9ICQoIG1hcmt1cC5yZXBsYWNlKC8ldGl0bGUlL2dpLCBnU3QudE5leHQpLnJlcGxhY2UoLyVkaXIlL2dpLCAncmlnaHQnKSApLmFkZENsYXNzKFBSRVZFTlRfQ0xPU0VfQ0xBU1MpO1xuXG5cdFx0XHRcdFx0YXJyb3dMZWZ0LmNsaWNrKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0bWZwLnByZXYoKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRhcnJvd1JpZ2h0LmNsaWNrKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0bWZwLm5leHQoKTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdG1mcC5jb250YWluZXIuYXBwZW5kKGFycm93TGVmdC5hZGQoYXJyb3dSaWdodCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0X21mcE9uKENIQU5HRV9FVkVOVCtucywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmKG1mcC5fcHJlbG9hZFRpbWVvdXQpIGNsZWFyVGltZW91dChtZnAuX3ByZWxvYWRUaW1lb3V0KTtcblxuXHRcdFx0XHRtZnAuX3ByZWxvYWRUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRtZnAucHJlbG9hZE5lYXJieUltYWdlcygpO1xuXHRcdFx0XHRcdG1mcC5fcHJlbG9hZFRpbWVvdXQgPSBudWxsO1xuXHRcdFx0XHR9LCAxNik7XG5cdFx0XHR9KTtcblxuXG5cdFx0XHRfbWZwT24oQ0xPU0VfRVZFTlQrbnMsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRfZG9jdW1lbnQub2ZmKG5zKTtcblx0XHRcdFx0bWZwLndyYXAub2ZmKCdjbGljaycrbnMpO1xuXHRcdFx0XHRtZnAuYXJyb3dSaWdodCA9IG1mcC5hcnJvd0xlZnQgPSBudWxsO1xuXHRcdFx0fSk7XG5cblx0XHR9LFxuXHRcdG5leHQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0bWZwLmRpcmVjdGlvbiA9IHRydWU7XG5cdFx0XHRtZnAuaW5kZXggPSBfZ2V0TG9vcGVkSWQobWZwLmluZGV4ICsgMSk7XG5cdFx0XHRtZnAudXBkYXRlSXRlbUhUTUwoKTtcblx0XHR9LFxuXHRcdHByZXY6IGZ1bmN0aW9uKCkge1xuXHRcdFx0bWZwLmRpcmVjdGlvbiA9IGZhbHNlO1xuXHRcdFx0bWZwLmluZGV4ID0gX2dldExvb3BlZElkKG1mcC5pbmRleCAtIDEpO1xuXHRcdFx0bWZwLnVwZGF0ZUl0ZW1IVE1MKCk7XG5cdFx0fSxcblx0XHRnb1RvOiBmdW5jdGlvbihuZXdJbmRleCkge1xuXHRcdFx0bWZwLmRpcmVjdGlvbiA9IChuZXdJbmRleCA+PSBtZnAuaW5kZXgpO1xuXHRcdFx0bWZwLmluZGV4ID0gbmV3SW5kZXg7XG5cdFx0XHRtZnAudXBkYXRlSXRlbUhUTUwoKTtcblx0XHR9LFxuXHRcdHByZWxvYWROZWFyYnlJbWFnZXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHAgPSBtZnAuc3QuZ2FsbGVyeS5wcmVsb2FkLFxuXHRcdFx0XHRwcmVsb2FkQmVmb3JlID0gTWF0aC5taW4ocFswXSwgbWZwLml0ZW1zLmxlbmd0aCksXG5cdFx0XHRcdHByZWxvYWRBZnRlciA9IE1hdGgubWluKHBbMV0sIG1mcC5pdGVtcy5sZW5ndGgpLFxuXHRcdFx0XHRpO1xuXG5cdFx0XHRmb3IoaSA9IDE7IGkgPD0gKG1mcC5kaXJlY3Rpb24gPyBwcmVsb2FkQWZ0ZXIgOiBwcmVsb2FkQmVmb3JlKTsgaSsrKSB7XG5cdFx0XHRcdG1mcC5fcHJlbG9hZEl0ZW0obWZwLmluZGV4K2kpO1xuXHRcdFx0fVxuXHRcdFx0Zm9yKGkgPSAxOyBpIDw9IChtZnAuZGlyZWN0aW9uID8gcHJlbG9hZEJlZm9yZSA6IHByZWxvYWRBZnRlcik7IGkrKykge1xuXHRcdFx0XHRtZnAuX3ByZWxvYWRJdGVtKG1mcC5pbmRleC1pKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdF9wcmVsb2FkSXRlbTogZnVuY3Rpb24oaW5kZXgpIHtcblx0XHRcdGluZGV4ID0gX2dldExvb3BlZElkKGluZGV4KTtcblxuXHRcdFx0aWYobWZwLml0ZW1zW2luZGV4XS5wcmVsb2FkZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgaXRlbSA9IG1mcC5pdGVtc1tpbmRleF07XG5cdFx0XHRpZighaXRlbS5wYXJzZWQpIHtcblx0XHRcdFx0aXRlbSA9IG1mcC5wYXJzZUVsKCBpbmRleCApO1xuXHRcdFx0fVxuXG5cdFx0XHRfbWZwVHJpZ2dlcignTGF6eUxvYWQnLCBpdGVtKTtcblxuXHRcdFx0aWYoaXRlbS50eXBlID09PSAnaW1hZ2UnKSB7XG5cdFx0XHRcdGl0ZW0uaW1nID0gJCgnPGltZyBjbGFzcz1cIm1mcC1pbWdcIiAvPicpLm9uKCdsb2FkLm1mcGxvYWRlcicsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGl0ZW0uaGFzU2l6ZSA9IHRydWU7XG5cdFx0XHRcdH0pLm9uKCdlcnJvci5tZnBsb2FkZXInLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpdGVtLmhhc1NpemUgPSB0cnVlO1xuXHRcdFx0XHRcdGl0ZW0ubG9hZEVycm9yID0gdHJ1ZTtcblx0XHRcdFx0XHRfbWZwVHJpZ2dlcignTGF6eUxvYWRFcnJvcicsIGl0ZW0pO1xuXHRcdFx0XHR9KS5hdHRyKCdzcmMnLCBpdGVtLnNyYyk7XG5cdFx0XHR9XG5cblxuXHRcdFx0aXRlbS5wcmVsb2FkZWQgPSB0cnVlO1xuXHRcdH1cblx0fVxufSk7XG5cbi8qPj5nYWxsZXJ5Ki9cblxuLyo+PnJldGluYSovXG5cbnZhciBSRVRJTkFfTlMgPSAncmV0aW5hJztcblxuJC5tYWduaWZpY1BvcHVwLnJlZ2lzdGVyTW9kdWxlKFJFVElOQV9OUywge1xuXHRvcHRpb25zOiB7XG5cdFx0cmVwbGFjZVNyYzogZnVuY3Rpb24oaXRlbSkge1xuXHRcdFx0cmV0dXJuIGl0ZW0uc3JjLnJlcGxhY2UoL1xcLlxcdyskLywgZnVuY3Rpb24obSkgeyByZXR1cm4gJ0AyeCcgKyBtOyB9KTtcblx0XHR9LFxuXHRcdHJhdGlvOiAxIC8vIEZ1bmN0aW9uIG9yIG51bWJlci4gIFNldCB0byAxIHRvIGRpc2FibGUuXG5cdH0sXG5cdHByb3RvOiB7XG5cdFx0aW5pdFJldGluYTogZnVuY3Rpb24oKSB7XG5cdFx0XHRpZih3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA+IDEpIHtcblxuXHRcdFx0XHR2YXIgc3QgPSBtZnAuc3QucmV0aW5hLFxuXHRcdFx0XHRcdHJhdGlvID0gc3QucmF0aW87XG5cblx0XHRcdFx0cmF0aW8gPSAhaXNOYU4ocmF0aW8pID8gcmF0aW8gOiByYXRpbygpO1xuXG5cdFx0XHRcdGlmKHJhdGlvID4gMSkge1xuXHRcdFx0XHRcdF9tZnBPbignSW1hZ2VIYXNTaXplJyArICcuJyArIFJFVElOQV9OUywgZnVuY3Rpb24oZSwgaXRlbSkge1xuXHRcdFx0XHRcdFx0aXRlbS5pbWcuY3NzKHtcblx0XHRcdFx0XHRcdFx0J21heC13aWR0aCc6IGl0ZW0uaW1nWzBdLm5hdHVyYWxXaWR0aCAvIHJhdGlvLFxuXHRcdFx0XHRcdFx0XHQnd2lkdGgnOiAnMTAwJSdcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdF9tZnBPbignRWxlbWVudFBhcnNlJyArICcuJyArIFJFVElOQV9OUywgZnVuY3Rpb24oZSwgaXRlbSkge1xuXHRcdFx0XHRcdFx0aXRlbS5zcmMgPSBzdC5yZXBsYWNlU3JjKGl0ZW0sIHJhdGlvKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0fVxuXHR9XG59KTtcblxuLyo+PnJldGluYSovXG4gX2NoZWNrSW5zdGFuY2UoKTsgfSkpOyIsIi8qIVxyXG4gKiBAbmFtZSBKYXZhU2NyaXB0L05vZGVKUyBNZXJnZSB2MS4yLjFcclxuICogQGF1dGhvciB5ZWlrb3NcclxuICogQHJlcG9zaXRvcnkgaHR0cHM6Ly9naXRodWIuY29tL3llaWtvcy9qcy5tZXJnZVxyXG5cclxuICogQ29weXJpZ2h0IDIwMTQgeWVpa29zIC0gTUlUIGxpY2Vuc2VcclxuICogaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS95ZWlrb3MvanMubWVyZ2UvbWFzdGVyL0xJQ0VOU0VcclxuICovXHJcblxyXG47KGZ1bmN0aW9uKGlzTm9kZSkge1xyXG5cclxuXHQvKipcclxuXHQgKiBNZXJnZSBvbmUgb3IgbW9yZSBvYmplY3RzIFxyXG5cdCAqIEBwYXJhbSBib29sPyBjbG9uZVxyXG5cdCAqIEBwYXJhbSBtaXhlZCwuLi4gYXJndW1lbnRzXHJcblx0ICogQHJldHVybiBvYmplY3RcclxuXHQgKi9cclxuXHJcblx0dmFyIFB1YmxpYyA9IGZ1bmN0aW9uKGNsb25lKSB7XHJcblxyXG5cdFx0cmV0dXJuIG1lcmdlKGNsb25lID09PSB0cnVlLCBmYWxzZSwgYXJndW1lbnRzKTtcclxuXHJcblx0fSwgcHVibGljTmFtZSA9ICdtZXJnZSc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIE1lcmdlIHR3byBvciBtb3JlIG9iamVjdHMgcmVjdXJzaXZlbHkgXHJcblx0ICogQHBhcmFtIGJvb2w/IGNsb25lXHJcblx0ICogQHBhcmFtIG1peGVkLC4uLiBhcmd1bWVudHNcclxuXHQgKiBAcmV0dXJuIG9iamVjdFxyXG5cdCAqL1xyXG5cclxuXHRQdWJsaWMucmVjdXJzaXZlID0gZnVuY3Rpb24oY2xvbmUpIHtcclxuXHJcblx0XHRyZXR1cm4gbWVyZ2UoY2xvbmUgPT09IHRydWUsIHRydWUsIGFyZ3VtZW50cyk7XHJcblxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIENsb25lIHRoZSBpbnB1dCByZW1vdmluZyBhbnkgcmVmZXJlbmNlXHJcblx0ICogQHBhcmFtIG1peGVkIGlucHV0XHJcblx0ICogQHJldHVybiBtaXhlZFxyXG5cdCAqL1xyXG5cclxuXHRQdWJsaWMuY2xvbmUgPSBmdW5jdGlvbihpbnB1dCkge1xyXG5cclxuXHRcdHZhciBvdXRwdXQgPSBpbnB1dCxcclxuXHRcdFx0dHlwZSA9IHR5cGVPZihpbnB1dCksXHJcblx0XHRcdGluZGV4LCBzaXplO1xyXG5cclxuXHRcdGlmICh0eXBlID09PSAnYXJyYXknKSB7XHJcblxyXG5cdFx0XHRvdXRwdXQgPSBbXTtcclxuXHRcdFx0c2l6ZSA9IGlucHV0Lmxlbmd0aDtcclxuXHJcblx0XHRcdGZvciAoaW5kZXg9MDtpbmRleDxzaXplOysraW5kZXgpXHJcblxyXG5cdFx0XHRcdG91dHB1dFtpbmRleF0gPSBQdWJsaWMuY2xvbmUoaW5wdXRbaW5kZXhdKTtcclxuXHJcblx0XHR9IGVsc2UgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XHJcblxyXG5cdFx0XHRvdXRwdXQgPSB7fTtcclxuXHJcblx0XHRcdGZvciAoaW5kZXggaW4gaW5wdXQpXHJcblxyXG5cdFx0XHRcdG91dHB1dFtpbmRleF0gPSBQdWJsaWMuY2xvbmUoaW5wdXRbaW5kZXhdKTtcclxuXHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG91dHB1dDtcclxuXHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogTWVyZ2UgdHdvIG9iamVjdHMgcmVjdXJzaXZlbHlcclxuXHQgKiBAcGFyYW0gbWl4ZWQgaW5wdXRcclxuXHQgKiBAcGFyYW0gbWl4ZWQgZXh0ZW5kXHJcblx0ICogQHJldHVybiBtaXhlZFxyXG5cdCAqL1xyXG5cclxuXHRmdW5jdGlvbiBtZXJnZV9yZWN1cnNpdmUoYmFzZSwgZXh0ZW5kKSB7XHJcblxyXG5cdFx0aWYgKHR5cGVPZihiYXNlKSAhPT0gJ29iamVjdCcpXHJcblxyXG5cdFx0XHRyZXR1cm4gZXh0ZW5kO1xyXG5cclxuXHRcdGZvciAodmFyIGtleSBpbiBleHRlbmQpIHtcclxuXHJcblx0XHRcdGlmICh0eXBlT2YoYmFzZVtrZXldKSA9PT0gJ29iamVjdCcgJiYgdHlwZU9mKGV4dGVuZFtrZXldKSA9PT0gJ29iamVjdCcpIHtcclxuXHJcblx0XHRcdFx0YmFzZVtrZXldID0gbWVyZ2VfcmVjdXJzaXZlKGJhc2Vba2V5XSwgZXh0ZW5kW2tleV0pO1xyXG5cclxuXHRcdFx0fSBlbHNlIHtcclxuXHJcblx0XHRcdFx0YmFzZVtrZXldID0gZXh0ZW5kW2tleV07XHJcblxyXG5cdFx0XHR9XHJcblxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBiYXNlO1xyXG5cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIE1lcmdlIHR3byBvciBtb3JlIG9iamVjdHNcclxuXHQgKiBAcGFyYW0gYm9vbCBjbG9uZVxyXG5cdCAqIEBwYXJhbSBib29sIHJlY3Vyc2l2ZVxyXG5cdCAqIEBwYXJhbSBhcnJheSBhcmd2XHJcblx0ICogQHJldHVybiBvYmplY3RcclxuXHQgKi9cclxuXHJcblx0ZnVuY3Rpb24gbWVyZ2UoY2xvbmUsIHJlY3Vyc2l2ZSwgYXJndikge1xyXG5cclxuXHRcdHZhciByZXN1bHQgPSBhcmd2WzBdLFxyXG5cdFx0XHRzaXplID0gYXJndi5sZW5ndGg7XHJcblxyXG5cdFx0aWYgKGNsb25lIHx8IHR5cGVPZihyZXN1bHQpICE9PSAnb2JqZWN0JylcclxuXHJcblx0XHRcdHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAodmFyIGluZGV4PTA7aW5kZXg8c2l6ZTsrK2luZGV4KSB7XHJcblxyXG5cdFx0XHR2YXIgaXRlbSA9IGFyZ3ZbaW5kZXhdLFxyXG5cclxuXHRcdFx0XHR0eXBlID0gdHlwZU9mKGl0ZW0pO1xyXG5cclxuXHRcdFx0aWYgKHR5cGUgIT09ICdvYmplY3QnKSBjb250aW51ZTtcclxuXHJcblx0XHRcdGZvciAodmFyIGtleSBpbiBpdGVtKSB7XHJcblxyXG5cdFx0XHRcdGlmIChrZXkgPT09ICdfX3Byb3RvX18nKSBjb250aW51ZTtcclxuXHJcblx0XHRcdFx0dmFyIHNpdGVtID0gY2xvbmUgPyBQdWJsaWMuY2xvbmUoaXRlbVtrZXldKSA6IGl0ZW1ba2V5XTtcclxuXHJcblx0XHRcdFx0aWYgKHJlY3Vyc2l2ZSkge1xyXG5cclxuXHRcdFx0XHRcdHJlc3VsdFtrZXldID0gbWVyZ2VfcmVjdXJzaXZlKHJlc3VsdFtrZXldLCBzaXRlbSk7XHJcblxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblxyXG5cdFx0XHRcdFx0cmVzdWx0W2tleV0gPSBzaXRlbTtcclxuXHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0fVxyXG5cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCB0eXBlIG9mIHZhcmlhYmxlXHJcblx0ICogQHBhcmFtIG1peGVkIGlucHV0XHJcblx0ICogQHJldHVybiBzdHJpbmdcclxuXHQgKlxyXG5cdCAqIEBzZWUgaHR0cDovL2pzcGVyZi5jb20vdHlwZW9mdmFyXHJcblx0ICovXHJcblxyXG5cdGZ1bmN0aW9uIHR5cGVPZihpbnB1dCkge1xyXG5cclxuXHRcdHJldHVybiAoe30pLnRvU3RyaW5nLmNhbGwoaW5wdXQpLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuXHR9XHJcblxyXG5cdGlmIChpc05vZGUpIHtcclxuXHJcblx0XHRtb2R1bGUuZXhwb3J0cyA9IFB1YmxpYztcclxuXHJcblx0fSBlbHNlIHtcclxuXHJcblx0XHR3aW5kb3dbcHVibGljTmFtZV0gPSBQdWJsaWM7XHJcblxyXG5cdH1cclxuXHJcbn0pKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZSAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKTsiLCIvLyEgbW9tZW50LmpzXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAgIGdsb2JhbC5tb21lbnQgPSBmYWN0b3J5KClcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIGhvb2tDYWxsYmFjaztcblxuICAgIGZ1bmN0aW9uIGhvb2tzICgpIHtcbiAgICAgICAgcmV0dXJuIGhvb2tDYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgZG9uZSB0byByZWdpc3RlciB0aGUgbWV0aG9kIGNhbGxlZCB3aXRoIG1vbWVudCgpXG4gICAgLy8gd2l0aG91dCBjcmVhdGluZyBjaXJjdWxhciBkZXBlbmRlbmNpZXMuXG4gICAgZnVuY3Rpb24gc2V0SG9va0NhbGxiYWNrIChjYWxsYmFjaykge1xuICAgICAgICBob29rQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FycmF5KGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCBpbnN0YW5jZW9mIEFycmF5IHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgLy8gSUU4IHdpbGwgdHJlYXQgdW5kZWZpbmVkIGFuZCBudWxsIGFzIG9iamVjdCBpZiBpdCB3YXNuJ3QgZm9yXG4gICAgICAgIC8vIGlucHV0ICE9IG51bGxcbiAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3RFbXB0eShvYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikubGVuZ3RoID09PSAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBrO1xuICAgICAgICAgICAgZm9yIChrIGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVbmRlZmluZWQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09PSB2b2lkIDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNOdW1iZXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgTnVtYmVyXSc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEYXRlKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCBpbnN0YW5jZW9mIERhdGUgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hcChhcnIsIGZuKSB7XG4gICAgICAgIHZhciByZXMgPSBbXSwgaTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyci5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgcmVzLnB1c2goZm4oYXJyW2ldLCBpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYXNPd25Qcm9wKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLCBiKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRlbmQoYSwgYikge1xuICAgICAgICBmb3IgKHZhciBpIGluIGIpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGIsIGkpKSB7XG4gICAgICAgICAgICAgICAgYVtpXSA9IGJbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzT3duUHJvcChiLCAndG9TdHJpbmcnKSkge1xuICAgICAgICAgICAgYS50b1N0cmluZyA9IGIudG9TdHJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzT3duUHJvcChiLCAndmFsdWVPZicpKSB7XG4gICAgICAgICAgICBhLnZhbHVlT2YgPSBiLnZhbHVlT2Y7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVVEMgKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCB0cnVlKS51dGMoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZhdWx0UGFyc2luZ0ZsYWdzKCkge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGRlZXAgY2xvbmUgdGhpcyBvYmplY3QuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlbXB0eSAgICAgICAgICAgOiBmYWxzZSxcbiAgICAgICAgICAgIHVudXNlZFRva2VucyAgICA6IFtdLFxuICAgICAgICAgICAgdW51c2VkSW5wdXQgICAgIDogW10sXG4gICAgICAgICAgICBvdmVyZmxvdyAgICAgICAgOiAtMixcbiAgICAgICAgICAgIGNoYXJzTGVmdE92ZXIgICA6IDAsXG4gICAgICAgICAgICBudWxsSW5wdXQgICAgICAgOiBmYWxzZSxcbiAgICAgICAgICAgIGludmFsaWRNb250aCAgICA6IG51bGwsXG4gICAgICAgICAgICBpbnZhbGlkRm9ybWF0ICAgOiBmYWxzZSxcbiAgICAgICAgICAgIHVzZXJJbnZhbGlkYXRlZCA6IGZhbHNlLFxuICAgICAgICAgICAgaXNvICAgICAgICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgICBwYXJzZWREYXRlUGFydHMgOiBbXSxcbiAgICAgICAgICAgIG1lcmlkaWVtICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICByZmMyODIyICAgICAgICAgOiBmYWxzZSxcbiAgICAgICAgICAgIHdlZWtkYXlNaXNtYXRjaCA6IGZhbHNlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2luZ0ZsYWdzKG0pIHtcbiAgICAgICAgaWYgKG0uX3BmID09IG51bGwpIHtcbiAgICAgICAgICAgIG0uX3BmID0gZGVmYXVsdFBhcnNpbmdGbGFncygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtLl9wZjtcbiAgICB9XG5cbiAgICB2YXIgc29tZTtcbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLnNvbWUpIHtcbiAgICAgICAgc29tZSA9IEFycmF5LnByb3RvdHlwZS5zb21lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNvbWUgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgICAgICAgICB2YXIgdCA9IE9iamVjdCh0aGlzKTtcbiAgICAgICAgICAgIHZhciBsZW4gPSB0Lmxlbmd0aCA+Pj4gMDtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpIGluIHQgJiYgZnVuLmNhbGwodGhpcywgdFtpXSwgaSwgdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZChtKSB7XG4gICAgICAgIGlmIChtLl9pc1ZhbGlkID09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBmbGFncyA9IGdldFBhcnNpbmdGbGFncyhtKTtcbiAgICAgICAgICAgIHZhciBwYXJzZWRQYXJ0cyA9IHNvbWUuY2FsbChmbGFncy5wYXJzZWREYXRlUGFydHMsIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgIT0gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIGlzTm93VmFsaWQgPSAhaXNOYU4obS5fZC5nZXRUaW1lKCkpICYmXG4gICAgICAgICAgICAgICAgZmxhZ3Mub3ZlcmZsb3cgPCAwICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmVtcHR5ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRNb250aCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkV2Vla2RheSAmJlxuICAgICAgICAgICAgICAgICFmbGFncy53ZWVrZGF5TWlzbWF0Y2ggJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MubnVsbElucHV0ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRGb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MudXNlckludmFsaWRhdGVkICYmXG4gICAgICAgICAgICAgICAgKCFmbGFncy5tZXJpZGllbSB8fCAoZmxhZ3MubWVyaWRpZW0gJiYgcGFyc2VkUGFydHMpKTtcblxuICAgICAgICAgICAgaWYgKG0uX3N0cmljdCkge1xuICAgICAgICAgICAgICAgIGlzTm93VmFsaWQgPSBpc05vd1ZhbGlkICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmNoYXJzTGVmdE92ZXIgPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MudW51c2VkVG9rZW5zLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy5iaWdIb3VyID09PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChPYmplY3QuaXNGcm96ZW4gPT0gbnVsbCB8fCAhT2JqZWN0LmlzRnJvemVuKG0pKSB7XG4gICAgICAgICAgICAgICAgbS5faXNWYWxpZCA9IGlzTm93VmFsaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNOb3dWYWxpZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkIChmbGFncykge1xuICAgICAgICB2YXIgbSA9IGNyZWF0ZVVUQyhOYU4pO1xuICAgICAgICBpZiAoZmxhZ3MgIT0gbnVsbCkge1xuICAgICAgICAgICAgZXh0ZW5kKGdldFBhcnNpbmdGbGFncyhtKSwgZmxhZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLnVzZXJJbnZhbGlkYXRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBQbHVnaW5zIHRoYXQgYWRkIHByb3BlcnRpZXMgc2hvdWxkIGFsc28gYWRkIHRoZSBrZXkgaGVyZSAobnVsbCB2YWx1ZSksXG4gICAgLy8gc28gd2UgY2FuIHByb3Blcmx5IGNsb25lIG91cnNlbHZlcy5cbiAgICB2YXIgbW9tZW50UHJvcGVydGllcyA9IGhvb2tzLm1vbWVudFByb3BlcnRpZXMgPSBbXTtcblxuICAgIGZ1bmN0aW9uIGNvcHlDb25maWcodG8sIGZyb20pIHtcbiAgICAgICAgdmFyIGksIHByb3AsIHZhbDtcblxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2lzQU1vbWVudE9iamVjdCkpIHtcbiAgICAgICAgICAgIHRvLl9pc0FNb21lbnRPYmplY3QgPSBmcm9tLl9pc0FNb21lbnRPYmplY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9pKSkge1xuICAgICAgICAgICAgdG8uX2kgPSBmcm9tLl9pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fZikpIHtcbiAgICAgICAgICAgIHRvLl9mID0gZnJvbS5fZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2wpKSB7XG4gICAgICAgICAgICB0by5fbCA9IGZyb20uX2w7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9zdHJpY3QpKSB7XG4gICAgICAgICAgICB0by5fc3RyaWN0ID0gZnJvbS5fc3RyaWN0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fdHptKSkge1xuICAgICAgICAgICAgdG8uX3R6bSA9IGZyb20uX3R6bTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2lzVVRDKSkge1xuICAgICAgICAgICAgdG8uX2lzVVRDID0gZnJvbS5faXNVVEM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9vZmZzZXQpKSB7XG4gICAgICAgICAgICB0by5fb2Zmc2V0ID0gZnJvbS5fb2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fcGYpKSB7XG4gICAgICAgICAgICB0by5fcGYgPSBnZXRQYXJzaW5nRmxhZ3MoZnJvbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9sb2NhbGUpKSB7XG4gICAgICAgICAgICB0by5fbG9jYWxlID0gZnJvbS5fbG9jYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vbWVudFByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG1vbWVudFByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gbW9tZW50UHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgICAgICB2YWwgPSBmcm9tW3Byb3BdO1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQodmFsKSkge1xuICAgICAgICAgICAgICAgICAgICB0b1twcm9wXSA9IHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxuXG4gICAgdmFyIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgIC8vIE1vbWVudCBwcm90b3R5cGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gTW9tZW50KGNvbmZpZykge1xuICAgICAgICBjb3B5Q29uZmlnKHRoaXMsIGNvbmZpZyk7XG4gICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShjb25maWcuX2QgIT0gbnVsbCA/IGNvbmZpZy5fZC5nZXRUaW1lKCkgOiBOYU4pO1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICB0aGlzLl9kID0gbmV3IERhdGUoTmFOKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBQcmV2ZW50IGluZmluaXRlIGxvb3AgaW4gY2FzZSB1cGRhdGVPZmZzZXQgY3JlYXRlcyBuZXcgbW9tZW50XG4gICAgICAgIC8vIG9iamVjdHMuXG4gICAgICAgIGlmICh1cGRhdGVJblByb2dyZXNzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdXBkYXRlSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc01vbWVudCAob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBNb21lbnQgfHwgKG9iaiAhPSBudWxsICYmIG9iai5faXNBTW9tZW50T2JqZWN0ICE9IG51bGwpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFic0Zsb29yIChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIC8vIC0wIC0+IDBcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwobnVtYmVyKSB8fCAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSW50KGFyZ3VtZW50Rm9yQ29lcmNpb24pIHtcbiAgICAgICAgdmFyIGNvZXJjZWROdW1iZXIgPSArYXJndW1lbnRGb3JDb2VyY2lvbixcbiAgICAgICAgICAgIHZhbHVlID0gMDtcblxuICAgICAgICBpZiAoY29lcmNlZE51bWJlciAhPT0gMCAmJiBpc0Zpbml0ZShjb2VyY2VkTnVtYmVyKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBhYnNGbG9vcihjb2VyY2VkTnVtYmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBjb21wYXJlIHR3byBhcnJheXMsIHJldHVybiB0aGUgbnVtYmVyIG9mIGRpZmZlcmVuY2VzXG4gICAgZnVuY3Rpb24gY29tcGFyZUFycmF5cyhhcnJheTEsIGFycmF5MiwgZG9udENvbnZlcnQpIHtcbiAgICAgICAgdmFyIGxlbiA9IE1hdGgubWluKGFycmF5MS5sZW5ndGgsIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICAgICAgbGVuZ3RoRGlmZiA9IE1hdGguYWJzKGFycmF5MS5sZW5ndGggLSBhcnJheTIubGVuZ3RoKSxcbiAgICAgICAgICAgIGRpZmZzID0gMCxcbiAgICAgICAgICAgIGk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaWYgKChkb250Q29udmVydCAmJiBhcnJheTFbaV0gIT09IGFycmF5MltpXSkgfHxcbiAgICAgICAgICAgICAgICAoIWRvbnRDb252ZXJ0ICYmIHRvSW50KGFycmF5MVtpXSkgIT09IHRvSW50KGFycmF5MltpXSkpKSB7XG4gICAgICAgICAgICAgICAgZGlmZnMrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGlmZnMgKyBsZW5ndGhEaWZmO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdhcm4obXNnKSB7XG4gICAgICAgIGlmIChob29rcy5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MgPT09IGZhbHNlICYmXG4gICAgICAgICAgICAgICAgKHR5cGVvZiBjb25zb2xlICE9PSAgJ3VuZGVmaW5lZCcpICYmIGNvbnNvbGUud2Fybikge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEZXByZWNhdGlvbiB3YXJuaW5nOiAnICsgbXNnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZShtc2csIGZuKSB7XG4gICAgICAgIHZhciBmaXJzdFRpbWUgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBleHRlbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyKG51bGwsIG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlyc3RUaW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICB2YXIgYXJnO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1tpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyArPSAnXFxuWycgKyBpICsgJ10gJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBhcmd1bWVudHNbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0ga2V5ICsgJzogJyArIGFyZ3VtZW50c1swXVtrZXldICsgJywgJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZy5zbGljZSgwLCAtMik7IC8vIFJlbW92ZSB0cmFpbGluZyBjb21tYSBhbmQgc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goYXJnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd2Fybihtc2cgKyAnXFxuQXJndW1lbnRzOiAnICsgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncykuam9pbignJykgKyAnXFxuJyArIChuZXcgRXJyb3IoKSkuc3RhY2spO1xuICAgICAgICAgICAgICAgIGZpcnN0VGltZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sIGZuKTtcbiAgICB9XG5cbiAgICB2YXIgZGVwcmVjYXRpb25zID0ge307XG5cbiAgICBmdW5jdGlvbiBkZXByZWNhdGVTaW1wbGUobmFtZSwgbXNnKSB7XG4gICAgICAgIGlmIChob29rcy5kZXByZWNhdGlvbkhhbmRsZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyKG5hbWUsIG1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkZXByZWNhdGlvbnNbbmFtZV0pIHtcbiAgICAgICAgICAgIHdhcm4obXNnKTtcbiAgICAgICAgICAgIGRlcHJlY2F0aW9uc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBob29rcy5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MgPSBmYWxzZTtcbiAgICBob29rcy5kZXByZWNhdGlvbkhhbmRsZXIgPSBudWxsO1xuXG4gICAgZnVuY3Rpb24gaXNGdW5jdGlvbihpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQgaW5zdGFuY2VvZiBGdW5jdGlvbiB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldCAoY29uZmlnKSB7XG4gICAgICAgIHZhciBwcm9wLCBpO1xuICAgICAgICBmb3IgKGkgaW4gY29uZmlnKSB7XG4gICAgICAgICAgICBwcm9wID0gY29uZmlnW2ldO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocHJvcCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzW2ldID0gcHJvcDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpc1snXycgKyBpXSA9IHByb3A7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xuICAgICAgICAvLyBMZW5pZW50IG9yZGluYWwgcGFyc2luZyBhY2NlcHRzIGp1c3QgYSBudW1iZXIgaW4gYWRkaXRpb24gdG9cbiAgICAgICAgLy8gbnVtYmVyICsgKHBvc3NpYmx5KSBzdHVmZiBjb21pbmcgZnJvbSBfZGF5T2ZNb250aE9yZGluYWxQYXJzZS5cbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIFwib3JkaW5hbFBhcnNlXCIgZmFsbGJhY2sgaW4gbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICB0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAodGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZS5zb3VyY2UgfHwgdGhpcy5fb3JkaW5hbFBhcnNlLnNvdXJjZSkgK1xuICAgICAgICAgICAgICAgICd8JyArICgvXFxkezEsMn0vKS5zb3VyY2UpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNoaWxkQ29uZmlnKSB7XG4gICAgICAgIHZhciByZXMgPSBleHRlbmQoe30sIHBhcmVudENvbmZpZyksIHByb3A7XG4gICAgICAgIGZvciAocHJvcCBpbiBjaGlsZENvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHBhcmVudENvbmZpZ1twcm9wXSkgJiYgaXNPYmplY3QoY2hpbGRDb25maWdbcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBwYXJlbnRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBjaGlsZENvbmZpZ1twcm9wXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZENvbmZpZ1twcm9wXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGNoaWxkQ29uZmlnW3Byb3BdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXNbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAocHJvcCBpbiBwYXJlbnRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKHBhcmVudENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICAgICAgIWhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApICYmXG4gICAgICAgICAgICAgICAgICAgIGlzT2JqZWN0KHBhcmVudENvbmZpZ1twcm9wXSkpIHtcbiAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgY2hhbmdlcyB0byBwcm9wZXJ0aWVzIGRvbid0IG1vZGlmeSBwYXJlbnQgY29uZmlnXG4gICAgICAgICAgICAgICAgcmVzW3Byb3BdID0gZXh0ZW5kKHt9LCByZXNbcHJvcF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gTG9jYWxlKGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cztcblxuICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAga2V5cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHZhciBpLCByZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChvYmosIGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRDYWxlbmRhciA9IHtcbiAgICAgICAgc2FtZURheSA6ICdbVG9kYXkgYXRdIExUJyxcbiAgICAgICAgbmV4dERheSA6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgbmV4dFdlZWsgOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgbGFzdERheSA6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXG4gICAgICAgIGxhc3RXZWVrIDogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICBzYW1lRWxzZSA6ICdMJ1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjYWxlbmRhciAoa2V5LCBtb20sIG5vdykge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fY2FsZW5kYXJba2V5XSB8fCB0aGlzLl9jYWxlbmRhclsnc2FtZUVsc2UnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24ob3V0cHV0KSA/IG91dHB1dC5jYWxsKG1vbSwgbm93KSA6IG91dHB1dDtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvbmdEYXRlRm9ybWF0ID0ge1xuICAgICAgICBMVFMgIDogJ2g6bW06c3MgQScsXG4gICAgICAgIExUICAgOiAnaDptbSBBJyxcbiAgICAgICAgTCAgICA6ICdNTS9ERC9ZWVlZJyxcbiAgICAgICAgTEwgICA6ICdNTU1NIEQsIFlZWVknLFxuICAgICAgICBMTEwgIDogJ01NTU0gRCwgWVlZWSBoOm1tIEEnLFxuICAgICAgICBMTExMIDogJ2RkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEEnXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvbmdEYXRlRm9ybWF0IChrZXkpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV0sXG4gICAgICAgICAgICBmb3JtYXRVcHBlciA9IHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleS50b1VwcGVyQ2FzZSgpXTtcblxuICAgICAgICBpZiAoZm9ybWF0IHx8ICFmb3JtYXRVcHBlcikge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV0gPSBmb3JtYXRVcHBlci5yZXBsYWNlKC9NTU1NfE1NfEREfGRkZGQvZywgZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbC5zbGljZSgxKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV07XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRJbnZhbGlkRGF0ZSA9ICdJbnZhbGlkIGRhdGUnO1xuXG4gICAgZnVuY3Rpb24gaW52YWxpZERhdGUgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52YWxpZERhdGU7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRPcmRpbmFsID0gJyVkJztcbiAgICB2YXIgZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UgPSAvXFxkezEsMn0vO1xuXG4gICAgZnVuY3Rpb24gb3JkaW5hbCAobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcmRpbmFsLnJlcGxhY2UoJyVkJywgbnVtYmVyKTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdFJlbGF0aXZlVGltZSA9IHtcbiAgICAgICAgZnV0dXJlIDogJ2luICVzJyxcbiAgICAgICAgcGFzdCAgIDogJyVzIGFnbycsXG4gICAgICAgIHMgIDogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICBzcyA6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgbSAgOiAnYSBtaW51dGUnLFxuICAgICAgICBtbSA6ICclZCBtaW51dGVzJyxcbiAgICAgICAgaCAgOiAnYW4gaG91cicsXG4gICAgICAgIGhoIDogJyVkIGhvdXJzJyxcbiAgICAgICAgZCAgOiAnYSBkYXknLFxuICAgICAgICBkZCA6ICclZCBkYXlzJyxcbiAgICAgICAgTSAgOiAnYSBtb250aCcsXG4gICAgICAgIE1NIDogJyVkIG1vbnRocycsXG4gICAgICAgIHkgIDogJ2EgeWVhcicsXG4gICAgICAgIHl5IDogJyVkIHllYXJzJ1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWUgKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW3N0cmluZ107XG4gICAgICAgIHJldHVybiAoaXNGdW5jdGlvbihvdXRwdXQpKSA/XG4gICAgICAgICAgICBvdXRwdXQobnVtYmVyLCB3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKSA6XG4gICAgICAgICAgICBvdXRwdXQucmVwbGFjZSgvJWQvaSwgbnVtYmVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXN0RnV0dXJlIChkaWZmLCBvdXRwdXQpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuX3JlbGF0aXZlVGltZVtkaWZmID4gMCA/ICdmdXR1cmUnIDogJ3Bhc3QnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oZm9ybWF0KSA/IGZvcm1hdChvdXRwdXQpIDogZm9ybWF0LnJlcGxhY2UoLyVzL2ksIG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFsaWFzZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFVuaXRBbGlhcyAodW5pdCwgc2hvcnRoYW5kKSB7XG4gICAgICAgIHZhciBsb3dlckNhc2UgPSB1bml0LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGFsaWFzZXNbbG93ZXJDYXNlXSA9IGFsaWFzZXNbbG93ZXJDYXNlICsgJ3MnXSA9IGFsaWFzZXNbc2hvcnRoYW5kXSA9IHVuaXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplVW5pdHModW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB1bml0cyA9PT0gJ3N0cmluZycgPyBhbGlhc2VzW3VuaXRzXSB8fCBhbGlhc2VzW3VuaXRzLnRvTG93ZXJDYXNlKCldIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZU9iamVjdFVuaXRzKGlucHV0T2JqZWN0KSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSB7fSxcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wLFxuICAgICAgICAgICAgcHJvcDtcblxuICAgICAgICBmb3IgKHByb3AgaW4gaW5wdXRPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGlucHV0T2JqZWN0LCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wID0gbm9ybWFsaXplVW5pdHMocHJvcCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRQcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRJbnB1dFtub3JtYWxpemVkUHJvcF0gPSBpbnB1dE9iamVjdFtwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9ybWFsaXplZElucHV0O1xuICAgIH1cblxuICAgIHZhciBwcmlvcml0aWVzID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRVbml0UHJpb3JpdHkodW5pdCwgcHJpb3JpdHkpIHtcbiAgICAgICAgcHJpb3JpdGllc1t1bml0XSA9IHByaW9yaXR5O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFByaW9yaXRpemVkVW5pdHModW5pdHNPYmopIHtcbiAgICAgICAgdmFyIHVuaXRzID0gW107XG4gICAgICAgIGZvciAodmFyIHUgaW4gdW5pdHNPYmopIHtcbiAgICAgICAgICAgIHVuaXRzLnB1c2goe3VuaXQ6IHUsIHByaW9yaXR5OiBwcmlvcml0aWVzW3VdfSk7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHVuaXRzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHplcm9GaWxsKG51bWJlciwgdGFyZ2V0TGVuZ3RoLCBmb3JjZVNpZ24pIHtcbiAgICAgICAgdmFyIGFic051bWJlciA9ICcnICsgTWF0aC5hYnMobnVtYmVyKSxcbiAgICAgICAgICAgIHplcm9zVG9GaWxsID0gdGFyZ2V0TGVuZ3RoIC0gYWJzTnVtYmVyLmxlbmd0aCxcbiAgICAgICAgICAgIHNpZ24gPSBudW1iZXIgPj0gMDtcbiAgICAgICAgcmV0dXJuIChzaWduID8gKGZvcmNlU2lnbiA/ICcrJyA6ICcnKSA6ICctJykgK1xuICAgICAgICAgICAgTWF0aC5wb3coMTAsIE1hdGgubWF4KDAsIHplcm9zVG9GaWxsKSkudG9TdHJpbmcoKS5zdWJzdHIoMSkgKyBhYnNOdW1iZXI7XG4gICAgfVxuXG4gICAgdmFyIGZvcm1hdHRpbmdUb2tlbnMgPSAvKFxcW1teXFxbXSpcXF0pfChcXFxcKT8oW0hoXW1tKHNzKT98TW98TU0/TT9NP3xEb3xERERvfEREP0Q/RD98ZGRkP2Q/fGRvP3x3W298d10/fFdbb3xXXT98UW8/fFlZWVlZWXxZWVlZWXxZWVlZfFlZfGdnKGdnZz8pP3xHRyhHR0c/KT98ZXxFfGF8QXxoaD98SEg/fGtrP3xtbT98c3M/fFN7MSw5fXx4fFh8eno/fFpaP3wuKS9nO1xuXG4gICAgdmFyIGxvY2FsRm9ybWF0dGluZ1Rva2VucyA9IC8oXFxbW15cXFtdKlxcXSl8KFxcXFwpPyhMVFN8TFR8TEw/TD9MP3xsezEsNH0pL2c7XG5cbiAgICB2YXIgZm9ybWF0RnVuY3Rpb25zID0ge307XG5cbiAgICB2YXIgZm9ybWF0VG9rZW5GdW5jdGlvbnMgPSB7fTtcblxuICAgIC8vIHRva2VuOiAgICAnTSdcbiAgICAvLyBwYWRkZWQ6ICAgWydNTScsIDJdXG4gICAgLy8gb3JkaW5hbDogICdNbydcbiAgICAvLyBjYWxsYmFjazogZnVuY3Rpb24gKCkgeyB0aGlzLm1vbnRoKCkgKyAxIH1cbiAgICBmdW5jdGlvbiBhZGRGb3JtYXRUb2tlbiAodG9rZW4sIHBhZGRlZCwgb3JkaW5hbCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBjYWxsYmFjaztcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGJhY2tdKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dID0gZnVuYztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFkZGVkKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1twYWRkZWRbMF1dID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB6ZXJvRmlsbChmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHBhZGRlZFsxXSwgcGFkZGVkWzJdKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9yZGluYWwpIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW29yZGluYWxdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgdG9rZW4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbW92ZUZvcm1hdHRpbmdUb2tlbnMoaW5wdXQpIHtcbiAgICAgICAgaWYgKGlucHV0Lm1hdGNoKC9cXFtbXFxzXFxTXS8pKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQucmVwbGFjZSgvXlxcW3xcXF0kL2csICcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5wdXQucmVwbGFjZSgvXFxcXC9nLCAnJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCkge1xuICAgICAgICB2YXIgYXJyYXkgPSBmb3JtYXQubWF0Y2goZm9ybWF0dGluZ1Rva2VucyksIGksIGxlbmd0aDtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gZm9ybWF0VG9rZW5GdW5jdGlvbnNbYXJyYXlbaV1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHJlbW92ZUZvcm1hdHRpbmdUb2tlbnMoYXJyYXlbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtb20pIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSAnJywgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSBpc0Z1bmN0aW9uKGFycmF5W2ldKSA/IGFycmF5W2ldLmNhbGwobW9tLCBmb3JtYXQpIDogYXJyYXlbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIGZvcm1hdCBkYXRlIHVzaW5nIG5hdGl2ZSBkYXRlIG9iamVjdFxuICAgIGZ1bmN0aW9uIGZvcm1hdE1vbWVudChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG0ubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBleHBhbmRGb3JtYXQoZm9ybWF0LCBtLmxvY2FsZURhdGEoKSk7XG4gICAgICAgIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdID0gZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gfHwgbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdKG0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4cGFuZEZvcm1hdChmb3JtYXQsIGxvY2FsZSkge1xuICAgICAgICB2YXIgaSA9IDU7XG5cbiAgICAgICAgZnVuY3Rpb24gcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLmxvbmdEYXRlRm9ybWF0KGlucHV0KSB8fCBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAoaSA+PSAwICYmIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKGxvY2FsRm9ybWF0dGluZ1Rva2VucywgcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zKTtcbiAgICAgICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgICAgaSAtPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICB9XG5cbiAgICB2YXIgbWF0Y2gxICAgICAgICAgPSAvXFxkLzsgICAgICAgICAgICAvLyAgICAgICAwIC0gOVxuICAgIHZhciBtYXRjaDIgICAgICAgICA9IC9cXGRcXGQvOyAgICAgICAgICAvLyAgICAgIDAwIC0gOTlcbiAgICB2YXIgbWF0Y2gzICAgICAgICAgPSAvXFxkezN9LzsgICAgICAgICAvLyAgICAgMDAwIC0gOTk5XG4gICAgdmFyIG1hdGNoNCAgICAgICAgID0gL1xcZHs0fS87ICAgICAgICAgLy8gICAgMDAwMCAtIDk5OTlcbiAgICB2YXIgbWF0Y2g2ICAgICAgICAgPSAvWystXT9cXGR7Nn0vOyAgICAvLyAtOTk5OTk5IC0gOTk5OTk5XG4gICAgdmFyIG1hdGNoMXRvMiAgICAgID0gL1xcZFxcZD8vOyAgICAgICAgIC8vICAgICAgIDAgLSA5OVxuICAgIHZhciBtYXRjaDN0bzQgICAgICA9IC9cXGRcXGRcXGRcXGQ/LzsgICAgIC8vICAgICA5OTkgLSA5OTk5XG4gICAgdmFyIG1hdGNoNXRvNiAgICAgID0gL1xcZFxcZFxcZFxcZFxcZFxcZD8vOyAvLyAgIDk5OTk5IC0gOTk5OTk5XG4gICAgdmFyIG1hdGNoMXRvMyAgICAgID0gL1xcZHsxLDN9LzsgICAgICAgLy8gICAgICAgMCAtIDk5OVxuICAgIHZhciBtYXRjaDF0bzQgICAgICA9IC9cXGR7MSw0fS87ICAgICAgIC8vICAgICAgIDAgLSA5OTk5XG4gICAgdmFyIG1hdGNoMXRvNiAgICAgID0gL1srLV0/XFxkezEsNn0vOyAgLy8gLTk5OTk5OSAtIDk5OTk5OVxuXG4gICAgdmFyIG1hdGNoVW5zaWduZWQgID0gL1xcZCsvOyAgICAgICAgICAgLy8gICAgICAgMCAtIGluZlxuICAgIHZhciBtYXRjaFNpZ25lZCAgICA9IC9bKy1dP1xcZCsvOyAgICAgIC8vICAgIC1pbmYgLSBpbmZcblxuICAgIHZhciBtYXRjaE9mZnNldCAgICA9IC9afFsrLV1cXGRcXGQ6P1xcZFxcZC9naTsgLy8gKzAwOjAwIC0wMDowMCArMDAwMCAtMDAwMCBvciBaXG4gICAgdmFyIG1hdGNoU2hvcnRPZmZzZXQgPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy9naTsgLy8gKzAwIC0wMCArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcblxuICAgIHZhciBtYXRjaFRpbWVzdGFtcCA9IC9bKy1dP1xcZCsoXFwuXFxkezEsM30pPy87IC8vIDEyMzQ1Njc4OSAxMjM0NTY3ODkuMTIzXG5cbiAgICAvLyBhbnkgd29yZCAob3IgdHdvKSBjaGFyYWN0ZXJzIG9yIG51bWJlcnMgaW5jbHVkaW5nIHR3by90aHJlZSB3b3JkIG1vbnRoIGluIGFyYWJpYy5cbiAgICAvLyBpbmNsdWRlcyBzY290dGlzaCBnYWVsaWMgdHdvIHdvcmQgYW5kIGh5cGhlbmF0ZWQgbW9udGhzXG4gICAgdmFyIG1hdGNoV29yZCA9IC9bMC05XXswLDI1Nn1bJ2EtelxcdTAwQTAtXFx1MDVGRlxcdTA3MDAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkYwN1xcdUZGMTAtXFx1RkZFRl17MSwyNTZ9fFtcXHUwNjAwLVxcdTA2RkZcXC9dezEsMjU2fShcXHMqP1tcXHUwNjAwLVxcdTA2RkZdezEsMjU2fSl7MSwyfS9pO1xuXG4gICAgdmFyIHJlZ2V4ZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFJlZ2V4VG9rZW4gKHRva2VuLCByZWdleCwgc3RyaWN0UmVnZXgpIHtcbiAgICAgICAgcmVnZXhlc1t0b2tlbl0gPSBpc0Z1bmN0aW9uKHJlZ2V4KSA/IHJlZ2V4IDogZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGVEYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gKGlzU3RyaWN0ICYmIHN0cmljdFJlZ2V4KSA/IHN0cmljdFJlZ2V4IDogcmVnZXg7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2VSZWdleEZvclRva2VuICh0b2tlbiwgY29uZmlnKSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcChyZWdleGVzLCB0b2tlbikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHVuZXNjYXBlRm9ybWF0KHRva2VuKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVnZXhlc1t0b2tlbl0oY29uZmlnLl9zdHJpY3QsIGNvbmZpZy5fbG9jYWxlKTtcbiAgICB9XG5cbiAgICAvLyBDb2RlIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zNTYxNDkzL2lzLXRoZXJlLWEtcmVnZXhwLWVzY2FwZS1mdW5jdGlvbi1pbi1qYXZhc2NyaXB0XG4gICAgZnVuY3Rpb24gdW5lc2NhcGVGb3JtYXQocykge1xuICAgICAgICByZXR1cm4gcmVnZXhFc2NhcGUocy5yZXBsYWNlKCdcXFxcJywgJycpLnJlcGxhY2UoL1xcXFwoXFxbKXxcXFxcKFxcXSl8XFxbKFteXFxdXFxbXSopXFxdfFxcXFwoLikvZywgZnVuY3Rpb24gKG1hdGNoZWQsIHAxLCBwMiwgcDMsIHA0KSB7XG4gICAgICAgICAgICByZXR1cm4gcDEgfHwgcDIgfHwgcDMgfHwgcDQ7XG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWdleEVzY2FwZShzKSB7XG4gICAgICAgIHJldHVybiBzLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xuICAgIH1cblxuICAgIHZhciB0b2tlbnMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFBhcnNlVG9rZW4gKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgaSwgZnVuYyA9IGNhbGxiYWNrO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdG9rZW4gPSBbdG9rZW5dO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc051bWJlcihjYWxsYmFjaykpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbY2FsbGJhY2tdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG9rZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRva2Vuc1t0b2tlbltpXV0gPSBmdW5jO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkV2Vla1BhcnNlVG9rZW4gKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICBjb25maWcuX3cgPSBjb25maWcuX3cgfHwge307XG4gICAgICAgICAgICBjYWxsYmFjayhpbnB1dCwgY29uZmlnLl93LCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIGlucHV0LCBjb25maWcpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwgJiYgaGFzT3duUHJvcCh0b2tlbnMsIHRva2VuKSkge1xuICAgICAgICAgICAgdG9rZW5zW3Rva2VuXShpbnB1dCwgY29uZmlnLl9hLCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBZRUFSID0gMDtcbiAgICB2YXIgTU9OVEggPSAxO1xuICAgIHZhciBEQVRFID0gMjtcbiAgICB2YXIgSE9VUiA9IDM7XG4gICAgdmFyIE1JTlVURSA9IDQ7XG4gICAgdmFyIFNFQ09ORCA9IDU7XG4gICAgdmFyIE1JTExJU0VDT05EID0gNjtcbiAgICB2YXIgV0VFSyA9IDc7XG4gICAgdmFyIFdFRUtEQVkgPSA4O1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1knLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB5ID0gdGhpcy55ZWFyKCk7XG4gICAgICAgIHJldHVybiB5IDw9IDk5OTkgPyAnJyArIHkgOiAnKycgKyB5O1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWScsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnllYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVlZWScsICAgNF0sICAgICAgIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWScsICA1XSwgICAgICAgMCwgJ3llYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVlZWScsIDYsIHRydWVdLCAwLCAneWVhcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCd5ZWFyJywgJ3knKTtcblxuICAgIC8vIFBSSU9SSVRJRVNcblxuICAgIGFkZFVuaXRQcmlvcml0eSgneWVhcicsIDEpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignWScsICAgICAgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZJywgICAgIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZJywgICBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWVknLCAgbWF0Y2gxdG82LCBtYXRjaDYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZWVlZWScsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydZWVlZWScsICdZWVlZWVknXSwgWUVBUik7XG4gICAgYWRkUGFyc2VUb2tlbignWVlZWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBpbnB1dC5sZW5ndGggPT09IDIgPyBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCkgOiB0b0ludChpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1knLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIGZ1bmN0aW9uIGRheXNJblllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih5ZWFyKSA/IDM2NiA6IDM2NTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0xlYXBZZWFyKHllYXIpIHtcbiAgICAgICAgcmV0dXJuICh5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwKSB8fCB5ZWFyICUgNDAwID09PSAwO1xuICAgIH1cblxuICAgIC8vIEhPT0tTXG5cbiAgICBob29rcy5wYXJzZVR3b0RpZ2l0WWVhciA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gdG9JbnQoaW5wdXQpICsgKHRvSW50KGlucHV0KSA+IDY4ID8gMTkwMCA6IDIwMDApO1xuICAgIH07XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0WWVhciA9IG1ha2VHZXRTZXQoJ0Z1bGxZZWFyJywgdHJ1ZSk7XG5cbiAgICBmdW5jdGlvbiBnZXRJc0xlYXBZZWFyICgpIHtcbiAgICAgICAgcmV0dXJuIGlzTGVhcFllYXIodGhpcy55ZWFyKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXRTZXQgKHVuaXQsIGtlZXBUaW1lKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgc2V0JDEodGhpcywgdW5pdCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCBrZWVwVGltZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXQodGhpcywgdW5pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0IChtb20sIHVuaXQpIHtcbiAgICAgICAgcmV0dXJuIG1vbS5pc1ZhbGlkKCkgP1xuICAgICAgICAgICAgbW9tLl9kWydnZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArIHVuaXRdKCkgOiBOYU47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0JDEgKG1vbSwgdW5pdCwgdmFsdWUpIHtcbiAgICAgICAgaWYgKG1vbS5pc1ZhbGlkKCkgJiYgIWlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKHVuaXQgPT09ICdGdWxsWWVhcicgJiYgaXNMZWFwWWVhcihtb20ueWVhcigpKSAmJiBtb20ubW9udGgoKSA9PT0gMSAmJiBtb20uZGF0ZSgpID09PSAyOSkge1xuICAgICAgICAgICAgICAgIG1vbS5fZFsnc2V0JyArIChtb20uX2lzVVRDID8gJ1VUQycgOiAnJykgKyB1bml0XSh2YWx1ZSwgbW9tLm1vbnRoKCksIGRheXNJbk1vbnRoKHZhbHVlLCBtb20ubW9udGgoKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbW9tLl9kWydzZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArIHVuaXRdKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIHN0cmluZ0dldCAodW5pdHMpIHtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXNbdW5pdHNdKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbdW5pdHNdKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBzdHJpbmdTZXQgKHVuaXRzLCB2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHVuaXRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdW5pdHMgPSBub3JtYWxpemVPYmplY3RVbml0cyh1bml0cyk7XG4gICAgICAgICAgICB2YXIgcHJpb3JpdGl6ZWQgPSBnZXRQcmlvcml0aXplZFVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJpb3JpdGl6ZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzW3ByaW9yaXRpemVkW2ldLnVuaXRdKHVuaXRzW3ByaW9yaXRpemVkW2ldLnVuaXRdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24odGhpc1t1bml0c10pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbdW5pdHNdKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb2QobiwgeCkge1xuICAgICAgICByZXR1cm4gKChuICUgeCkgKyB4KSAlIHg7XG4gICAgfVxuXG4gICAgdmFyIGluZGV4T2Y7XG5cbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLmluZGV4T2YpIHtcbiAgICAgICAgaW5kZXhPZiA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGluZGV4T2YgPSBmdW5jdGlvbiAobykge1xuICAgICAgICAgICAgLy8gSSBrbm93XG4gICAgICAgICAgICB2YXIgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXNbaV0gPT09IG8pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICAgIGlmIChpc05hTih5ZWFyKSB8fCBpc05hTihtb250aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG1vZE1vbnRoID0gbW9kKG1vbnRoLCAxMik7XG4gICAgICAgIHllYXIgKz0gKG1vbnRoIC0gbW9kTW9udGgpIC8gMTI7XG4gICAgICAgIHJldHVybiBtb2RNb250aCA9PT0gMSA/IChpc0xlYXBZZWFyKHllYXIpID8gMjkgOiAyOCkgOiAoMzEgLSBtb2RNb250aCAlIDcgJSAyKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignTScsIFsnTU0nLCAyXSwgJ01vJywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb250aCgpICsgMTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNTU0nLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHNTaG9ydCh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ01NTU0nLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHModGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnbW9udGgnLCAnTScpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnbW9udGgnLCA4KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ00nLCAgICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NJywgICBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignTU1NJywgIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUubW9udGhzU2hvcnRSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignTU1NTScsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUubW9udGhzUmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ00nLCAnTU0nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNT05USF0gPSB0b0ludChpbnB1dCkgLSAxO1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ01NTScsICdNTU1NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgdmFyIG1vbnRoID0gY29uZmlnLl9sb2NhbGUubW9udGhzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBmaW5kIGEgbW9udGggbmFtZSwgbWFyayB0aGUgZGF0ZSBhcyBpbnZhbGlkLlxuICAgICAgICBpZiAobW9udGggIT0gbnVsbCkge1xuICAgICAgICAgICAgYXJyYXlbTU9OVEhdID0gbW9udGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkTW9udGggPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgdmFyIE1PTlRIU19JTl9GT1JNQVQgPSAvRFtvRF0/KFxcW1teXFxbXFxdXSpcXF18XFxzKStNTU1NPy87XG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNb250aHMgPSAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoJ18nKTtcbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHMgKG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRocykgPyB0aGlzLl9tb250aHMgOlxuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1snc3RhbmRhbG9uZSddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRocykgPyB0aGlzLl9tb250aHNbbS5tb250aCgpXSA6XG4gICAgICAgICAgICB0aGlzLl9tb250aHNbKHRoaXMuX21vbnRocy5pc0Zvcm1hdCB8fCBNT05USFNfSU5fRk9STUFUKS50ZXN0KGZvcm1hdCkgPyAnZm9ybWF0JyA6ICdzdGFuZGFsb25lJ11bbS5tb250aCgpXTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0ID0gJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpO1xuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRoc1Nob3J0IChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydCkgPyB0aGlzLl9tb250aHNTaG9ydCA6XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRbJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydCkgPyB0aGlzLl9tb250aHNTaG9ydFttLm1vbnRoKCldIDpcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1Nob3J0W01PTlRIU19JTl9GT1JNQVQudGVzdChmb3JtYXQpID8gJ2Zvcm1hdCcgOiAnc3RhbmRhbG9uZSddW20ubW9udGgoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgaWksIG1vbSwgbGxjID0gbW9udGhOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5fbW9udGhzUGFyc2UpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHVzZWRcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgKytpKSB7XG4gICAgICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0gPSB0aGlzLm1vbnRocyhtb20sICcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ01NTScpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ01NTScpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHNQYXJzZSAobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgbW9tLCByZWdleDtcblxuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVN0cmljdFBhcnNlLmNhbGwodGhpcywgbW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX21vbnRoc1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiBhZGQgc29ydGluZ1xuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyXG4gICAgICAgIC8vIHNlZSBzb3J0aW5nIGluIGNvbXB1dGVNb250aHNQYXJzZVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoJ14nICsgdGhpcy5tb250aHMobW9tLCAnJykucmVwbGFjZSgnLicsICcnKSArICckJywgJ2knKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cCgnXicgKyB0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsICdpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0cmljdCAmJiAhdGhpcy5fbW9udGhzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICByZWdleCA9ICdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpICsgJ3xeJyArIHRoaXMubW9udGhzU2hvcnQobW9tLCAnJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKHJlZ2V4LnJlcGxhY2UoJy4nLCAnJyksICdpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0ZXN0IHRoZSByZWdleFxuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBmb3JtYXQgPT09ICdNTU1NJyAmJiB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmljdCAmJiBmb3JtYXQgPT09ICdNTU0nICYmIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJpY3QgJiYgdGhpcy5fbW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBzZXRNb250aCAobW9tLCB2YWx1ZSkge1xuICAgICAgICB2YXIgZGF5T2ZNb250aDtcblxuICAgICAgICBpZiAoIW1vbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIE5vIG9wXG4gICAgICAgICAgICByZXR1cm4gbW9tO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICgvXlxcZCskLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdG9JbnQodmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vbS5sb2NhbGVEYXRhKCkubW9udGhzUGFyc2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IEFub3RoZXIgc2lsZW50IGZhaWx1cmU/XG4gICAgICAgICAgICAgICAgaWYgKCFpc051bWJlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkYXlPZk1vbnRoID0gTWF0aC5taW4obW9tLmRhdGUoKSwgZGF5c0luTW9udGgobW9tLnllYXIoKSwgdmFsdWUpKTtcbiAgICAgICAgbW9tLl9kWydzZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArICdNb250aCddKHZhbHVlLCBkYXlPZk1vbnRoKTtcbiAgICAgICAgcmV0dXJuIG1vbTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRNb250aCAodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNldE1vbnRoKHRoaXMsIHZhbHVlKTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCAnTW9udGgnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERheXNJbk1vbnRoICgpIHtcbiAgICAgICAgcmV0dXJuIGRheXNJbk1vbnRoKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCkpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TW9udGhzU2hvcnRSZWdleCA9IG1hdGNoV29yZDtcbiAgICBmdW5jdGlvbiBtb250aHNTaG9ydFJlZ2V4IChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVNb250aHNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRSZWdleCA9IGRlZmF1bHRNb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3QgP1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXggOiB0aGlzLl9tb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRNb250aHNSZWdleCA9IG1hdGNoV29yZDtcbiAgICBmdW5jdGlvbiBtb250aHNSZWdleCAoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlTW9udGhzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1JlZ2V4ID0gZGVmYXVsdE1vbnRoc1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4ICYmIGlzU3RyaWN0ID9cbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNTdHJpY3RSZWdleCA6IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZU1vbnRoc1BhcnNlICgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNob3J0UGllY2VzID0gW10sIGxvbmdQaWVjZXMgPSBbXSwgbWl4ZWRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGksIG1vbTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICBzaG9ydFBpZWNlcy5wdXNoKHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykpO1xuICAgICAgICAgICAgbG9uZ1BpZWNlcy5wdXNoKHRoaXMubW9udGhzKG1vbSwgJycpKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2godGhpcy5tb250aHMobW9tLCAnJykpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaCh0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyIGl0XG4gICAgICAgIC8vIHdpbGwgbWF0Y2ggdGhlIGxvbmdlciBwaWVjZS5cbiAgICAgICAgc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBsb25nUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbWl4ZWRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgc2hvcnRQaWVjZXNbaV0gPSByZWdleEVzY2FwZShzaG9ydFBpZWNlc1tpXSk7XG4gICAgICAgICAgICBsb25nUGllY2VzW2ldID0gcmVnZXhFc2NhcGUobG9uZ1BpZWNlc1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDI0OyBpKyspIHtcbiAgICAgICAgICAgIG1peGVkUGllY2VzW2ldID0gcmVnZXhFc2NhcGUobWl4ZWRQaWVjZXNbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbW9udGhzUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBtaXhlZFBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX21vbnRoc1Nob3J0UmVnZXggPSB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgdGhpcy5fbW9udGhzU3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIHNob3J0UGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEYXRlICh5LCBtLCBkLCBoLCBNLCBzLCBtcykge1xuICAgICAgICAvLyBjYW4ndCBqdXN0IGFwcGx5KCkgdG8gY3JlYXRlIGEgZGF0ZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xLzE4MTM0OFxuICAgICAgICB2YXIgZGF0ZTtcbiAgICAgICAgLy8gdGhlIGRhdGUgY29uc3RydWN0b3IgcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh5ICsgNDAwLCBtLCBkLCBoLCBNLCBzLCBtcyk7XG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUoZGF0ZS5nZXRGdWxsWWVhcigpKSkge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RnVsbFllYXIoeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoeSwgbSwgZCwgaCwgTSwgcywgbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlVVRDRGF0ZSAoeSkge1xuICAgICAgICB2YXIgZGF0ZTtcbiAgICAgICAgLy8gdGhlIERhdGUuVVRDIGZ1bmN0aW9uIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICBhcmdzWzBdID0geSArIDQwMDtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLCBhcmdzKSk7XG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUoZGF0ZS5nZXRVVENGdWxsWWVhcigpKSkge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICAvLyBzdGFydC1vZi1maXJzdC13ZWVrIC0gc3RhcnQtb2YteWVhclxuICAgIGZ1bmN0aW9uIGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgLy8gZmlyc3Qtd2VlayBkYXkgLS0gd2hpY2ggamFudWFyeSBpcyBhbHdheXMgaW4gdGhlIGZpcnN0IHdlZWsgKDQgZm9yIGlzbywgMSBmb3Igb3RoZXIpXG4gICAgICAgICAgICBmd2QgPSA3ICsgZG93IC0gZG95LFxuICAgICAgICAgICAgLy8gZmlyc3Qtd2VlayBkYXkgbG9jYWwgd2Vla2RheSAtLSB3aGljaCBsb2NhbCB3ZWVrZGF5IGlzIGZ3ZFxuICAgICAgICAgICAgZndkbHcgPSAoNyArIGNyZWF0ZVVUQ0RhdGUoeWVhciwgMCwgZndkKS5nZXRVVENEYXkoKSAtIGRvdykgJSA3O1xuXG4gICAgICAgIHJldHVybiAtZndkbHcgKyBmd2QgLSAxO1xuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGUjQ2FsY3VsYXRpbmdfYV9kYXRlX2dpdmVuX3RoZV95ZWFyLjJDX3dlZWtfbnVtYmVyX2FuZF93ZWVrZGF5XG4gICAgZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtzKHllYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciBsb2NhbFdlZWtkYXkgPSAoNyArIHdlZWtkYXkgLSBkb3cpICUgNyxcbiAgICAgICAgICAgIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF5T2ZZZWFyID0gMSArIDcgKiAod2VlayAtIDEpICsgbG9jYWxXZWVrZGF5ICsgd2Vla09mZnNldCxcbiAgICAgICAgICAgIHJlc1llYXIsIHJlc0RheU9mWWVhcjtcblxuICAgICAgICBpZiAoZGF5T2ZZZWFyIDw9IDApIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyIC0gMTtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheXNJblllYXIocmVzWWVhcikgKyBkYXlPZlllYXI7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF5T2ZZZWFyID4gZGF5c0luWWVhcih5ZWFyKSkge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXIgKyAxO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5T2ZZZWFyIC0gZGF5c0luWWVhcih5ZWFyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5T2ZZZWFyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHllYXI6IHJlc1llYXIsXG4gICAgICAgICAgICBkYXlPZlllYXI6IHJlc0RheU9mWWVhclxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtPZlllYXIobW9tLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldChtb20ueWVhcigpLCBkb3csIGRveSksXG4gICAgICAgICAgICB3ZWVrID0gTWF0aC5mbG9vcigobW9tLmRheU9mWWVhcigpIC0gd2Vla09mZnNldCAtIDEpIC8gNykgKyAxLFxuICAgICAgICAgICAgcmVzV2VlaywgcmVzWWVhcjtcblxuICAgICAgICBpZiAod2VlayA8IDEpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpIC0gMTtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrICsgd2Vla3NJblllYXIocmVzWWVhciwgZG93LCBkb3kpO1xuICAgICAgICB9IGVsc2UgaWYgKHdlZWsgPiB3ZWVrc0luWWVhcihtb20ueWVhcigpLCBkb3csIGRveSkpIHtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrIC0gd2Vla3NJblllYXIobW9tLnllYXIoKSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCkgKyAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCk7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3ZWVrOiByZXNXZWVrLFxuICAgICAgICAgICAgeWVhcjogcmVzWWVhclxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtzSW5ZZWFyKHllYXIsIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSxcbiAgICAgICAgICAgIHdlZWtPZmZzZXROZXh0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIgKyAxLCBkb3csIGRveSk7XG4gICAgICAgIHJldHVybiAoZGF5c0luWWVhcih5ZWFyKSAtIHdlZWtPZmZzZXQgKyB3ZWVrT2Zmc2V0TmV4dCkgLyA3O1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCd3JywgWyd3dycsIDJdLCAnd28nLCAnd2VlaycpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdXJywgWydXVycsIDJdLCAnV28nLCAnaXNvV2VlaycpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCd3ZWVrJywgJ3cnKTtcbiAgICBhZGRVbml0QWxpYXMoJ2lzb1dlZWsnLCAnVycpO1xuXG4gICAgLy8gUFJJT1JJVElFU1xuXG4gICAgYWRkVW5pdFByaW9yaXR5KCd3ZWVrJywgNSk7XG4gICAgYWRkVW5pdFByaW9yaXR5KCdpc29XZWVrJywgNSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCd3JywgIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignd3cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignVycsICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1dXJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWyd3JywgJ3d3JywgJ1cnLCAnV1cnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW4uc3Vic3RyKDAsIDEpXSA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWsgKG1vbSkge1xuICAgICAgICByZXR1cm4gd2Vla09mWWVhcihtb20sIHRoaXMuX3dlZWsuZG93LCB0aGlzLl93ZWVrLmRveSkud2VlaztcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWsgPSB7XG4gICAgICAgIGRvdyA6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3kgOiA2ICAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZXZWVrICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWsuZG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZZZWFyICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWsuZG95O1xuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWsgKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gdGhpcy5sb2NhbGVEYXRhKCkud2Vlayh0aGlzKTtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrIDogdGhpcy5hZGQoKGlucHV0IC0gd2VlaykgKiA3LCAnZCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT1dlZWsgKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gd2Vla09mWWVhcih0aGlzLCAxLCA0KS53ZWVrO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWsgOiB0aGlzLmFkZCgoaW5wdXQgLSB3ZWVrKSAqIDcsICdkJyk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2QnLCAwLCAnZG8nLCAnZGF5Jyk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c01pbih0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzU2hvcnQodGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXModGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdlJywgMCwgMCwgJ3dlZWtkYXknKTtcbiAgICBhZGRGb3JtYXRUb2tlbignRScsIDAsIDAsICdpc29XZWVrZGF5Jyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ2RheScsICdkJyk7XG4gICAgYWRkVW5pdEFsaWFzKCd3ZWVrZGF5JywgJ2UnKTtcbiAgICBhZGRVbml0QWxpYXMoJ2lzb1dlZWtkYXknLCAnRScpO1xuXG4gICAgLy8gUFJJT1JJVFlcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2RheScsIDExKTtcbiAgICBhZGRVbml0UHJpb3JpdHkoJ3dlZWtkYXknLCAxMSk7XG4gICAgYWRkVW5pdFByaW9yaXR5KCdpc29XZWVrZGF5JywgMTEpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignZCcsICAgIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignZScsICAgIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignRScsICAgIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignZGQnLCAgIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNNaW5SZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignZGRkJywgICBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignZGRkZCcsICAgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZGQnLCAnZGRkJywgJ2RkZGQnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciB3ZWVrZGF5ID0gY29uZmlnLl9sb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCwgdG9rZW4sIGNvbmZpZy5fc3RyaWN0KTtcbiAgICAgICAgLy8gaWYgd2UgZGlkbid0IGdldCBhIHdlZWtkYXkgbmFtZSwgbWFyayB0aGUgZGF0ZSBhcyBpbnZhbGlkXG4gICAgICAgIGlmICh3ZWVrZGF5ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHdlZWsuZCA9IHdlZWtkYXk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkV2Vla2RheSA9IGlucHV0O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2QnLCAnZScsICdFJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB3ZWVrW3Rva2VuXSA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIGZ1bmN0aW9uIHBhcnNlV2Vla2RheShpbnB1dCwgbG9jYWxlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzTmFOKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgICAgIH1cblxuICAgICAgICBpbnB1dCA9IGxvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0KTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlSXNvV2Vla2RheShpbnB1dCwgbG9jYWxlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQpICUgNyB8fCA3O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc05hTihpbnB1dCkgPyBudWxsIDogaW5wdXQ7XG4gICAgfVxuXG4gICAgLy8gTE9DQUxFU1xuICAgIGZ1bmN0aW9uIHNoaWZ0V2Vla2RheXMgKHdzLCBuKSB7XG4gICAgICAgIHJldHVybiB3cy5zbGljZShuLCA3KS5jb25jYXQod3Muc2xpY2UoMCwgbikpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2Vla2RheXMgPSAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KCdfJyk7XG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXMgKG0sIGZvcm1hdCkge1xuICAgICAgICB2YXIgd2Vla2RheXMgPSBpc0FycmF5KHRoaXMuX3dlZWtkYXlzKSA/IHRoaXMuX3dlZWtkYXlzIDpcbiAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzWyhtICYmIG0gIT09IHRydWUgJiYgdGhpcy5fd2Vla2RheXMuaXNGb3JtYXQudGVzdChmb3JtYXQpKSA/ICdmb3JtYXQnIDogJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgcmV0dXJuIChtID09PSB0cnVlKSA/IHNoaWZ0V2Vla2RheXMod2Vla2RheXMsIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiAobSkgPyB3ZWVrZGF5c1ttLmRheSgpXSA6IHdlZWtkYXlzO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCA9ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyk7XG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNTaG9ydCAobSkge1xuICAgICAgICByZXR1cm4gKG0gPT09IHRydWUpID8gc2hpZnRXZWVrZGF5cyh0aGlzLl93ZWVrZGF5c1Nob3J0LCB0aGlzLl93ZWVrLmRvdylcbiAgICAgICAgICAgIDogKG0pID8gdGhpcy5fd2Vla2RheXNTaG9ydFttLmRheSgpXSA6IHRoaXMuX3dlZWtkYXlzU2hvcnQ7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbiA9ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKTtcbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c01pbiAobSkge1xuICAgICAgICByZXR1cm4gKG0gPT09IHRydWUpID8gc2hpZnRXZWVrZGF5cyh0aGlzLl93ZWVrZGF5c01pbiwgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IChtKSA/IHRoaXMuX3dlZWtkYXlzTWluW20uZGF5KCldIDogdGhpcy5fd2Vla2RheXNNaW47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UkMSh3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksIGlpLCBtb20sIGxsYyA9IHdlZWtkYXlOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlID0gW107XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyArK2kpIHtcbiAgICAgICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXNNaW4obW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5cyhtb20sICcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2RkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdkZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNQYXJzZSAod2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLCBtb20sIHJlZ2V4O1xuXG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdHJpY3RQYXJzZSQxLmNhbGwodGhpcywgd2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG5cbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKCdeJyArIHRoaXMud2Vla2RheXMobW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJywgJ2knKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKCdeJyArIHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLCAnaScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKCdeJyArIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJywgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID0gJ14nICsgdGhpcy53ZWVrZGF5cyhtb20sICcnKSArICd8XicgKyB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykgKyAnfF4nICsgdGhpcy53ZWVrZGF5c01pbihtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGVzdCB0aGUgcmVnZXhcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgZm9ybWF0ID09PSAnZGRkZCcgJiYgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyaWN0ICYmIGZvcm1hdCA9PT0gJ2RkZCcgJiYgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmljdCAmJiBmb3JtYXQgPT09ICdkZCcgJiYgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mV2VlayAoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkYXkgPSB0aGlzLl9pc1VUQyA/IHRoaXMuX2QuZ2V0VVRDRGF5KCkgOiB0aGlzLl9kLmdldERheSgpO1xuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaW5wdXQgPSBwYXJzZVdlZWtkYXkoaW5wdXQsIHRoaXMubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZChpbnB1dCAtIGRheSwgJ2QnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBkYXk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRMb2NhbGVEYXlPZldlZWsgKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd2Vla2RheSA9ICh0aGlzLmRheSgpICsgNyAtIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdykgJSA3O1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWtkYXkgOiB0aGlzLmFkZChpbnB1dCAtIHdlZWtkYXksICdkJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPRGF5T2ZXZWVrIChpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiZWhhdmVzIHRoZSBzYW1lIGFzIG1vbWVudCNkYXkgZXhjZXB0XG4gICAgICAgIC8vIGFzIGEgZ2V0dGVyLCByZXR1cm5zIDcgaW5zdGVhZCBvZiAwICgxLTcgcmFuZ2UgaW5zdGVhZCBvZiAwLTYpXG4gICAgICAgIC8vIGFzIGEgc2V0dGVyLCBzdW5kYXkgc2hvdWxkIGJlbG9uZyB0byB0aGUgcHJldmlvdXMgd2Vlay5cblxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHdlZWtkYXkgPSBwYXJzZUlzb1dlZWtkYXkoaW5wdXQsIHRoaXMubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSh0aGlzLmRheSgpICUgNyA/IHdlZWtkYXkgOiB3ZWVrZGF5IC0gNyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXkoKSB8fCA3O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRXZWVrZGF5c1JlZ2V4ID0gbWF0Y2hXb3JkO1xuICAgIGZ1bmN0aW9uIHdlZWtkYXlzUmVnZXggKGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCAmJiBpc1N0cmljdCA/XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCA6IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleCA9IG1hdGNoV29yZDtcbiAgICBmdW5jdGlvbiB3ZWVrZGF5c1Nob3J0UmVnZXggKGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNTaG9ydFJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXggPSBkZWZhdWx0V2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCAmJiBpc1N0cmljdCA/XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4IDogdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4ID0gbWF0Y2hXb3JkO1xuICAgIGZ1bmN0aW9uIHdlZWtkYXlzTWluUmVnZXggKGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c01pblJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleCAmJiBpc1N0cmljdCA/XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleCA6IHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVXZWVrZGF5c1BhcnNlICgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblBpZWNlcyA9IFtdLCBzaG9ydFBpZWNlcyA9IFtdLCBsb25nUGllY2VzID0gW10sIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLCBtb20sIG1pbnAsIHNob3J0cCwgbG9uZ3A7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCAxXSkuZGF5KGkpO1xuICAgICAgICAgICAgbWlucCA9IHRoaXMud2Vla2RheXNNaW4obW9tLCAnJyk7XG4gICAgICAgICAgICBzaG9ydHAgPSB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJyk7XG4gICAgICAgICAgICBsb25ncCA9IHRoaXMud2Vla2RheXMobW9tLCAnJyk7XG4gICAgICAgICAgICBtaW5QaWVjZXMucHVzaChtaW5wKTtcbiAgICAgICAgICAgIHNob3J0UGllY2VzLnB1c2goc2hvcnRwKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXMucHVzaChsb25ncCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKG1pbnApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChzaG9ydHApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChsb25ncCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSB3ZWVrZGF5IChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyIGl0XG4gICAgICAgIC8vIHdpbGwgbWF0Y2ggdGhlIGxvbmdlciBwaWVjZS5cbiAgICAgICAgbWluUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBsb25nUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbWl4ZWRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBzaG9ydFBpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKHNob3J0UGllY2VzW2ldKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXNbaV0gPSByZWdleEVzY2FwZShsb25nUGllY2VzW2ldKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzW2ldID0gcmVnZXhFc2NhcGUobWl4ZWRQaWVjZXNbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fd2Vla2RheXNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG5cbiAgICAgICAgdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIGxvbmdQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBzaG9ydFBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBtaW5QaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGZ1bmN0aW9uIGhGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdXJzKCkgJSAxMiB8fCAxMjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBrRm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ob3VycygpIHx8IDI0O1xuICAgIH1cblxuICAgIGFkZEZvcm1hdFRva2VuKCdIJywgWydISCcsIDJdLCAwLCAnaG91cicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdoJywgWydoaCcsIDJdLCAwLCBoRm9ybWF0KTtcbiAgICBhZGRGb3JtYXRUb2tlbignaycsIFsna2snLCAyXSwgMCwga0Zvcm1hdCk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignaG1tJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJycgKyBoRm9ybWF0LmFwcGx5KHRoaXMpICsgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2htbXNzJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJycgKyBoRm9ybWF0LmFwcGx5KHRoaXMpICsgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMuc2Vjb25kcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIHRoaXMuaG91cnMoKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW1zcycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICcnICsgdGhpcy5ob3VycygpICsgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMuc2Vjb25kcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIG1lcmlkaWVtICh0b2tlbiwgbG93ZXJjYXNlKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRpZW0odGhpcy5ob3VycygpLCB0aGlzLm1pbnV0ZXMoKSwgbG93ZXJjYXNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWVyaWRpZW0oJ2EnLCB0cnVlKTtcbiAgICBtZXJpZGllbSgnQScsIGZhbHNlKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnaG91cicsICdoJyk7XG5cbiAgICAvLyBQUklPUklUWVxuICAgIGFkZFVuaXRQcmlvcml0eSgnaG91cicsIDEzKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGZ1bmN0aW9uIG1hdGNoTWVyaWRpZW0gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5fbWVyaWRpZW1QYXJzZTtcbiAgICB9XG5cbiAgICBhZGRSZWdleFRva2VuKCdhJywgIG1hdGNoTWVyaWRpZW0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0EnLCAgbWF0Y2hNZXJpZGllbSk7XG4gICAgYWRkUmVnZXhUb2tlbignSCcsICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2gnLCAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdrJywgIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignSEgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignaGgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbigna2snLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5cbiAgICBhZGRSZWdleFRva2VuKCdobW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2htbXNzJywgbWF0Y2g1dG82KTtcbiAgICBhZGRSZWdleFRva2VuKCdIbW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0htbXNzJywgbWF0Y2g1dG82KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydIJywgJ0hIJ10sIEhPVVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydrJywgJ2trJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIga0lucHV0ID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBhcnJheVtIT1VSXSA9IGtJbnB1dCA9PT0gMjQgPyAwIDoga0lucHV0O1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oWydhJywgJ0EnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5faXNQbSA9IGNvbmZpZy5fbG9jYWxlLmlzUE0oaW5wdXQpO1xuICAgICAgICBjb25maWcuX21lcmlkaWVtID0gaW5wdXQ7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2gnLCAnaGgnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvcyA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvcykpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW1zcycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zMSA9IGlucHV0Lmxlbmd0aCAtIDQ7XG4gICAgICAgIHZhciBwb3MyID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zMSkpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczEsIDIpKTtcbiAgICAgICAgYXJyYXlbU0VDT05EXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MyKSk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0htbScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zKSk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignSG1tc3MnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvczEgPSBpbnB1dC5sZW5ndGggLSA0O1xuICAgICAgICB2YXIgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvczEpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MxLCAyKSk7XG4gICAgICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlSXNQTSAoaW5wdXQpIHtcbiAgICAgICAgLy8gSUU4IFF1aXJrcyBNb2RlICYgSUU3IFN0YW5kYXJkcyBNb2RlIGRvIG5vdCBhbGxvdyBhY2Nlc3Npbmcgc3RyaW5ncyBsaWtlIGFycmF5c1xuICAgICAgICAvLyBVc2luZyBjaGFyQXQgc2hvdWxkIGJlIG1vcmUgY29tcGF0aWJsZS5cbiAgICAgICAgcmV0dXJuICgoaW5wdXQgKyAnJykudG9Mb3dlckNhc2UoKS5jaGFyQXQoMCkgPT09ICdwJyk7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlID0gL1thcF1cXC4/bT9cXC4/L2k7XG4gICAgZnVuY3Rpb24gbG9jYWxlTWVyaWRpZW0gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdwbScgOiAnUE0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnYW0nIDogJ0FNJztcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgLy8gU2V0dGluZyB0aGUgaG91ciBzaG91bGQga2VlcCB0aGUgdGltZSwgYmVjYXVzZSB0aGUgdXNlciBleHBsaWNpdGx5XG4gICAgLy8gc3BlY2lmaWVkIHdoaWNoIGhvdXIgdGhleSB3YW50LiBTbyB0cnlpbmcgdG8gbWFpbnRhaW4gdGhlIHNhbWUgaG91ciAoaW5cbiAgICAvLyBhIG5ldyB0aW1lem9uZSkgbWFrZXMgc2Vuc2UuIEFkZGluZy9zdWJ0cmFjdGluZyBob3VycyBkb2VzIG5vdCBmb2xsb3dcbiAgICAvLyB0aGlzIHJ1bGUuXG4gICAgdmFyIGdldFNldEhvdXIgPSBtYWtlR2V0U2V0KCdIb3VycycsIHRydWUpO1xuXG4gICAgdmFyIGJhc2VDb25maWcgPSB7XG4gICAgICAgIGNhbGVuZGFyOiBkZWZhdWx0Q2FsZW5kYXIsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiBkZWZhdWx0TG9uZ0RhdGVGb3JtYXQsXG4gICAgICAgIGludmFsaWREYXRlOiBkZWZhdWx0SW52YWxpZERhdGUsXG4gICAgICAgIG9yZGluYWw6IGRlZmF1bHRPcmRpbmFsLFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiBkZWZhdWx0RGF5T2ZNb250aE9yZGluYWxQYXJzZSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiBkZWZhdWx0UmVsYXRpdmVUaW1lLFxuXG4gICAgICAgIG1vbnRoczogZGVmYXVsdExvY2FsZU1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCxcblxuICAgICAgICB3ZWVrOiBkZWZhdWx0TG9jYWxlV2VlayxcblxuICAgICAgICB3ZWVrZGF5czogZGVmYXVsdExvY2FsZVdlZWtkYXlzLFxuICAgICAgICB3ZWVrZGF5c01pbjogZGVmYXVsdExvY2FsZVdlZWtkYXlzTWluLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCxcblxuICAgICAgICBtZXJpZGllbVBhcnNlOiBkZWZhdWx0TG9jYWxlTWVyaWRpZW1QYXJzZVxuICAgIH07XG5cbiAgICAvLyBpbnRlcm5hbCBzdG9yYWdlIGZvciBsb2NhbGUgY29uZmlnIGZpbGVzXG4gICAgdmFyIGxvY2FsZXMgPSB7fTtcbiAgICB2YXIgbG9jYWxlRmFtaWxpZXMgPSB7fTtcbiAgICB2YXIgZ2xvYmFsTG9jYWxlO1xuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplTG9jYWxlKGtleSkge1xuICAgICAgICByZXR1cm4ga2V5ID8ga2V5LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnXycsICctJykgOiBrZXk7XG4gICAgfVxuXG4gICAgLy8gcGljayB0aGUgbG9jYWxlIGZyb20gdGhlIGFycmF5XG4gICAgLy8gdHJ5IFsnZW4tYXUnLCAnZW4tZ2InXSBhcyAnZW4tYXUnLCAnZW4tZ2InLCAnZW4nLCBhcyBpbiBtb3ZlIHRocm91Z2ggdGhlIGxpc3QgdHJ5aW5nIGVhY2hcbiAgICAvLyBzdWJzdHJpbmcgZnJvbSBtb3N0IHNwZWNpZmljIHRvIGxlYXN0LCBidXQgbW92ZSB0byB0aGUgbmV4dCBhcnJheSBpdGVtIGlmIGl0J3MgYSBtb3JlIHNwZWNpZmljIHZhcmlhbnQgdGhhbiB0aGUgY3VycmVudCByb290XG4gICAgZnVuY3Rpb24gY2hvb3NlTG9jYWxlKG5hbWVzKSB7XG4gICAgICAgIHZhciBpID0gMCwgaiwgbmV4dCwgbG9jYWxlLCBzcGxpdDtcblxuICAgICAgICB3aGlsZSAoaSA8IG5hbWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgc3BsaXQgPSBub3JtYWxpemVMb2NhbGUobmFtZXNbaV0pLnNwbGl0KCctJyk7XG4gICAgICAgICAgICBqID0gc3BsaXQubGVuZ3RoO1xuICAgICAgICAgICAgbmV4dCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpICsgMV0pO1xuICAgICAgICAgICAgbmV4dCA9IG5leHQgPyBuZXh0LnNwbGl0KCctJykgOiBudWxsO1xuICAgICAgICAgICAgd2hpbGUgKGogPiAwKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShzcGxpdC5zbGljZSgwLCBqKS5qb2luKCctJykpO1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5leHQgJiYgbmV4dC5sZW5ndGggPj0gaiAmJiBjb21wYXJlQXJyYXlzKHNwbGl0LCBuZXh0LCB0cnVlKSA+PSBqIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAvL3RoZSBuZXh0IGFycmF5IGl0ZW0gaXMgYmV0dGVyIHRoYW4gYSBzaGFsbG93ZXIgc3Vic3RyaW5nIG9mIHRoaXMgb25lXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBqLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2FkTG9jYWxlKG5hbWUpIHtcbiAgICAgICAgdmFyIG9sZExvY2FsZSA9IG51bGw7XG4gICAgICAgIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIHJlZ2lzdGVyIGFuZCBsb2FkIGFsbCB0aGUgbG9jYWxlcyBpbiBOb2RlXG4gICAgICAgIGlmICghbG9jYWxlc1tuYW1lXSAmJiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpICYmXG4gICAgICAgICAgICAgICAgbW9kdWxlICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIG9sZExvY2FsZSA9IGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICAgICAgICAgICAgICB2YXIgYWxpYXNlZFJlcXVpcmUgPSByZXF1aXJlO1xuICAgICAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlKCcuL2xvY2FsZS8nICsgbmFtZSk7XG4gICAgICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG9sZExvY2FsZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBsb2FkIGxvY2FsZSBhbmQgdGhlbiBzZXQgdGhlIGdsb2JhbCBsb2NhbGUuICBJZlxuICAgIC8vIG5vIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluLCBpdCB3aWxsIHNpbXBseSByZXR1cm4gdGhlIGN1cnJlbnQgZ2xvYmFsXG4gICAgLy8gbG9jYWxlIGtleS5cbiAgICBmdW5jdGlvbiBnZXRTZXRHbG9iYWxMb2NhbGUgKGtleSwgdmFsdWVzKSB7XG4gICAgICAgIHZhciBkYXRhO1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQodmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBnZXRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkZWZpbmVMb2NhbGUoa2V5LCB2YWx1ZXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIC8vIG1vbWVudC5kdXJhdGlvbi5fbG9jYWxlID0gbW9tZW50Ll9sb2NhbGUgPSBkYXRhO1xuICAgICAgICAgICAgICAgIGdsb2JhbExvY2FsZSA9IGRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoKHR5cGVvZiBjb25zb2xlICE9PSAgJ3VuZGVmaW5lZCcpICYmIGNvbnNvbGUud2Fybikge1xuICAgICAgICAgICAgICAgICAgICAvL3dhcm4gdXNlciBpZiBhcmd1bWVudHMgYXJlIHBhc3NlZCBidXQgdGhlIGxvY2FsZSBjb3VsZCBub3QgYmUgc2V0XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTG9jYWxlICcgKyBrZXkgKyAgJyBub3QgZm91bmQuIERpZCB5b3UgZm9yZ2V0IHRvIGxvYWQgaXQ/Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVMb2NhbGUgKG5hbWUsIGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlLCBwYXJlbnRDb25maWcgPSBiYXNlQ29uZmlnO1xuICAgICAgICAgICAgY29uZmlnLmFiYnIgPSBuYW1lO1xuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZSgnZGVmaW5lTG9jYWxlT3ZlcnJpZGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZSBtb21lbnQudXBkYXRlTG9jYWxlKGxvY2FsZU5hbWUsIGNvbmZpZykgdG8gY2hhbmdlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2FuIGV4aXN0aW5nIGxvY2FsZS4gbW9tZW50LmRlZmluZUxvY2FsZShsb2NhbGVOYW1lLCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdjb25maWcpIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGNyZWF0aW5nIGEgbmV3IGxvY2FsZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kZWZpbmUtbG9jYWxlLyBmb3IgbW9yZSBpbmZvLicpO1xuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZXNbbmFtZV0uX2NvbmZpZztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZXNbY29uZmlnLnBhcmVudExvY2FsZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdLl9jb25maWc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShjb25maWcucGFyZW50TG9jYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGUuX2NvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IGNvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBuZXcgTG9jYWxlKG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNvbmZpZykpO1xuXG4gICAgICAgICAgICBpZiAobG9jYWxlRmFtaWxpZXNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tuYW1lXS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmluZUxvY2FsZSh4Lm5hbWUsIHguY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdCBmb3Igbm93OiBhbHNvIHNldCB0aGUgbG9jYWxlXG4gICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2Ugc2V0IHRoZSBsb2NhbGUgQUZURVIgYWxsIGNoaWxkIGxvY2FsZXMgaGF2ZSBiZWVuXG4gICAgICAgICAgICAvLyBjcmVhdGVkLCBzbyB3ZSB3b24ndCBlbmQgdXAgd2l0aCB0aGUgY2hpbGQgbG9jYWxlIHNldC5cbiAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcblxuXG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHVzZWZ1bCBmb3IgdGVzdGluZ1xuICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUxvY2FsZShuYW1lLCBjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlLCB0bXBMb2NhbGUsIHBhcmVudENvbmZpZyA9IGJhc2VDb25maWc7XG4gICAgICAgICAgICAvLyBNRVJHRVxuICAgICAgICAgICAgdG1wTG9jYWxlID0gbG9hZExvY2FsZShuYW1lKTtcbiAgICAgICAgICAgIGlmICh0bXBMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IHRtcExvY2FsZS5fY29uZmlnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uZmlnID0gbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY29uZmlnKTtcbiAgICAgICAgICAgIGxvY2FsZSA9IG5ldyBMb2NhbGUoY29uZmlnKTtcbiAgICAgICAgICAgIGxvY2FsZS5wYXJlbnRMb2NhbGUgPSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IGxvY2FsZTtcblxuICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdCBmb3Igbm93OiBhbHNvIHNldCB0aGUgbG9jYWxlXG4gICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBwYXNzIG51bGwgZm9yIGNvbmZpZyB0byB1bnVwZGF0ZSwgdXNlZnVsIGZvciB0ZXN0c1xuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgfVxuXG4gICAgLy8gcmV0dXJucyBsb2NhbGUgZGF0YVxuICAgIGZ1bmN0aW9uIGdldExvY2FsZSAoa2V5KSB7XG4gICAgICAgIHZhciBsb2NhbGU7XG5cbiAgICAgICAgaWYgKGtleSAmJiBrZXkuX2xvY2FsZSAmJiBrZXkuX2xvY2FsZS5fYWJicikge1xuICAgICAgICAgICAga2V5ID0ga2V5Ll9sb2NhbGUuX2FiYnI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNBcnJheShrZXkpKSB7XG4gICAgICAgICAgICAvL3Nob3J0LWNpcmN1aXQgZXZlcnl0aGluZyBlbHNlXG4gICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKGtleSk7XG4gICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtleSA9IFtrZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNob29zZUxvY2FsZShrZXkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RMb2NhbGVzKCkge1xuICAgICAgICByZXR1cm4ga2V5cyhsb2NhbGVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja092ZXJmbG93IChtKSB7XG4gICAgICAgIHZhciBvdmVyZmxvdztcbiAgICAgICAgdmFyIGEgPSBtLl9hO1xuXG4gICAgICAgIGlmIChhICYmIGdldFBhcnNpbmdGbGFncyhtKS5vdmVyZmxvdyA9PT0gLTIpIHtcbiAgICAgICAgICAgIG92ZXJmbG93ID1cbiAgICAgICAgICAgICAgICBhW01PTlRIXSAgICAgICA8IDAgfHwgYVtNT05USF0gICAgICAgPiAxMSAgPyBNT05USCA6XG4gICAgICAgICAgICAgICAgYVtEQVRFXSAgICAgICAgPCAxIHx8IGFbREFURV0gICAgICAgID4gZGF5c0luTW9udGgoYVtZRUFSXSwgYVtNT05USF0pID8gREFURSA6XG4gICAgICAgICAgICAgICAgYVtIT1VSXSAgICAgICAgPCAwIHx8IGFbSE9VUl0gICAgICAgID4gMjQgfHwgKGFbSE9VUl0gPT09IDI0ICYmIChhW01JTlVURV0gIT09IDAgfHwgYVtTRUNPTkRdICE9PSAwIHx8IGFbTUlMTElTRUNPTkRdICE9PSAwKSkgPyBIT1VSIDpcbiAgICAgICAgICAgICAgICBhW01JTlVURV0gICAgICA8IDAgfHwgYVtNSU5VVEVdICAgICAgPiA1OSAgPyBNSU5VVEUgOlxuICAgICAgICAgICAgICAgIGFbU0VDT05EXSAgICAgIDwgMCB8fCBhW1NFQ09ORF0gICAgICA+IDU5ICA/IFNFQ09ORCA6XG4gICAgICAgICAgICAgICAgYVtNSUxMSVNFQ09ORF0gPCAwIHx8IGFbTUlMTElTRUNPTkRdID4gOTk5ID8gTUlMTElTRUNPTkQgOlxuICAgICAgICAgICAgICAgIC0xO1xuXG4gICAgICAgICAgICBpZiAoZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd0RheU9mWWVhciAmJiAob3ZlcmZsb3cgPCBZRUFSIHx8IG92ZXJmbG93ID4gREFURSkpIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IERBVEU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd1dlZWtzICYmIG92ZXJmbG93ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gV0VFSztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93V2Vla2RheSAmJiBvdmVyZmxvdyA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IFdFRUtEQVk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS5vdmVyZmxvdyA9IG92ZXJmbG93O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgLy8gUGljayB0aGUgZmlyc3QgZGVmaW5lZCBvZiB0d28gb3IgdGhyZWUgYXJndW1lbnRzLlxuICAgIGZ1bmN0aW9uIGRlZmF1bHRzKGEsIGIsIGMpIHtcbiAgICAgICAgaWYgKGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGIgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3VycmVudERhdGVBcnJheShjb25maWcpIHtcbiAgICAgICAgLy8gaG9va3MgaXMgYWN0dWFsbHkgdGhlIGV4cG9ydGVkIG1vbWVudCBvYmplY3RcbiAgICAgICAgdmFyIG5vd1ZhbHVlID0gbmV3IERhdGUoaG9va3Mubm93KCkpO1xuICAgICAgICBpZiAoY29uZmlnLl91c2VVVEMpIHtcbiAgICAgICAgICAgIHJldHVybiBbbm93VmFsdWUuZ2V0VVRDRnVsbFllYXIoKSwgbm93VmFsdWUuZ2V0VVRDTW9udGgoKSwgbm93VmFsdWUuZ2V0VVRDRGF0ZSgpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW25vd1ZhbHVlLmdldEZ1bGxZZWFyKCksIG5vd1ZhbHVlLmdldE1vbnRoKCksIG5vd1ZhbHVlLmdldERhdGUoKV07XG4gICAgfVxuXG4gICAgLy8gY29udmVydCBhbiBhcnJheSB0byBhIGRhdGUuXG4gICAgLy8gdGhlIGFycmF5IHNob3VsZCBtaXJyb3IgdGhlIHBhcmFtZXRlcnMgYmVsb3dcbiAgICAvLyBub3RlOiBhbGwgdmFsdWVzIHBhc3QgdGhlIHllYXIgYXJlIG9wdGlvbmFsIGFuZCB3aWxsIGRlZmF1bHQgdG8gdGhlIGxvd2VzdCBwb3NzaWJsZSB2YWx1ZS5cbiAgICAvLyBbeWVhciwgbW9udGgsIGRheSAsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZF1cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tQXJyYXkgKGNvbmZpZykge1xuICAgICAgICB2YXIgaSwgZGF0ZSwgaW5wdXQgPSBbXSwgY3VycmVudERhdGUsIGV4cGVjdGVkV2Vla2RheSwgeWVhclRvVXNlO1xuXG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnREYXRlID0gY3VycmVudERhdGVBcnJheShjb25maWcpO1xuXG4gICAgICAgIC8vY29tcHV0ZSBkYXkgb2YgdGhlIHllYXIgZnJvbSB3ZWVrcyBhbmQgd2Vla2RheXNcbiAgICAgICAgaWYgKGNvbmZpZy5fdyAmJiBjb25maWcuX2FbREFURV0gPT0gbnVsbCAmJiBjb25maWcuX2FbTU9OVEhdID09IG51bGwpIHtcbiAgICAgICAgICAgIGRheU9mWWVhckZyb21XZWVrSW5mbyhjb25maWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9pZiB0aGUgZGF5IG9mIHRoZSB5ZWFyIGlzIHNldCwgZmlndXJlIG91dCB3aGF0IGl0IGlzXG4gICAgICAgIGlmIChjb25maWcuX2RheU9mWWVhciAhPSBudWxsKSB7XG4gICAgICAgICAgICB5ZWFyVG9Vc2UgPSBkZWZhdWx0cyhjb25maWcuX2FbWUVBUl0sIGN1cnJlbnREYXRlW1lFQVJdKTtcblxuICAgICAgICAgICAgaWYgKGNvbmZpZy5fZGF5T2ZZZWFyID4gZGF5c0luWWVhcih5ZWFyVG9Vc2UpIHx8IGNvbmZpZy5fZGF5T2ZZZWFyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93RGF5T2ZZZWFyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoeWVhclRvVXNlLCAwLCBjb25maWcuX2RheU9mWWVhcik7XG4gICAgICAgICAgICBjb25maWcuX2FbTU9OVEhdID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgICAgICAgICAgY29uZmlnLl9hW0RBVEVdID0gZGF0ZS5nZXRVVENEYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWZhdWx0IHRvIGN1cnJlbnQgZGF0ZS5cbiAgICAgICAgLy8gKiBpZiBubyB5ZWFyLCBtb250aCwgZGF5IG9mIG1vbnRoIGFyZSBnaXZlbiwgZGVmYXVsdCB0byB0b2RheVxuICAgICAgICAvLyAqIGlmIGRheSBvZiBtb250aCBpcyBnaXZlbiwgZGVmYXVsdCBtb250aCBhbmQgeWVhclxuICAgICAgICAvLyAqIGlmIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG9ubHkgeWVhclxuICAgICAgICAvLyAqIGlmIHllYXIgaXMgZ2l2ZW4sIGRvbid0IGRlZmF1bHQgYW55dGhpbmdcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDMgJiYgY29uZmlnLl9hW2ldID09IG51bGw7ICsraSkge1xuICAgICAgICAgICAgY29uZmlnLl9hW2ldID0gaW5wdXRbaV0gPSBjdXJyZW50RGF0ZVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFplcm8gb3V0IHdoYXRldmVyIHdhcyBub3QgZGVmYXVsdGVkLCBpbmNsdWRpbmcgdGltZVxuICAgICAgICBmb3IgKDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgY29uZmlnLl9hW2ldID0gaW5wdXRbaV0gPSAoY29uZmlnLl9hW2ldID09IG51bGwpID8gKGkgPT09IDIgPyAxIDogMCkgOiBjb25maWcuX2FbaV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBmb3IgMjQ6MDA6MDAuMDAwXG4gICAgICAgIGlmIChjb25maWcuX2FbSE9VUl0gPT09IDI0ICYmXG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW01JTlVURV0gPT09IDAgJiZcbiAgICAgICAgICAgICAgICBjb25maWcuX2FbU0VDT05EXSA9PT0gMCAmJlxuICAgICAgICAgICAgICAgIGNvbmZpZy5fYVtNSUxMSVNFQ09ORF0gPT09IDApIHtcbiAgICAgICAgICAgIGNvbmZpZy5fbmV4dERheSA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnLl9kID0gKGNvbmZpZy5fdXNlVVRDID8gY3JlYXRlVVRDRGF0ZSA6IGNyZWF0ZURhdGUpLmFwcGx5KG51bGwsIGlucHV0KTtcbiAgICAgICAgZXhwZWN0ZWRXZWVrZGF5ID0gY29uZmlnLl91c2VVVEMgPyBjb25maWcuX2QuZ2V0VVRDRGF5KCkgOiBjb25maWcuX2QuZ2V0RGF5KCk7XG5cbiAgICAgICAgLy8gQXBwbHkgdGltZXpvbmUgb2Zmc2V0IGZyb20gaW5wdXQuIFRoZSBhY3R1YWwgdXRjT2Zmc2V0IGNhbiBiZSBjaGFuZ2VkXG4gICAgICAgIC8vIHdpdGggcGFyc2Vab25lLlxuICAgICAgICBpZiAoY29uZmlnLl90em0gIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuX25leHREYXkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDI0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIG1pc21hdGNoaW5nIGRheSBvZiB3ZWVrXG4gICAgICAgIGlmIChjb25maWcuX3cgJiYgdHlwZW9mIGNvbmZpZy5fdy5kICE9PSAndW5kZWZpbmVkJyAmJiBjb25maWcuX3cuZCAhPT0gZXhwZWN0ZWRXZWVrZGF5KSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS53ZWVrZGF5TWlzbWF0Y2ggPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtJbmZvKGNvbmZpZykge1xuICAgICAgICB2YXIgdywgd2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95LCB0ZW1wLCB3ZWVrZGF5T3ZlcmZsb3c7XG5cbiAgICAgICAgdyA9IGNvbmZpZy5fdztcbiAgICAgICAgaWYgKHcuR0cgIT0gbnVsbCB8fCB3LlcgIT0gbnVsbCB8fCB3LkUgIT0gbnVsbCkge1xuICAgICAgICAgICAgZG93ID0gMTtcbiAgICAgICAgICAgIGRveSA9IDQ7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IFdlIG5lZWQgdG8gdGFrZSB0aGUgY3VycmVudCBpc29XZWVrWWVhciwgYnV0IHRoYXQgZGVwZW5kcyBvblxuICAgICAgICAgICAgLy8gaG93IHdlIGludGVycHJldCBub3cgKGxvY2FsLCB1dGMsIGZpeGVkIG9mZnNldCkuIFNvIGNyZWF0ZVxuICAgICAgICAgICAgLy8gYSBub3cgdmVyc2lvbiBvZiBjdXJyZW50IGNvbmZpZyAodGFrZSBsb2NhbC91dGMvb2Zmc2V0IGZsYWdzLCBhbmRcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBub3cpLlxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyh3LkdHLCBjb25maWcuX2FbWUVBUl0sIHdlZWtPZlllYXIoY3JlYXRlTG9jYWwoKSwgMSwgNCkueWVhcik7XG4gICAgICAgICAgICB3ZWVrID0gZGVmYXVsdHMody5XLCAxKTtcbiAgICAgICAgICAgIHdlZWtkYXkgPSBkZWZhdWx0cyh3LkUsIDEpO1xuICAgICAgICAgICAgaWYgKHdlZWtkYXkgPCAxIHx8IHdlZWtkYXkgPiA3KSB7XG4gICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvdyA9IGNvbmZpZy5fbG9jYWxlLl93ZWVrLmRvdztcbiAgICAgICAgICAgIGRveSA9IGNvbmZpZy5fbG9jYWxlLl93ZWVrLmRveTtcblxuICAgICAgICAgICAgdmFyIGN1cldlZWsgPSB3ZWVrT2ZZZWFyKGNyZWF0ZUxvY2FsKCksIGRvdywgZG95KTtcblxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyh3LmdnLCBjb25maWcuX2FbWUVBUl0sIGN1cldlZWsueWVhcik7XG5cbiAgICAgICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCB3ZWVrLlxuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcudywgY3VyV2Vlay53ZWVrKTtcblxuICAgICAgICAgICAgaWYgKHcuZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gd2Vla2RheSAtLSBsb3cgZGF5IG51bWJlcnMgYXJlIGNvbnNpZGVyZWQgbmV4dCB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZDtcbiAgICAgICAgICAgICAgICBpZiAod2Vla2RheSA8IDAgfHwgd2Vla2RheSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHcuZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gbG9jYWwgd2Vla2RheSAtLSBjb3VudGluZyBzdGFydHMgZnJvbSBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmUgKyBkb3c7XG4gICAgICAgICAgICAgICAgaWYgKHcuZSA8IDAgfHwgdy5lID4gNikge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSBkb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdlZWsgPCAxIHx8IHdlZWsgPiB3ZWVrc0luWWVhcih3ZWVrWWVhciwgZG93LCBkb3kpKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dXZWVrcyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAod2Vla2RheU92ZXJmbG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd1dlZWtkYXkgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGVtcCA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdID0gdGVtcC55ZWFyO1xuICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0ZW1wLmRheU9mWWVhcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlzbyA4NjAxIHJlZ2V4XG4gICAgLy8gMDAwMC0wMC0wMCAwMDAwLVcwMCBvciAwMDAwLVcwMC0wICsgVCArIDAwIG9yIDAwOjAwIG9yIDAwOjAwOjAwIG9yIDAwOjAwOjAwLjAwMCArICswMDowMCBvciArMDAwMCBvciArMDApXG4gICAgdmFyIGV4dGVuZGVkSXNvUmVnZXggPSAvXlxccyooKD86WystXVxcZHs2fXxcXGR7NH0pLSg/OlxcZFxcZC1cXGRcXGR8V1xcZFxcZC1cXGR8V1xcZFxcZHxcXGRcXGRcXGR8XFxkXFxkKSkoPzooVHwgKShcXGRcXGQoPzo6XFxkXFxkKD86OlxcZFxcZCg/OlsuLF1cXGQrKT8pPyk/KShbXFwrXFwtXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC87XG4gICAgdmFyIGJhc2ljSXNvUmVnZXggPSAvXlxccyooKD86WystXVxcZHs2fXxcXGR7NH0pKD86XFxkXFxkXFxkXFxkfFdcXGRcXGRcXGR8V1xcZFxcZHxcXGRcXGRcXGR8XFxkXFxkKSkoPzooVHwgKShcXGRcXGQoPzpcXGRcXGQoPzpcXGRcXGQoPzpbLixdXFxkKyk/KT8pPykoW1xcK1xcLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvO1xuXG4gICAgdmFyIHR6UmVnZXggPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy87XG5cbiAgICB2YXIgaXNvRGF0ZXMgPSBbXG4gICAgICAgIFsnWVlZWVlZLU1NLUREJywgL1srLV1cXGR7Nn0tXFxkXFxkLVxcZFxcZC9dLFxuICAgICAgICBbJ1lZWVktTU0tREQnLCAvXFxkezR9LVxcZFxcZC1cXGRcXGQvXSxcbiAgICAgICAgWydHR0dHLVtXXVdXLUUnLCAvXFxkezR9LVdcXGRcXGQtXFxkL10sXG4gICAgICAgIFsnR0dHRy1bV11XVycsIC9cXGR7NH0tV1xcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgWydZWVlZLURERCcsIC9cXGR7NH0tXFxkezN9L10sXG4gICAgICAgIFsnWVlZWS1NTScsIC9cXGR7NH0tXFxkXFxkLywgZmFsc2VdLFxuICAgICAgICBbJ1lZWVlZWU1NREQnLCAvWystXVxcZHsxMH0vXSxcbiAgICAgICAgWydZWVlZTU1ERCcsIC9cXGR7OH0vXSxcbiAgICAgICAgLy8gWVlZWU1NIGlzIE5PVCBhbGxvd2VkIGJ5IHRoZSBzdGFuZGFyZFxuICAgICAgICBbJ0dHR0dbV11XV0UnLCAvXFxkezR9V1xcZHszfS9dLFxuICAgICAgICBbJ0dHR0dbV11XVycsIC9cXGR7NH1XXFxkezJ9LywgZmFsc2VdLFxuICAgICAgICBbJ1lZWVlEREQnLCAvXFxkezd9L11cbiAgICBdO1xuXG4gICAgLy8gaXNvIHRpbWUgZm9ybWF0cyBhbmQgcmVnZXhlc1xuICAgIHZhciBpc29UaW1lcyA9IFtcbiAgICAgICAgWydISDptbTpzcy5TU1NTJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkXFwuXFxkKy9dLFxuICAgICAgICBbJ0hIOm1tOnNzLFNTU1MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGQsXFxkKy9dLFxuICAgICAgICBbJ0hIOm1tOnNzJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgIFsnSEg6bW0nLCAvXFxkXFxkOlxcZFxcZC9dLFxuICAgICAgICBbJ0hIbW1zcy5TU1NTJywgL1xcZFxcZFxcZFxcZFxcZFxcZFxcLlxcZCsvXSxcbiAgICAgICAgWydISG1tc3MsU1NTUycsIC9cXGRcXGRcXGRcXGRcXGRcXGQsXFxkKy9dLFxuICAgICAgICBbJ0hIbW1zcycsIC9cXGRcXGRcXGRcXGRcXGRcXGQvXSxcbiAgICAgICAgWydISG1tJywgL1xcZFxcZFxcZFxcZC9dLFxuICAgICAgICBbJ0hIJywgL1xcZFxcZC9dXG4gICAgXTtcblxuICAgIHZhciBhc3BOZXRKc29uUmVnZXggPSAvXlxcLz9EYXRlXFwoKFxcLT9cXGQrKS9pO1xuXG4gICAgLy8gZGF0ZSBmcm9tIGlzbyBmb3JtYXRcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tSVNPKGNvbmZpZykge1xuICAgICAgICB2YXIgaSwgbCxcbiAgICAgICAgICAgIHN0cmluZyA9IGNvbmZpZy5faSxcbiAgICAgICAgICAgIG1hdGNoID0gZXh0ZW5kZWRJc29SZWdleC5leGVjKHN0cmluZykgfHwgYmFzaWNJc29SZWdleC5leGVjKHN0cmluZyksXG4gICAgICAgICAgICBhbGxvd1RpbWUsIGRhdGVGb3JtYXQsIHRpbWVGb3JtYXQsIHR6Rm9ybWF0O1xuXG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaXNvID0gdHJ1ZTtcblxuICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IGlzb0RhdGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpc29EYXRlc1tpXVsxXS5leGVjKG1hdGNoWzFdKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlRm9ybWF0ID0gaXNvRGF0ZXNbaV1bMF07XG4gICAgICAgICAgICAgICAgICAgIGFsbG93VGltZSA9IGlzb0RhdGVzW2ldWzJdICE9PSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFszXSkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29UaW1lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzb1RpbWVzW2ldWzFdLmV4ZWMobWF0Y2hbM10pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaFsyXSBzaG91bGQgYmUgJ1QnIG9yIHNwYWNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lRm9ybWF0ID0gKG1hdGNoWzJdIHx8ICcgJykgKyBpc29UaW1lc1tpXVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aW1lRm9ybWF0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWFsbG93VGltZSAmJiB0aW1lRm9ybWF0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbNF0pIHtcbiAgICAgICAgICAgICAgICBpZiAodHpSZWdleC5leGVjKG1hdGNoWzRdKSkge1xuICAgICAgICAgICAgICAgICAgICB0ekZvcm1hdCA9ICdaJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbmZpZy5fZiA9IGRhdGVGb3JtYXQgKyAodGltZUZvcm1hdCB8fCAnJykgKyAodHpGb3JtYXQgfHwgJycpO1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSRkMgMjgyMiByZWdleDogRm9yIGRldGFpbHMgc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyODIyI3NlY3Rpb24tMy4zXG4gICAgdmFyIHJmYzI4MjIgPSAvXig/OihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pLD9cXHMpPyhcXGR7MSwyfSlcXHMoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpXFxzKFxcZHsyLDR9KVxccyhcXGRcXGQpOihcXGRcXGQpKD86OihcXGRcXGQpKT9cXHMoPzooVVR8R01UfFtFQ01QXVtTRF1UKXwoW1p6XSl8KFsrLV1cXGR7NH0pKSQvO1xuXG4gICAgZnVuY3Rpb24gZXh0cmFjdEZyb21SRkMyODIyU3RyaW5ncyh5ZWFyU3RyLCBtb250aFN0ciwgZGF5U3RyLCBob3VyU3RyLCBtaW51dGVTdHIsIHNlY29uZFN0cikge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW1xuICAgICAgICAgICAgdW50cnVuY2F0ZVllYXIoeWVhclN0ciksXG4gICAgICAgICAgICBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQuaW5kZXhPZihtb250aFN0ciksXG4gICAgICAgICAgICBwYXJzZUludChkYXlTdHIsIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGhvdXJTdHIsIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KG1pbnV0ZVN0ciwgMTApXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHNlY29uZFN0cikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyc2VJbnQoc2Vjb25kU3RyLCAxMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSB7XG4gICAgICAgIHZhciB5ZWFyID0gcGFyc2VJbnQoeWVhclN0ciwgMTApO1xuICAgICAgICBpZiAoeWVhciA8PSA0OSkge1xuICAgICAgICAgICAgcmV0dXJuIDIwMDAgKyB5ZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKHllYXIgPD0gOTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gMTkwMCArIHllYXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHllYXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcHJvY2Vzc1JGQzI4MjIocykge1xuICAgICAgICAvLyBSZW1vdmUgY29tbWVudHMgYW5kIGZvbGRpbmcgd2hpdGVzcGFjZSBhbmQgcmVwbGFjZSBtdWx0aXBsZS1zcGFjZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC9cXChbXildKlxcKXxbXFxuXFx0XS9nLCAnICcpLnJlcGxhY2UoLyhcXHNcXHMrKS9nLCAnICcpLnJlcGxhY2UoL15cXHNcXHMqLywgJycpLnJlcGxhY2UoL1xcc1xccyokLywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrV2Vla2RheSh3ZWVrZGF5U3RyLCBwYXJzZWRJbnB1dCwgY29uZmlnKSB7XG4gICAgICAgIGlmICh3ZWVrZGF5U3RyKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBSZXBsYWNlIHRoZSB2YW5pbGxhIEpTIERhdGUgb2JqZWN0IHdpdGggYW4gaW5kZXBlbnRlbnQgZGF5LW9mLXdlZWsgY2hlY2suXG4gICAgICAgICAgICB2YXIgd2Vla2RheVByb3ZpZGVkID0gZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQuaW5kZXhPZih3ZWVrZGF5U3RyKSxcbiAgICAgICAgICAgICAgICB3ZWVrZGF5QWN0dWFsID0gbmV3IERhdGUocGFyc2VkSW5wdXRbMF0sIHBhcnNlZElucHV0WzFdLCBwYXJzZWRJbnB1dFsyXSkuZ2V0RGF5KCk7XG4gICAgICAgICAgICBpZiAod2Vla2RheVByb3ZpZGVkICE9PSB3ZWVrZGF5QWN0dWFsKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykud2Vla2RheU1pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIG9ic09mZnNldHMgPSB7XG4gICAgICAgIFVUOiAwLFxuICAgICAgICBHTVQ6IDAsXG4gICAgICAgIEVEVDogLTQgKiA2MCxcbiAgICAgICAgRVNUOiAtNSAqIDYwLFxuICAgICAgICBDRFQ6IC01ICogNjAsXG4gICAgICAgIENTVDogLTYgKiA2MCxcbiAgICAgICAgTURUOiAtNiAqIDYwLFxuICAgICAgICBNU1Q6IC03ICogNjAsXG4gICAgICAgIFBEVDogLTcgKiA2MCxcbiAgICAgICAgUFNUOiAtOCAqIDYwXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZU9mZnNldChvYnNPZmZzZXQsIG1pbGl0YXJ5T2Zmc2V0LCBudW1PZmZzZXQpIHtcbiAgICAgICAgaWYgKG9ic09mZnNldCkge1xuICAgICAgICAgICAgcmV0dXJuIG9ic09mZnNldHNbb2JzT2Zmc2V0XTtcbiAgICAgICAgfSBlbHNlIGlmIChtaWxpdGFyeU9mZnNldCkge1xuICAgICAgICAgICAgLy8gdGhlIG9ubHkgYWxsb3dlZCBtaWxpdGFyeSB0eiBpcyBaXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBobSA9IHBhcnNlSW50KG51bU9mZnNldCwgMTApO1xuICAgICAgICAgICAgdmFyIG0gPSBobSAlIDEwMCwgaCA9IChobSAtIG0pIC8gMTAwO1xuICAgICAgICAgICAgcmV0dXJuIGggKiA2MCArIG07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGFuZCB0aW1lIGZyb20gcmVmIDI4MjIgZm9ybWF0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKSB7XG4gICAgICAgIHZhciBtYXRjaCA9IHJmYzI4MjIuZXhlYyhwcmVwcm9jZXNzUkZDMjgyMihjb25maWcuX2kpKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICB2YXIgcGFyc2VkQXJyYXkgPSBleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzKG1hdGNoWzRdLCBtYXRjaFszXSwgbWF0Y2hbMl0sIG1hdGNoWzVdLCBtYXRjaFs2XSwgbWF0Y2hbN10pO1xuICAgICAgICAgICAgaWYgKCFjaGVja1dlZWtkYXkobWF0Y2hbMV0sIHBhcnNlZEFycmF5LCBjb25maWcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25maWcuX2EgPSBwYXJzZWRBcnJheTtcbiAgICAgICAgICAgIGNvbmZpZy5fdHptID0gY2FsY3VsYXRlT2Zmc2V0KG1hdGNoWzhdLCBtYXRjaFs5XSwgbWF0Y2hbMTBdKTtcblxuICAgICAgICAgICAgY29uZmlnLl9kID0gY3JlYXRlVVRDRGF0ZS5hcHBseShudWxsLCBjb25maWcuX2EpO1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykucmZjMjgyMiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgZnJvbSBpc28gZm9ybWF0IG9yIGZhbGxiYWNrXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZyhjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBhc3BOZXRKc29uUmVnZXguZXhlYyhjb25maWcuX2kpO1xuXG4gICAgICAgIGlmIChtYXRjaGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSgrbWF0Y2hlZFsxXSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tSVNPKGNvbmZpZyk7XG4gICAgICAgIGlmIChjb25maWcuX2lzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLl9pc1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKTtcbiAgICAgICAgaWYgKGNvbmZpZy5faXNWYWxpZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBjb25maWcuX2lzVmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaW5hbCBhdHRlbXB0LCB1c2UgSW5wdXQgRmFsbGJhY2tcbiAgICAgICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKTtcbiAgICB9XG5cbiAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3ZhbHVlIHByb3ZpZGVkIGlzIG5vdCBpbiBhIHJlY29nbml6ZWQgUkZDMjgyMiBvciBJU08gZm9ybWF0LiBtb21lbnQgY29uc3RydWN0aW9uIGZhbGxzIGJhY2sgdG8ganMgRGF0ZSgpLCAnICtcbiAgICAgICAgJ3doaWNoIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucy4gTm9uIFJGQzI4MjIvSVNPIGRhdGUgZm9ybWF0cyBhcmUgJyArXG4gICAgICAgICdkaXNjb3VyYWdlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGFuIHVwY29taW5nIG1ham9yIHJlbGVhc2UuIFBsZWFzZSByZWZlciB0byAnICtcbiAgICAgICAgJ2h0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvanMtZGF0ZS8gZm9yIG1vcmUgaW5mby4nLFxuICAgICAgICBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShjb25maWcuX2kgKyAoY29uZmlnLl91c2VVVEMgPyAnIFVUQycgOiAnJykpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIGNvbnN0YW50IHRoYXQgcmVmZXJzIHRvIHRoZSBJU08gc3RhbmRhcmRcbiAgICBob29rcy5JU09fODYwMSA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gY29uc3RhbnQgdGhhdCByZWZlcnMgdG8gdGhlIFJGQyAyODIyIGZvcm1cbiAgICBob29rcy5SRkNfMjgyMiA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gZGF0ZSBmcm9tIHN0cmluZyBhbmQgZm9ybWF0IHN0cmluZ1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyB0byBhbm90aGVyIHBhcnQgb2YgdGhlIGNyZWF0aW9uIGZsb3cgdG8gcHJldmVudCBjaXJjdWxhciBkZXBzXG4gICAgICAgIGlmIChjb25maWcuX2YgPT09IGhvb2tzLklTT184NjAxKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tSVNPKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5fZiA9PT0gaG9va3MuUkZDXzI4MjIpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uZmlnLl9hID0gW107XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5ID0gdHJ1ZTtcblxuICAgICAgICAvLyBUaGlzIGFycmF5IGlzIHVzZWQgdG8gbWFrZSBhIERhdGUsIGVpdGhlciB3aXRoIGBuZXcgRGF0ZWAgb3IgYERhdGUuVVRDYFxuICAgICAgICB2YXIgc3RyaW5nID0gJycgKyBjb25maWcuX2ksXG4gICAgICAgICAgICBpLCBwYXJzZWRJbnB1dCwgdG9rZW5zLCB0b2tlbiwgc2tpcHBlZCxcbiAgICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgICB0b3RhbFBhcnNlZElucHV0TGVuZ3RoID0gMDtcblxuICAgICAgICB0b2tlbnMgPSBleHBhbmRGb3JtYXQoY29uZmlnLl9mLCBjb25maWcuX2xvY2FsZSkubWF0Y2goZm9ybWF0dGluZ1Rva2VucykgfHwgW107XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdG9rZW4gPSB0b2tlbnNbaV07XG4gICAgICAgICAgICBwYXJzZWRJbnB1dCA9IChzdHJpbmcubWF0Y2goZ2V0UGFyc2VSZWdleEZvclRva2VuKHRva2VuLCBjb25maWcpKSB8fCBbXSlbMF07XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygndG9rZW4nLCB0b2tlbiwgJ3BhcnNlZElucHV0JywgcGFyc2VkSW5wdXQsXG4gICAgICAgICAgICAvLyAgICAgICAgICdyZWdleCcsIGdldFBhcnNlUmVnZXhGb3JUb2tlbih0b2tlbiwgY29uZmlnKSk7XG4gICAgICAgICAgICBpZiAocGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBza2lwcGVkID0gc3RyaW5nLnN1YnN0cigwLCBzdHJpbmcuaW5kZXhPZihwYXJzZWRJbnB1dCkpO1xuICAgICAgICAgICAgICAgIGlmIChza2lwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChza2lwcGVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnNsaWNlKHN0cmluZy5pbmRleE9mKHBhcnNlZElucHV0KSArIHBhcnNlZElucHV0Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdG90YWxQYXJzZWRJbnB1dExlbmd0aCArPSBwYXJzZWRJbnB1dC5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkb24ndCBwYXJzZSBpZiBpdCdzIG5vdCBhIGtub3duIHRva2VuXG4gICAgICAgICAgICBpZiAoZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBwYXJzZWRJbnB1dCwgY29uZmlnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbmZpZy5fc3RyaWN0ICYmICFwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZFRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZCByZW1haW5pbmcgdW5wYXJzZWQgaW5wdXQgbGVuZ3RoIHRvIHRoZSBzdHJpbmdcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuY2hhcnNMZWZ0T3ZlciA9IHN0cmluZ0xlbmd0aCAtIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGg7XG4gICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChzdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYXIgXzEyaCBmbGFnIGlmIGhvdXIgaXMgPD0gMTJcbiAgICAgICAgaWYgKGNvbmZpZy5fYVtIT1VSXSA8PSAxMiAmJlxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9PT0gdHJ1ZSAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID4gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnBhcnNlZERhdGVQYXJ0cyA9IGNvbmZpZy5fYS5zbGljZSgwKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykubWVyaWRpZW0gPSBjb25maWcuX21lcmlkaWVtO1xuICAgICAgICAvLyBoYW5kbGUgbWVyaWRpZW1cbiAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gbWVyaWRpZW1GaXhXcmFwKGNvbmZpZy5fbG9jYWxlLCBjb25maWcuX2FbSE9VUl0sIGNvbmZpZy5fbWVyaWRpZW0pO1xuXG4gICAgICAgIGNvbmZpZ0Zyb21BcnJheShjb25maWcpO1xuICAgICAgICBjaGVja092ZXJmbG93KGNvbmZpZyk7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbUZpeFdyYXAgKGxvY2FsZSwgaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgdmFyIGlzUG07XG5cbiAgICAgICAgaWYgKG1lcmlkaWVtID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIG5vdGhpbmcgdG8gZG9cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbGUubWVyaWRpZW1Ib3VyICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUubWVyaWRpZW1Ib3VyKGhvdXIsIG1lcmlkaWVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChsb2NhbGUuaXNQTSAhPSBudWxsKSB7XG4gICAgICAgICAgICAvLyBGYWxsYmFja1xuICAgICAgICAgICAgaXNQbSA9IGxvY2FsZS5pc1BNKG1lcmlkaWVtKTtcbiAgICAgICAgICAgIGlmIChpc1BtICYmIGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzUG0gJiYgaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBub3Qgc3VwcG9zZWQgdG8gaGFwcGVuXG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgZnJvbSBzdHJpbmcgYW5kIGFycmF5IG9mIGZvcm1hdCBzdHJpbmdzXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZ0FuZEFycmF5KGNvbmZpZykge1xuICAgICAgICB2YXIgdGVtcENvbmZpZyxcbiAgICAgICAgICAgIGJlc3RNb21lbnQsXG5cbiAgICAgICAgICAgIHNjb3JlVG9CZWF0LFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZTtcblxuICAgICAgICBpZiAoY29uZmlnLl9mLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZEZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbmZpZy5fZi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY3VycmVudFNjb3JlID0gMDtcbiAgICAgICAgICAgIHRlbXBDb25maWcgPSBjb3B5Q29uZmlnKHt9LCBjb25maWcpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0ZW1wQ29uZmlnLl91c2VVVEMgPSBjb25maWcuX3VzZVVUQztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBDb25maWcuX2YgPSBjb25maWcuX2ZbaV07XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KHRlbXBDb25maWcpO1xuXG4gICAgICAgICAgICBpZiAoIWlzVmFsaWQodGVtcENvbmZpZykpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW55IGlucHV0IHRoYXQgd2FzIG5vdCBwYXJzZWQgYWRkIGEgcGVuYWx0eSBmb3IgdGhhdCBmb3JtYXRcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSArPSBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykuY2hhcnNMZWZ0T3ZlcjtcblxuICAgICAgICAgICAgLy9vciB0b2tlbnNcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSArPSBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykudW51c2VkVG9rZW5zLmxlbmd0aCAqIDEwO1xuXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykuc2NvcmUgPSBjdXJyZW50U2NvcmU7XG5cbiAgICAgICAgICAgIGlmIChzY29yZVRvQmVhdCA9PSBudWxsIHx8IGN1cnJlbnRTY29yZSA8IHNjb3JlVG9CZWF0KSB7XG4gICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPSBjdXJyZW50U2NvcmU7XG4gICAgICAgICAgICAgICAgYmVzdE1vbWVudCA9IHRlbXBDb25maWc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHRlbmQoY29uZmlnLCBiZXN0TW9tZW50IHx8IHRlbXBDb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoY29uZmlnLl9pKTtcbiAgICAgICAgY29uZmlnLl9hID0gbWFwKFtpLnllYXIsIGkubW9udGgsIGkuZGF5IHx8IGkuZGF0ZSwgaS5ob3VyLCBpLm1pbnV0ZSwgaS5zZWNvbmQsIGkubWlsbGlzZWNvbmRdLCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqICYmIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVGcm9tQ29uZmlnIChjb25maWcpIHtcbiAgICAgICAgdmFyIHJlcyA9IG5ldyBNb21lbnQoY2hlY2tPdmVyZmxvdyhwcmVwYXJlQ29uZmlnKGNvbmZpZykpKTtcbiAgICAgICAgaWYgKHJlcy5fbmV4dERheSkge1xuICAgICAgICAgICAgLy8gQWRkaW5nIGlzIHNtYXJ0IGVub3VnaCBhcm91bmQgRFNUXG4gICAgICAgICAgICByZXMuYWRkKDEsICdkJyk7XG4gICAgICAgICAgICByZXMuX25leHREYXkgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZXBhcmVDb25maWcgKGNvbmZpZykge1xuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2ksXG4gICAgICAgICAgICBmb3JtYXQgPSBjb25maWcuX2Y7XG5cbiAgICAgICAgY29uZmlnLl9sb2NhbGUgPSBjb25maWcuX2xvY2FsZSB8fCBnZXRMb2NhbGUoY29uZmlnLl9sKTtcblxuICAgICAgICBpZiAoaW5wdXQgPT09IG51bGwgfHwgKGZvcm1hdCA9PT0gdW5kZWZpbmVkICYmIGlucHV0ID09PSAnJykpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnZhbGlkKHtudWxsSW5wdXQ6IHRydWV9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25maWcuX2kgPSBpbnB1dCA9IGNvbmZpZy5fbG9jYWxlLnByZXBhcnNlKGlucHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01vbWVudChpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9tZW50KGNoZWNrT3ZlcmZsb3coaW5wdXQpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBpbnB1dDtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCkge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9ICBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21JbnB1dChjb25maWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc1ZhbGlkKGNvbmZpZykpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21JbnB1dChjb25maWcpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gY29uZmlnLl9pO1xuICAgICAgICBpZiAoaXNVbmRlZmluZWQoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShob29rcy5ub3coKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoaW5wdXQudmFsdWVPZigpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nKGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYSA9IG1hcChpbnB1dC5zbGljZSgwKSwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludChvYmosIDEwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tT2JqZWN0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIoaW5wdXQpKSB7XG4gICAgICAgICAgICAvLyBmcm9tIG1pbGxpc2Vjb25kc1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoaW5wdXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsT3JVVEMgKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBpc1VUQykge1xuICAgICAgICB2YXIgYyA9IHt9O1xuXG4gICAgICAgIGlmIChsb2NhbGUgPT09IHRydWUgfHwgbG9jYWxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgc3RyaWN0ID0gbG9jYWxlO1xuICAgICAgICAgICAgbG9jYWxlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKChpc09iamVjdChpbnB1dCkgJiYgaXNPYmplY3RFbXB0eShpbnB1dCkpIHx8XG4gICAgICAgICAgICAgICAgKGlzQXJyYXkoaW5wdXQpICYmIGlucHV0Lmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgICAgIGlucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIG9iamVjdCBjb25zdHJ1Y3Rpb24gbXVzdCBiZSBkb25lIHRoaXMgd2F5LlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMTQyM1xuICAgICAgICBjLl9pc0FNb21lbnRPYmplY3QgPSB0cnVlO1xuICAgICAgICBjLl91c2VVVEMgPSBjLl9pc1VUQyA9IGlzVVRDO1xuICAgICAgICBjLl9sID0gbG9jYWxlO1xuICAgICAgICBjLl9pID0gaW5wdXQ7XG4gICAgICAgIGMuX2YgPSBmb3JtYXQ7XG4gICAgICAgIGMuX3N0cmljdCA9IHN0cmljdDtcblxuICAgICAgICByZXR1cm4gY3JlYXRlRnJvbUNvbmZpZyhjKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVMb2NhbCAoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsT3JVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIGZhbHNlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJvdG90eXBlTWluID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkubWluIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWF4IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8nLFxuICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgb3RoZXIgPSBjcmVhdGVMb2NhbC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWxpZCgpICYmIG90aGVyLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA8IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnZhbGlkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdmFyIHByb3RvdHlwZU1heCA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudCgpLm1heCBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1pbiBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvJyxcbiAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXIgPiB0aGlzID8gdGhpcyA6IG90aGVyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIFBpY2sgYSBtb21lbnQgbSBmcm9tIG1vbWVudHMgc28gdGhhdCBtW2ZuXShvdGhlcikgaXMgdHJ1ZSBmb3IgYWxsXG4gICAgLy8gb3RoZXIuIFRoaXMgcmVsaWVzIG9uIHRoZSBmdW5jdGlvbiBmbiB0byBiZSB0cmFuc2l0aXZlLlxuICAgIC8vXG4gICAgLy8gbW9tZW50cyBzaG91bGQgZWl0aGVyIGJlIGFuIGFycmF5IG9mIG1vbWVudCBvYmplY3RzIG9yIGFuIGFycmF5LCB3aG9zZVxuICAgIC8vIGZpcnN0IGVsZW1lbnQgaXMgYW4gYXJyYXkgb2YgbW9tZW50IG9iamVjdHMuXG4gICAgZnVuY3Rpb24gcGlja0J5KGZuLCBtb21lbnRzKSB7XG4gICAgICAgIHZhciByZXMsIGk7XG4gICAgICAgIGlmIChtb21lbnRzLmxlbmd0aCA9PT0gMSAmJiBpc0FycmF5KG1vbWVudHNbMF0pKSB7XG4gICAgICAgICAgICBtb21lbnRzID0gbW9tZW50c1swXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1vbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwoKTtcbiAgICAgICAgfVxuICAgICAgICByZXMgPSBtb21lbnRzWzBdO1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgbW9tZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKCFtb21lbnRzW2ldLmlzVmFsaWQoKSB8fCBtb21lbnRzW2ldW2ZuXShyZXMpKSB7XG4gICAgICAgICAgICAgICAgcmVzID0gbW9tZW50c1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IFVzZSBbXS5zb3J0IGluc3RlYWQ/XG4gICAgZnVuY3Rpb24gbWluICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG5cbiAgICAgICAgcmV0dXJuIHBpY2tCeSgnaXNCZWZvcmUnLCBhcmdzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXggKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcblxuICAgICAgICByZXR1cm4gcGlja0J5KCdpc0FmdGVyJywgYXJncyk7XG4gICAgfVxuXG4gICAgdmFyIG5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93ID8gRGF0ZS5ub3coKSA6ICsobmV3IERhdGUoKSk7XG4gICAgfTtcblxuICAgIHZhciBvcmRlcmluZyA9IFsneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcsICdtaWxsaXNlY29uZCddO1xuXG4gICAgZnVuY3Rpb24gaXNEdXJhdGlvblZhbGlkKG0pIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIG0pIHtcbiAgICAgICAgICAgIGlmICghKGluZGV4T2YuY2FsbChvcmRlcmluZywga2V5KSAhPT0gLTEgJiYgKG1ba2V5XSA9PSBudWxsIHx8ICFpc05hTihtW2tleV0pKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdW5pdEhhc0RlY2ltYWwgPSBmYWxzZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcmRlcmluZy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKG1bb3JkZXJpbmdbaV1dKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVuaXRIYXNEZWNpbWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gb25seSBhbGxvdyBub24taW50ZWdlcnMgZm9yIHNtYWxsZXN0IHVuaXRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlRmxvYXQobVtvcmRlcmluZ1tpXV0pICE9PSB0b0ludChtW29yZGVyaW5nW2ldXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdW5pdEhhc0RlY2ltYWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQkMSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVmFsaWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW52YWxpZCQxKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oTmFOKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBEdXJhdGlvbiAoZHVyYXRpb24pIHtcbiAgICAgICAgdmFyIG5vcm1hbGl6ZWRJbnB1dCA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKGR1cmF0aW9uKSxcbiAgICAgICAgICAgIHllYXJzID0gbm9ybWFsaXplZElucHV0LnllYXIgfHwgMCxcbiAgICAgICAgICAgIHF1YXJ0ZXJzID0gbm9ybWFsaXplZElucHV0LnF1YXJ0ZXIgfHwgMCxcbiAgICAgICAgICAgIG1vbnRocyA9IG5vcm1hbGl6ZWRJbnB1dC5tb250aCB8fCAwLFxuICAgICAgICAgICAgd2Vla3MgPSBub3JtYWxpemVkSW5wdXQud2VlayB8fCBub3JtYWxpemVkSW5wdXQuaXNvV2VlayB8fCAwLFxuICAgICAgICAgICAgZGF5cyA9IG5vcm1hbGl6ZWRJbnB1dC5kYXkgfHwgMCxcbiAgICAgICAgICAgIGhvdXJzID0gbm9ybWFsaXplZElucHV0LmhvdXIgfHwgMCxcbiAgICAgICAgICAgIG1pbnV0ZXMgPSBub3JtYWxpemVkSW5wdXQubWludXRlIHx8IDAsXG4gICAgICAgICAgICBzZWNvbmRzID0gbm9ybWFsaXplZElucHV0LnNlY29uZCB8fCAwLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzID0gbm9ybWFsaXplZElucHV0Lm1pbGxpc2Vjb25kIHx8IDA7XG5cbiAgICAgICAgdGhpcy5faXNWYWxpZCA9IGlzRHVyYXRpb25WYWxpZChub3JtYWxpemVkSW5wdXQpO1xuXG4gICAgICAgIC8vIHJlcHJlc2VudGF0aW9uIGZvciBkYXRlQWRkUmVtb3ZlXG4gICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyA9ICttaWxsaXNlY29uZHMgK1xuICAgICAgICAgICAgc2Vjb25kcyAqIDFlMyArIC8vIDEwMDBcbiAgICAgICAgICAgIG1pbnV0ZXMgKiA2ZTQgKyAvLyAxMDAwICogNjBcbiAgICAgICAgICAgIGhvdXJzICogMTAwMCAqIDYwICogNjA7IC8vdXNpbmcgMTAwMCAqIDYwICogNjAgaW5zdGVhZCBvZiAzNmU1IHRvIGF2b2lkIGZsb2F0aW5nIHBvaW50IHJvdW5kaW5nIGVycm9ycyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjk3OFxuICAgICAgICAvLyBCZWNhdXNlIG9mIGRhdGVBZGRSZW1vdmUgdHJlYXRzIDI0IGhvdXJzIGFzIGRpZmZlcmVudCBmcm9tIGFcbiAgICAgICAgLy8gZGF5IHdoZW4gd29ya2luZyBhcm91bmQgRFNULCB3ZSBuZWVkIHRvIHN0b3JlIHRoZW0gc2VwYXJhdGVseVxuICAgICAgICB0aGlzLl9kYXlzID0gK2RheXMgK1xuICAgICAgICAgICAgd2Vla3MgKiA3O1xuICAgICAgICAvLyBJdCBpcyBpbXBvc3NpYmxlIHRvIHRyYW5zbGF0ZSBtb250aHMgaW50byBkYXlzIHdpdGhvdXQga25vd2luZ1xuICAgICAgICAvLyB3aGljaCBtb250aHMgeW91IGFyZSBhcmUgdGFsa2luZyBhYm91dCwgc28gd2UgaGF2ZSB0byBzdG9yZVxuICAgICAgICAvLyBpdCBzZXBhcmF0ZWx5LlxuICAgICAgICB0aGlzLl9tb250aHMgPSArbW9udGhzICtcbiAgICAgICAgICAgIHF1YXJ0ZXJzICogMyArXG4gICAgICAgICAgICB5ZWFycyAqIDEyO1xuXG4gICAgICAgIHRoaXMuX2RhdGEgPSB7fTtcblxuICAgICAgICB0aGlzLl9sb2NhbGUgPSBnZXRMb2NhbGUoKTtcblxuICAgICAgICB0aGlzLl9idWJibGUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uIChvYmopIHtcbiAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIER1cmF0aW9uO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFic1JvdW5kIChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKC0xICogbnVtYmVyKSAqIC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGZ1bmN0aW9uIG9mZnNldCAodG9rZW4sIHNlcGFyYXRvcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbih0b2tlbiwgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMudXRjT2Zmc2V0KCk7XG4gICAgICAgICAgICB2YXIgc2lnbiA9ICcrJztcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gLW9mZnNldDtcbiAgICAgICAgICAgICAgICBzaWduID0gJy0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNpZ24gKyB6ZXJvRmlsbCh+fihvZmZzZXQgLyA2MCksIDIpICsgc2VwYXJhdG9yICsgemVyb0ZpbGwofn4ob2Zmc2V0KSAlIDYwLCAyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb2Zmc2V0KCdaJywgJzonKTtcbiAgICBvZmZzZXQoJ1paJywgJycpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignWicsICBtYXRjaFNob3J0T2Zmc2V0KTtcbiAgICBhZGRSZWdleFRva2VuKCdaWicsIG1hdGNoU2hvcnRPZmZzZXQpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydaJywgJ1paJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX3VzZVVUQyA9IHRydWU7XG4gICAgICAgIGNvbmZpZy5fdHptID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaFNob3J0T2Zmc2V0LCBpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyB0aW1lem9uZSBjaHVua2VyXG4gICAgLy8gJysxMDowMCcgPiBbJzEwJywgICcwMCddXG4gICAgLy8gJy0xNTMwJyAgPiBbJy0xNScsICczMCddXG4gICAgdmFyIGNodW5rT2Zmc2V0ID0gLyhbXFwrXFwtXXxcXGRcXGQpL2dpO1xuXG4gICAgZnVuY3Rpb24gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaGVyLCBzdHJpbmcpIHtcbiAgICAgICAgdmFyIG1hdGNoZXMgPSAoc3RyaW5nIHx8ICcnKS5tYXRjaChtYXRjaGVyKTtcblxuICAgICAgICBpZiAobWF0Y2hlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2h1bmsgICA9IG1hdGNoZXNbbWF0Y2hlcy5sZW5ndGggLSAxXSB8fCBbXTtcbiAgICAgICAgdmFyIHBhcnRzICAgPSAoY2h1bmsgKyAnJykubWF0Y2goY2h1bmtPZmZzZXQpIHx8IFsnLScsIDAsIDBdO1xuICAgICAgICB2YXIgbWludXRlcyA9ICsocGFydHNbMV0gKiA2MCkgKyB0b0ludChwYXJ0c1syXSk7XG5cbiAgICAgICAgcmV0dXJuIG1pbnV0ZXMgPT09IDAgP1xuICAgICAgICAgIDAgOlxuICAgICAgICAgIHBhcnRzWzBdID09PSAnKycgPyBtaW51dGVzIDogLW1pbnV0ZXM7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGEgbW9tZW50IGZyb20gaW5wdXQsIHRoYXQgaXMgbG9jYWwvdXRjL3pvbmUgZXF1aXZhbGVudCB0byBtb2RlbC5cbiAgICBmdW5jdGlvbiBjbG9uZVdpdGhPZmZzZXQoaW5wdXQsIG1vZGVsKSB7XG4gICAgICAgIHZhciByZXMsIGRpZmY7XG4gICAgICAgIGlmIChtb2RlbC5faXNVVEMpIHtcbiAgICAgICAgICAgIHJlcyA9IG1vZGVsLmNsb25lKCk7XG4gICAgICAgICAgICBkaWZmID0gKGlzTW9tZW50KGlucHV0KSB8fCBpc0RhdGUoaW5wdXQpID8gaW5wdXQudmFsdWVPZigpIDogY3JlYXRlTG9jYWwoaW5wdXQpLnZhbHVlT2YoKSkgLSByZXMudmFsdWVPZigpO1xuICAgICAgICAgICAgLy8gVXNlIGxvdy1sZXZlbCBhcGksIGJlY2F1c2UgdGhpcyBmbiBpcyBsb3ctbGV2ZWwgYXBpLlxuICAgICAgICAgICAgcmVzLl9kLnNldFRpbWUocmVzLl9kLnZhbHVlT2YoKSArIGRpZmYpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHJlcywgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCkubG9jYWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERhdGVPZmZzZXQgKG0pIHtcbiAgICAgICAgLy8gT24gRmlyZWZveC4yNCBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgYSBmbG9hdGluZyBwb2ludC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvcHVsbC8xODcxXG4gICAgICAgIHJldHVybiAtTWF0aC5yb3VuZChtLl9kLmdldFRpbWV6b25lT2Zmc2V0KCkgLyAxNSkgKiAxNTtcbiAgICB9XG5cbiAgICAvLyBIT09LU1xuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBhIG1vbWVudCBpcyBtdXRhdGVkLlxuICAgIC8vIEl0IGlzIGludGVuZGVkIHRvIGtlZXAgdGhlIG9mZnNldCBpbiBzeW5jIHdpdGggdGhlIHRpbWV6b25lLlxuICAgIGhvb2tzLnVwZGF0ZU9mZnNldCA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgLy8ga2VlcExvY2FsVGltZSA9IHRydWUgbWVhbnMgb25seSBjaGFuZ2UgdGhlIHRpbWV6b25lLCB3aXRob3V0XG4gICAgLy8gYWZmZWN0aW5nIHRoZSBsb2NhbCBob3VyLiBTbyA1OjMxOjI2ICswMzAwIC0tW3V0Y09mZnNldCgyLCB0cnVlKV0tLT5cbiAgICAvLyA1OjMxOjI2ICswMjAwIEl0IGlzIHBvc3NpYmxlIHRoYXQgNTozMToyNiBkb2Vzbid0IGV4aXN0IHdpdGggb2Zmc2V0XG4gICAgLy8gKzAyMDAsIHNvIHdlIGFkanVzdCB0aGUgdGltZSBhcyBuZWVkZWQsIHRvIGJlIHZhbGlkLlxuICAgIC8vXG4gICAgLy8gS2VlcGluZyB0aGUgdGltZSBhY3R1YWxseSBhZGRzL3N1YnRyYWN0cyAob25lIGhvdXIpXG4gICAgLy8gZnJvbSB0aGUgYWN0dWFsIHJlcHJlc2VudGVkIHRpbWUuIFRoYXQgaXMgd2h5IHdlIGNhbGwgdXBkYXRlT2Zmc2V0XG4gICAgLy8gYSBzZWNvbmQgdGltZS4gSW4gY2FzZSBpdCB3YW50cyB1cyB0byBjaGFuZ2UgdGhlIG9mZnNldCBhZ2FpblxuICAgIC8vIF9jaGFuZ2VJblByb2dyZXNzID09IHRydWUgY2FzZSwgdGhlbiB3ZSBoYXZlIHRvIGFkanVzdCwgYmVjYXVzZVxuICAgIC8vIHRoZXJlIGlzIG5vIHN1Y2ggdGltZSBpbiB0aGUgZ2l2ZW4gdGltZXpvbmUuXG4gICAgZnVuY3Rpb24gZ2V0U2V0T2Zmc2V0IChpbnB1dCwga2VlcExvY2FsVGltZSwga2VlcE1pbnV0ZXMpIHtcbiAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX29mZnNldCB8fCAwLFxuICAgICAgICAgICAgbG9jYWxBZGp1c3Q7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGlucHV0KSA8IDE2ICYmICFrZWVwTWludXRlcykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQgKiA2MDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5faXNVVEMgJiYga2VlcExvY2FsVGltZSkge1xuICAgICAgICAgICAgICAgIGxvY2FsQWRqdXN0ID0gZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX29mZnNldCA9IGlucHV0O1xuICAgICAgICAgICAgdGhpcy5faXNVVEMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGxvY2FsQWRqdXN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZChsb2NhbEFkanVzdCwgJ20nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvZmZzZXQgIT09IGlucHV0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFrZWVwTG9jYWxUaW1lIHx8IHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3VidHJhY3QodGhpcywgY3JlYXRlRHVyYXRpb24oaW5wdXQgLSBvZmZzZXQsICdtJyksIDEsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9jaGFuZ2VJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gb2Zmc2V0IDogZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFpvbmUgKGlucHV0LCBrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gLWlucHV0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldChpbnB1dCwga2VlcExvY2FsVGltZSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIC10aGlzLnV0Y09mZnNldCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9VVEMgKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXRjT2Zmc2V0KDAsIGtlZXBMb2NhbFRpbWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvTG9jYWwgKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzVVRDKSB7XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICAgICAgICAgIHRoaXMuX2lzVVRDID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJ0cmFjdChnZXREYXRlT2Zmc2V0KHRoaXMpLCAnbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0ICgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3R6bSAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCh0aGlzLl90em0sIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5faSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhciB0Wm9uZSA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hPZmZzZXQsIHRoaXMuX2kpO1xuICAgICAgICAgICAgaWYgKHRab25lICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnV0Y09mZnNldCh0Wm9uZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgwLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYXNBbGlnbmVkSG91ck9mZnNldCAoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlucHV0ID0gaW5wdXQgPyBjcmVhdGVMb2NhbChpbnB1dCkudXRjT2Zmc2V0KCkgOiAwO1xuXG4gICAgICAgIHJldHVybiAodGhpcy51dGNPZmZzZXQoKSAtIGlucHV0KSAlIDYwID09PSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lICgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KCkgPiB0aGlzLmNsb25lKCkubW9udGgoMCkudXRjT2Zmc2V0KCkgfHxcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KCkgPiB0aGlzLmNsb25lKCkubW9udGgoNSkudXRjT2Zmc2V0KClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RheWxpZ2h0U2F2aW5nVGltZVNoaWZ0ZWQgKCkge1xuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHRoaXMuX2lzRFNUU2hpZnRlZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYyA9IHt9O1xuXG4gICAgICAgIGNvcHlDb25maWcoYywgdGhpcyk7XG4gICAgICAgIGMgPSBwcmVwYXJlQ29uZmlnKGMpO1xuXG4gICAgICAgIGlmIChjLl9hKSB7XG4gICAgICAgICAgICB2YXIgb3RoZXIgPSBjLl9pc1VUQyA/IGNyZWF0ZVVUQyhjLl9hKSA6IGNyZWF0ZUxvY2FsKGMuX2EpO1xuICAgICAgICAgICAgdGhpcy5faXNEU1RTaGlmdGVkID0gdGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICAgICBjb21wYXJlQXJyYXlzKGMuX2EsIG90aGVyLnRvQXJyYXkoKSkgPiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faXNEU1RTaGlmdGVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTG9jYWwgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyAhdGhpcy5faXNVVEMgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1V0Y09mZnNldCAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGMgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLl9pc1VUQyAmJiB0aGlzLl9vZmZzZXQgPT09IDAgOiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBBU1AuTkVUIGpzb24gZGF0ZSBmb3JtYXQgcmVnZXhcbiAgICB2YXIgYXNwTmV0UmVnZXggPSAvXihcXC18XFwrKT8oPzooXFxkKilbLiBdKT8oXFxkKylcXDooXFxkKykoPzpcXDooXFxkKykoXFwuXFxkKik/KT8kLztcblxuICAgIC8vIGZyb20gaHR0cDovL2RvY3MuY2xvc3VyZS1saWJyYXJ5Lmdvb2dsZWNvZGUuY29tL2dpdC9jbG9zdXJlX2dvb2dfZGF0ZV9kYXRlLmpzLnNvdXJjZS5odG1sXG4gICAgLy8gc29tZXdoYXQgbW9yZSBpbiBsaW5lIHdpdGggNC40LjMuMiAyMDA0IHNwZWMsIGJ1dCBhbGxvd3MgZGVjaW1hbCBhbnl3aGVyZVxuICAgIC8vIGFuZCBmdXJ0aGVyIG1vZGlmaWVkIHRvIGFsbG93IGZvciBzdHJpbmdzIGNvbnRhaW5pbmcgYm90aCB3ZWVrIGFuZCBkYXlcbiAgICB2YXIgaXNvUmVnZXggPSAvXigtfFxcKyk/UCg/OihbLStdP1swLTksLl0qKVkpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVcpPyg/OihbLStdP1swLTksLl0qKUQpPyg/OlQoPzooWy0rXT9bMC05LC5dKilIKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilTKT8pPyQvO1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlRHVyYXRpb24gKGlucHV0LCBrZXkpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gaW5wdXQsXG4gICAgICAgICAgICAvLyBtYXRjaGluZyBhZ2FpbnN0IHJlZ2V4cCBpcyBleHBlbnNpdmUsIGRvIGl0IG9uIGRlbWFuZFxuICAgICAgICAgICAgbWF0Y2ggPSBudWxsLFxuICAgICAgICAgICAgc2lnbixcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgIGRpZmZSZXM7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBtcyA6IGlucHV0Ll9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICAgICAgZCAgOiBpbnB1dC5fZGF5cyxcbiAgICAgICAgICAgICAgICBNICA6IGlucHV0Ll9tb250aHNcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIoaW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uW2tleV0gPSBpbnB1dDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ubWlsbGlzZWNvbmRzID0gaW5wdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoISEobWF0Y2ggPSBhc3BOZXRSZWdleC5leGVjKGlucHV0KSkpIHtcbiAgICAgICAgICAgIHNpZ24gPSAobWF0Y2hbMV0gPT09ICctJykgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5ICA6IDAsXG4gICAgICAgICAgICAgICAgZCAgOiB0b0ludChtYXRjaFtEQVRFXSkgICAgICAgICAgICAgICAgICAgICAgICAgKiBzaWduLFxuICAgICAgICAgICAgICAgIGggIDogdG9JbnQobWF0Y2hbSE9VUl0pICAgICAgICAgICAgICAgICAgICAgICAgICogc2lnbixcbiAgICAgICAgICAgICAgICBtICA6IHRvSW50KG1hdGNoW01JTlVURV0pICAgICAgICAgICAgICAgICAgICAgICAqIHNpZ24sXG4gICAgICAgICAgICAgICAgcyAgOiB0b0ludChtYXRjaFtTRUNPTkRdKSAgICAgICAgICAgICAgICAgICAgICAgKiBzaWduLFxuICAgICAgICAgICAgICAgIG1zIDogdG9JbnQoYWJzUm91bmQobWF0Y2hbTUlMTElTRUNPTkRdICogMTAwMCkpICogc2lnbiAvLyB0aGUgbWlsbGlzZWNvbmQgZGVjaW1hbCBwb2ludCBpcyBpbmNsdWRlZCBpbiB0aGUgbWF0Y2hcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoISEobWF0Y2ggPSBpc29SZWdleC5leGVjKGlucHV0KSkpIHtcbiAgICAgICAgICAgIHNpZ24gPSAobWF0Y2hbMV0gPT09ICctJykgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5IDogcGFyc2VJc28obWF0Y2hbMl0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIE0gOiBwYXJzZUlzbyhtYXRjaFszXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgdyA6IHBhcnNlSXNvKG1hdGNoWzRdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBkIDogcGFyc2VJc28obWF0Y2hbNV0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIGggOiBwYXJzZUlzbyhtYXRjaFs2XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgbSA6IHBhcnNlSXNvKG1hdGNoWzddLCBzaWduKSxcbiAgICAgICAgICAgICAgICBzIDogcGFyc2VJc28obWF0Y2hbOF0sIHNpZ24pXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGR1cmF0aW9uID09IG51bGwpIHsvLyBjaGVja3MgZm9yIG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkdXJhdGlvbiA9PT0gJ29iamVjdCcgJiYgKCdmcm9tJyBpbiBkdXJhdGlvbiB8fCAndG8nIGluIGR1cmF0aW9uKSkge1xuICAgICAgICAgICAgZGlmZlJlcyA9IG1vbWVudHNEaWZmZXJlbmNlKGNyZWF0ZUxvY2FsKGR1cmF0aW9uLmZyb20pLCBjcmVhdGVMb2NhbChkdXJhdGlvbi50bykpO1xuXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgZHVyYXRpb24ubXMgPSBkaWZmUmVzLm1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIGR1cmF0aW9uLk0gPSBkaWZmUmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldCA9IG5ldyBEdXJhdGlvbihkdXJhdGlvbik7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpICYmIGhhc093blByb3AoaW5wdXQsICdfbG9jYWxlJykpIHtcbiAgICAgICAgICAgIHJldC5fbG9jYWxlID0gaW5wdXQuX2xvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgY3JlYXRlRHVyYXRpb24uZm4gPSBEdXJhdGlvbi5wcm90b3R5cGU7XG4gICAgY3JlYXRlRHVyYXRpb24uaW52YWxpZCA9IGNyZWF0ZUludmFsaWQkMTtcblxuICAgIGZ1bmN0aW9uIHBhcnNlSXNvIChpbnAsIHNpZ24pIHtcbiAgICAgICAgLy8gV2UnZCBub3JtYWxseSB1c2Ugfn5pbnAgZm9yIHRoaXMsIGJ1dCB1bmZvcnR1bmF0ZWx5IGl0IGFsc29cbiAgICAgICAgLy8gY29udmVydHMgZmxvYXRzIHRvIGludHMuXG4gICAgICAgIC8vIGlucCBtYXkgYmUgdW5kZWZpbmVkLCBzbyBjYXJlZnVsIGNhbGxpbmcgcmVwbGFjZSBvbiBpdC5cbiAgICAgICAgdmFyIHJlcyA9IGlucCAmJiBwYXJzZUZsb2F0KGlucC5yZXBsYWNlKCcsJywgJy4nKSk7XG4gICAgICAgIC8vIGFwcGx5IHNpZ24gd2hpbGUgd2UncmUgYXQgaXRcbiAgICAgICAgcmV0dXJuIChpc05hTihyZXMpID8gMCA6IHJlcykgKiBzaWduO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcyA9IHt9O1xuXG4gICAgICAgIHJlcy5tb250aHMgPSBvdGhlci5tb250aCgpIC0gYmFzZS5tb250aCgpICtcbiAgICAgICAgICAgIChvdGhlci55ZWFyKCkgLSBiYXNlLnllYXIoKSkgKiAxMjtcbiAgICAgICAgaWYgKGJhc2UuY2xvbmUoKS5hZGQocmVzLm1vbnRocywgJ00nKS5pc0FmdGVyKG90aGVyKSkge1xuICAgICAgICAgICAgLS1yZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9ICtvdGhlciAtICsoYmFzZS5jbG9uZSgpLmFkZChyZXMubW9udGhzLCAnTScpKTtcblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKSB7XG4gICAgICAgIHZhciByZXM7XG4gICAgICAgIGlmICghKGJhc2UuaXNWYWxpZCgpICYmIG90aGVyLmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7bWlsbGlzZWNvbmRzOiAwLCBtb250aHM6IDB9O1xuICAgICAgICB9XG5cbiAgICAgICAgb3RoZXIgPSBjbG9uZVdpdGhPZmZzZXQob3RoZXIsIGJhc2UpO1xuICAgICAgICBpZiAoYmFzZS5pc0JlZm9yZShvdGhlcikpIHtcbiAgICAgICAgICAgIHJlcyA9IHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzID0gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShvdGhlciwgYmFzZSk7XG4gICAgICAgICAgICByZXMubWlsbGlzZWNvbmRzID0gLXJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgICAgICByZXMubW9udGhzID0gLXJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHJlbW92ZSAnbmFtZScgYXJnIGFmdGVyIGRlcHJlY2F0aW9uIGlzIHJlbW92ZWRcbiAgICBmdW5jdGlvbiBjcmVhdGVBZGRlcihkaXJlY3Rpb24sIG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwsIHBlcmlvZCkge1xuICAgICAgICAgICAgdmFyIGR1ciwgdG1wO1xuICAgICAgICAgICAgLy9pbnZlcnQgdGhlIGFyZ3VtZW50cywgYnV0IGNvbXBsYWluIGFib3V0IGl0XG4gICAgICAgICAgICBpZiAocGVyaW9kICE9PSBudWxsICYmICFpc05hTigrcGVyaW9kKSkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZShuYW1lLCAnbW9tZW50KCkuJyArIG5hbWUgICsgJyhwZXJpb2QsIG51bWJlcikgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBtb21lbnQoKS4nICsgbmFtZSArICcobnVtYmVyLCBwZXJpb2QpLiAnICtcbiAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvYWRkLWludmVydGVkLXBhcmFtLyBmb3IgbW9yZSBpbmZvLicpO1xuICAgICAgICAgICAgICAgIHRtcCA9IHZhbDsgdmFsID0gcGVyaW9kOyBwZXJpb2QgPSB0bXA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhbCA9IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnID8gK3ZhbCA6IHZhbDtcbiAgICAgICAgICAgIGR1ciA9IGNyZWF0ZUR1cmF0aW9uKHZhbCwgcGVyaW9kKTtcbiAgICAgICAgICAgIGFkZFN1YnRyYWN0KHRoaXMsIGR1ciwgZGlyZWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFN1YnRyYWN0IChtb20sIGR1cmF0aW9uLCBpc0FkZGluZywgdXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgZGF5cyA9IGFic1JvdW5kKGR1cmF0aW9uLl9kYXlzKSxcbiAgICAgICAgICAgIG1vbnRocyA9IGFic1JvdW5kKGR1cmF0aW9uLl9tb250aHMpO1xuXG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gTm8gb3BcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZU9mZnNldCA9IHVwZGF0ZU9mZnNldCA9PSBudWxsID8gdHJ1ZSA6IHVwZGF0ZU9mZnNldDtcblxuICAgICAgICBpZiAobW9udGhzKSB7XG4gICAgICAgICAgICBzZXRNb250aChtb20sIGdldChtb20sICdNb250aCcpICsgbW9udGhzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXlzKSB7XG4gICAgICAgICAgICBzZXQkMShtb20sICdEYXRlJywgZ2V0KG1vbSwgJ0RhdGUnKSArIGRheXMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICAgICAgbW9tLl9kLnNldFRpbWUobW9tLl9kLnZhbHVlT2YoKSArIG1pbGxpc2Vjb25kcyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQobW9tLCBkYXlzIHx8IG1vbnRocyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYWRkICAgICAgPSBjcmVhdGVBZGRlcigxLCAnYWRkJyk7XG4gICAgdmFyIHN1YnRyYWN0ID0gY3JlYXRlQWRkZXIoLTEsICdzdWJ0cmFjdCcpO1xuXG4gICAgZnVuY3Rpb24gZ2V0Q2FsZW5kYXJGb3JtYXQobXlNb21lbnQsIG5vdykge1xuICAgICAgICB2YXIgZGlmZiA9IG15TW9tZW50LmRpZmYobm93LCAnZGF5cycsIHRydWUpO1xuICAgICAgICByZXR1cm4gZGlmZiA8IC02ID8gJ3NhbWVFbHNlJyA6XG4gICAgICAgICAgICAgICAgZGlmZiA8IC0xID8gJ2xhc3RXZWVrJyA6XG4gICAgICAgICAgICAgICAgZGlmZiA8IDAgPyAnbGFzdERheScgOlxuICAgICAgICAgICAgICAgIGRpZmYgPCAxID8gJ3NhbWVEYXknIDpcbiAgICAgICAgICAgICAgICBkaWZmIDwgMiA/ICduZXh0RGF5JyA6XG4gICAgICAgICAgICAgICAgZGlmZiA8IDcgPyAnbmV4dFdlZWsnIDogJ3NhbWVFbHNlJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYWxlbmRhciQxICh0aW1lLCBmb3JtYXRzKSB7XG4gICAgICAgIC8vIFdlIHdhbnQgdG8gY29tcGFyZSB0aGUgc3RhcnQgb2YgdG9kYXksIHZzIHRoaXMuXG4gICAgICAgIC8vIEdldHRpbmcgc3RhcnQtb2YtdG9kYXkgZGVwZW5kcyBvbiB3aGV0aGVyIHdlJ3JlIGxvY2FsL3V0Yy9vZmZzZXQgb3Igbm90LlxuICAgICAgICB2YXIgbm93ID0gdGltZSB8fCBjcmVhdGVMb2NhbCgpLFxuICAgICAgICAgICAgc29kID0gY2xvbmVXaXRoT2Zmc2V0KG5vdywgdGhpcykuc3RhcnRPZignZGF5JyksXG4gICAgICAgICAgICBmb3JtYXQgPSBob29rcy5jYWxlbmRhckZvcm1hdCh0aGlzLCBzb2QpIHx8ICdzYW1lRWxzZSc7XG5cbiAgICAgICAgdmFyIG91dHB1dCA9IGZvcm1hdHMgJiYgKGlzRnVuY3Rpb24oZm9ybWF0c1tmb3JtYXRdKSA/IGZvcm1hdHNbZm9ybWF0XS5jYWxsKHRoaXMsIG5vdykgOiBmb3JtYXRzW2Zvcm1hdF0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdChvdXRwdXQgfHwgdGhpcy5sb2NhbGVEYXRhKCkuY2FsZW5kYXIoZm9ybWF0LCB0aGlzLCBjcmVhdGVMb2NhbChub3cpKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xvbmUgKCkge1xuICAgICAgICByZXR1cm4gbmV3IE1vbWVudCh0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FmdGVyIChpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPiBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbElucHV0LnZhbHVlT2YoKSA8IHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0JlZm9yZSAoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCk7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsSW5wdXQuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpIHx8ICdtaWxsaXNlY29uZCc7XG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21pbGxpc2Vjb25kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpIDwgbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmVuZE9mKHVuaXRzKS52YWx1ZU9mKCkgPCBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQmV0d2VlbiAoZnJvbSwgdG8sIHVuaXRzLCBpbmNsdXNpdml0eSkge1xuICAgICAgICB2YXIgbG9jYWxGcm9tID0gaXNNb21lbnQoZnJvbSkgPyBmcm9tIDogY3JlYXRlTG9jYWwoZnJvbSksXG4gICAgICAgICAgICBsb2NhbFRvID0gaXNNb21lbnQodG8pID8gdG8gOiBjcmVhdGVMb2NhbCh0byk7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsRnJvbS5pc1ZhbGlkKCkgJiYgbG9jYWxUby5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaW5jbHVzaXZpdHkgPSBpbmNsdXNpdml0eSB8fCAnKCknO1xuICAgICAgICByZXR1cm4gKGluY2x1c2l2aXR5WzBdID09PSAnKCcgPyB0aGlzLmlzQWZ0ZXIobG9jYWxGcm9tLCB1bml0cykgOiAhdGhpcy5pc0JlZm9yZShsb2NhbEZyb20sIHVuaXRzKSkgJiZcbiAgICAgICAgICAgIChpbmNsdXNpdml0eVsxXSA9PT0gJyknID8gdGhpcy5pc0JlZm9yZShsb2NhbFRvLCB1bml0cykgOiAhdGhpcy5pc0FmdGVyKGxvY2FsVG8sIHVuaXRzKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTYW1lIChpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KSxcbiAgICAgICAgICAgIGlucHV0TXM7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsSW5wdXQuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpIHx8ICdtaWxsaXNlY29uZCc7XG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21pbGxpc2Vjb25kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpID09PSBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlucHV0TXMgPSBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkuc3RhcnRPZih1bml0cykudmFsdWVPZigpIDw9IGlucHV0TXMgJiYgaW5wdXRNcyA8PSB0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpLnZhbHVlT2YoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU2FtZU9yQWZ0ZXIgKGlucHV0LCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsIHVuaXRzKSB8fCB0aGlzLmlzQWZ0ZXIoaW5wdXQsIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckJlZm9yZSAoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU2FtZShpbnB1dCwgdW5pdHMpIHx8IHRoaXMuaXNCZWZvcmUoaW5wdXQsIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkaWZmIChpbnB1dCwgdW5pdHMsIGFzRmxvYXQpIHtcbiAgICAgICAgdmFyIHRoYXQsXG4gICAgICAgICAgICB6b25lRGVsdGEsXG4gICAgICAgICAgICBvdXRwdXQ7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoYXQgPSBjbG9uZVdpdGhPZmZzZXQoaW5wdXQsIHRoaXMpO1xuXG4gICAgICAgIGlmICghdGhhdC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB6b25lRGVsdGEgPSAodGhhdC51dGNPZmZzZXQoKSAtIHRoaXMudXRjT2Zmc2V0KCkpICogNmU0O1xuXG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOiBvdXRwdXQgPSBtb250aERpZmYodGhpcywgdGhhdCkgLyAxMjsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6IG91dHB1dCA9IG1vbnRoRGlmZih0aGlzLCB0aGF0KTsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzogb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMzsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOiBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gMWUzOyBicmVhazsgLy8gMTAwMFxuICAgICAgICAgICAgY2FzZSAnbWludXRlJzogb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDZlNDsgYnJlYWs7IC8vIDEwMDAgKiA2MFxuICAgICAgICAgICAgY2FzZSAnaG91cic6IG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyAzNmU1OyBicmVhazsgLy8gMTAwMCAqIDYwICogNjBcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6IG91dHB1dCA9ICh0aGlzIC0gdGhhdCAtIHpvbmVEZWx0YSkgLyA4NjRlNTsgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOiBvdXRwdXQgPSAodGhpcyAtIHRoYXQgLSB6b25lRGVsdGEpIC8gNjA0OGU1OyBicmVhazsgLy8gMTAwMCAqIDYwICogNjAgKiAyNCAqIDcsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGRlZmF1bHQ6IG91dHB1dCA9IHRoaXMgLSB0aGF0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzRmxvYXQgPyBvdXRwdXQgOiBhYnNGbG9vcihvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoRGlmZiAoYSwgYikge1xuICAgICAgICAvLyBkaWZmZXJlbmNlIGluIG1vbnRoc1xuICAgICAgICB2YXIgd2hvbGVNb250aERpZmYgPSAoKGIueWVhcigpIC0gYS55ZWFyKCkpICogMTIpICsgKGIubW9udGgoKSAtIGEubW9udGgoKSksXG4gICAgICAgICAgICAvLyBiIGlzIGluIChhbmNob3IgLSAxIG1vbnRoLCBhbmNob3IgKyAxIG1vbnRoKVxuICAgICAgICAgICAgYW5jaG9yID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiwgJ21vbnRocycpLFxuICAgICAgICAgICAgYW5jaG9yMiwgYWRqdXN0O1xuXG4gICAgICAgIGlmIChiIC0gYW5jaG9yIDwgMCkge1xuICAgICAgICAgICAgYW5jaG9yMiA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYgLSAxLCAnbW9udGhzJyk7XG4gICAgICAgICAgICAvLyBsaW5lYXIgYWNyb3NzIHRoZSBtb250aFxuICAgICAgICAgICAgYWRqdXN0ID0gKGIgLSBhbmNob3IpIC8gKGFuY2hvciAtIGFuY2hvcjIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYW5jaG9yMiA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYgKyAxLCAnbW9udGhzJyk7XG4gICAgICAgICAgICAvLyBsaW5lYXIgYWNyb3NzIHRoZSBtb250aFxuICAgICAgICAgICAgYWRqdXN0ID0gKGIgLSBhbmNob3IpIC8gKGFuY2hvcjIgLSBhbmNob3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9jaGVjayBmb3IgbmVnYXRpdmUgemVybywgcmV0dXJuIHplcm8gaWYgbmVnYXRpdmUgemVyb1xuICAgICAgICByZXR1cm4gLSh3aG9sZU1vbnRoRGlmZiArIGFkanVzdCkgfHwgMDtcbiAgICB9XG5cbiAgICBob29rcy5kZWZhdWx0Rm9ybWF0ID0gJ1lZWVktTU0tRERUSEg6bW06c3NaJztcbiAgICBob29rcy5kZWZhdWx0Rm9ybWF0VXRjID0gJ1lZWVktTU0tRERUSEg6bW06c3NbWl0nO1xuXG4gICAgZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmxvY2FsZSgnZW4nKS5mb3JtYXQoJ2RkZCBNTU0gREQgWVlZWSBISDptbTpzcyBbR01UXVpaJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9JU09TdHJpbmcoa2VlcE9mZnNldCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdXRjID0ga2VlcE9mZnNldCAhPT0gdHJ1ZTtcbiAgICAgICAgdmFyIG0gPSB1dGMgPyB0aGlzLmNsb25lKCkudXRjKCkgOiB0aGlzO1xuICAgICAgICBpZiAobS55ZWFyKCkgPCAwIHx8IG0ueWVhcigpID4gOTk5OSkge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChtLCB1dGMgPyAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJyA6ICdZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcpKSB7XG4gICAgICAgICAgICAvLyBuYXRpdmUgaW1wbGVtZW50YXRpb24gaXMgfjUweCBmYXN0ZXIsIHVzZSBpdCB3aGVuIHdlIGNhblxuICAgICAgICAgICAgaWYgKHV0Yykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSArIHRoaXMudXRjT2Zmc2V0KCkgKiA2MCAqIDEwMDApLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgnWicsIGZvcm1hdE1vbWVudChtLCAnWicpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ybWF0TW9tZW50KG0sIHV0YyA/ICdZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJyA6ICdZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGh1bWFuIHJlYWRhYmxlIHJlcHJlc2VudGF0aW9uIG9mIGEgbW9tZW50IHRoYXQgY2FuXG4gICAgICogYWxzbyBiZSBldmFsdWF0ZWQgdG8gZ2V0IGEgbmV3IG1vbWVudCB3aGljaCBpcyB0aGUgc2FtZVxuICAgICAqXG4gICAgICogQGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2Rpc3QvbGF0ZXN0L2RvY3MvYXBpL3V0aWwuaHRtbCN1dGlsX2N1c3RvbV9pbnNwZWN0X2Z1bmN0aW9uX29uX29iamVjdHNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuICdtb21lbnQuaW52YWxpZCgvKiAnICsgdGhpcy5faSArICcgKi8pJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgZnVuYyA9ICdtb21lbnQnO1xuICAgICAgICB2YXIgem9uZSA9ICcnO1xuICAgICAgICBpZiAoIXRoaXMuaXNMb2NhbCgpKSB7XG4gICAgICAgICAgICBmdW5jID0gdGhpcy51dGNPZmZzZXQoKSA9PT0gMCA/ICdtb21lbnQudXRjJyA6ICdtb21lbnQucGFyc2Vab25lJztcbiAgICAgICAgICAgIHpvbmUgPSAnWic7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByZWZpeCA9ICdbJyArIGZ1bmMgKyAnKFwiXSc7XG4gICAgICAgIHZhciB5ZWFyID0gKDAgPD0gdGhpcy55ZWFyKCkgJiYgdGhpcy55ZWFyKCkgPD0gOTk5OSkgPyAnWVlZWScgOiAnWVlZWVlZJztcbiAgICAgICAgdmFyIGRhdGV0aW1lID0gJy1NTS1ERFtUXUhIOm1tOnNzLlNTUyc7XG4gICAgICAgIHZhciBzdWZmaXggPSB6b25lICsgJ1tcIildJztcblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXQocHJlZml4ICsgeWVhciArIGRhdGV0aW1lICsgc3VmZml4KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb3JtYXQgKGlucHV0U3RyaW5nKSB7XG4gICAgICAgIGlmICghaW5wdXRTdHJpbmcpIHtcbiAgICAgICAgICAgIGlucHV0U3RyaW5nID0gdGhpcy5pc1V0YygpID8gaG9va3MuZGVmYXVsdEZvcm1hdFV0YyA6IGhvb2tzLmRlZmF1bHRGb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG91dHB1dCA9IGZvcm1hdE1vbWVudCh0aGlzLCBpbnB1dFN0cmluZyk7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5wb3N0Zm9ybWF0KG91dHB1dCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZnJvbSAodGltZSwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICAgICAoKGlzTW9tZW50KHRpbWUpICYmIHRpbWUuaXNWYWxpZCgpKSB8fFxuICAgICAgICAgICAgICAgICBjcmVhdGVMb2NhbCh0aW1lKS5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oe3RvOiB0aGlzLCBmcm9tOiB0aW1lfSkubG9jYWxlKHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCF3aXRob3V0U3VmZml4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZnJvbU5vdyAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvICh0aW1lLCB3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIGlmICh0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8XG4gICAgICAgICAgICAgICAgIGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7ZnJvbTogdGhpcywgdG86IHRpbWV9KS5sb2NhbGUodGhpcy5sb2NhbGUoKSkuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b05vdyAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy50byhjcmVhdGVMb2NhbCgpLCB3aXRob3V0U3VmZml4KTtcbiAgICB9XG5cbiAgICAvLyBJZiBwYXNzZWQgYSBsb2NhbGUga2V5LCBpdCB3aWxsIHNldCB0aGUgbG9jYWxlIGZvciB0aGlzXG4gICAgLy8gaW5zdGFuY2UuICBPdGhlcndpc2UsIGl0IHdpbGwgcmV0dXJuIHRoZSBsb2NhbGUgY29uZmlndXJhdGlvblxuICAgIC8vIHZhcmlhYmxlcyBmb3IgdGhpcyBpbnN0YW5jZS5cbiAgICBmdW5jdGlvbiBsb2NhbGUgKGtleSkge1xuICAgICAgICB2YXIgbmV3TG9jYWxlRGF0YTtcblxuICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGUuX2FiYnI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdMb2NhbGVEYXRhID0gZ2V0TG9jYWxlKGtleSk7XG4gICAgICAgICAgICBpZiAobmV3TG9jYWxlRGF0YSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9jYWxlID0gbmV3TG9jYWxlRGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGxhbmcgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb21lbnQoKS5sYW5nKCkgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCwgdXNlIG1vbWVudCgpLmxvY2FsZURhdGEoKSB0byBnZXQgdGhlIGxhbmd1YWdlIGNvbmZpZ3VyYXRpb24uIFVzZSBtb21lbnQoKS5sb2NhbGUoKSB0byBjaGFuZ2UgbGFuZ3VhZ2VzLicsXG4gICAgICAgIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlRGF0YSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgdmFyIE1TX1BFUl9TRUNPTkQgPSAxMDAwO1xuICAgIHZhciBNU19QRVJfTUlOVVRFID0gNjAgKiBNU19QRVJfU0VDT05EO1xuICAgIHZhciBNU19QRVJfSE9VUiA9IDYwICogTVNfUEVSX01JTlVURTtcbiAgICB2YXIgTVNfUEVSXzQwMF9ZRUFSUyA9ICgzNjUgKiA0MDAgKyA5NykgKiAyNCAqIE1TX1BFUl9IT1VSO1xuXG4gICAgLy8gYWN0dWFsIG1vZHVsbyAtIGhhbmRsZXMgbmVnYXRpdmUgbnVtYmVycyAoZm9yIGRhdGVzIGJlZm9yZSAxOTcwKTpcbiAgICBmdW5jdGlvbiBtb2QkMShkaXZpZGVuZCwgZGl2aXNvcikge1xuICAgICAgICByZXR1cm4gKGRpdmlkZW5kICUgZGl2aXNvciArIGRpdmlzb3IpICUgZGl2aXNvcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbFN0YXJ0T2ZEYXRlKHksIG0sIGQpIHtcbiAgICAgICAgLy8gdGhlIGRhdGUgY29uc3RydWN0b3IgcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh5ICsgNDAwLCBtLCBkKSAtIE1TX1BFUl80MDBfWUVBUlM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoeSwgbSwgZCkudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXRjU3RhcnRPZkRhdGUoeSwgbSwgZCkge1xuICAgICAgICAvLyBEYXRlLlVUQyByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgcmV0dXJuIERhdGUuVVRDKHkgKyA0MDAsIG0sIGQpIC0gTVNfUEVSXzQwMF9ZRUFSUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBEYXRlLlVUQyh5LCBtLCBkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0T2YgKHVuaXRzKSB7XG4gICAgICAgIHZhciB0aW1lO1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgaWYgKHVuaXRzID09PSB1bmRlZmluZWQgfHwgdW5pdHMgPT09ICdtaWxsaXNlY29uZCcgfHwgIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdGFydE9mRGF0ZSA9IHRoaXMuX2lzVVRDID8gdXRjU3RhcnRPZkRhdGUgOiBsb2NhbFN0YXJ0T2ZEYXRlO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgMCwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSAtIHRoaXMubW9udGgoKSAlIDMsIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCB0aGlzLmRhdGUoKSAtIHRoaXMud2Vla2RheSgpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEodGltZSArICh0aGlzLl9pc1VUQyA/IDAgOiB0aGlzLnV0Y09mZnNldCgpICogTVNfUEVSX01JTlVURSksIE1TX1BFUl9IT1VSKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEodGltZSwgTVNfUEVSX01JTlVURSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKHRpbWUsIE1TX1BFUl9TRUNPTkQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZC5zZXRUaW1lKHRpbWUpO1xuICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVuZE9mICh1bml0cykge1xuICAgICAgICB2YXIgdGltZTtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIGlmICh1bml0cyA9PT0gdW5kZWZpbmVkIHx8IHVuaXRzID09PSAnbWlsbGlzZWNvbmQnIHx8ICF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCkgKyAxLCAwLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSAtIHRoaXMubW9udGgoKSAlIDMgKyAzLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCkgKyAxLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkgLSB0aGlzLndlZWtkYXkoKSArIDcpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpICsgNykgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCB0aGlzLmRhdGUoKSArIDEpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9IT1VSIC0gbW9kJDEodGltZSArICh0aGlzLl9pc1VUQyA/IDAgOiB0aGlzLnV0Y09mZnNldCgpICogTVNfUEVSX01JTlVURSksIE1TX1BFUl9IT1VSKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9NSU5VVEUgLSBtb2QkMSh0aW1lLCBNU19QRVJfTUlOVVRFKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9TRUNPTkQgLSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kLnNldFRpbWUodGltZSk7XG4gICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsdWVPZiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kLnZhbHVlT2YoKSAtICgodGhpcy5fb2Zmc2V0IHx8IDApICogNjAwMDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVuaXggKCkge1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKSAvIDEwMDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvRGF0ZSAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9BcnJheSAoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgcmV0dXJuIFttLnllYXIoKSwgbS5tb250aCgpLCBtLmRhdGUoKSwgbS5ob3VyKCksIG0ubWludXRlKCksIG0uc2Vjb25kKCksIG0ubWlsbGlzZWNvbmQoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9PYmplY3QgKCkge1xuICAgICAgICB2YXIgbSA9IHRoaXM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyczogbS55ZWFyKCksXG4gICAgICAgICAgICBtb250aHM6IG0ubW9udGgoKSxcbiAgICAgICAgICAgIGRhdGU6IG0uZGF0ZSgpLFxuICAgICAgICAgICAgaG91cnM6IG0uaG91cnMoKSxcbiAgICAgICAgICAgIG1pbnV0ZXM6IG0ubWludXRlcygpLFxuICAgICAgICAgICAgc2Vjb25kczogbS5zZWNvbmRzKCksXG4gICAgICAgICAgICBtaWxsaXNlY29uZHM6IG0ubWlsbGlzZWNvbmRzKClcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0pTT04gKCkge1xuICAgICAgICAvLyBuZXcgRGF0ZShOYU4pLnRvSlNPTigpID09PSBudWxsXG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMudG9JU09TdHJpbmcoKSA6IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQyICgpIHtcbiAgICAgICAgcmV0dXJuIGlzVmFsaWQodGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2luZ0ZsYWdzICgpIHtcbiAgICAgICAgcmV0dXJuIGV4dGVuZCh7fSwgZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnZhbGlkQXQgKCkge1xuICAgICAgICByZXR1cm4gZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpLm92ZXJmbG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0aW9uRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlucHV0OiB0aGlzLl9pLFxuICAgICAgICAgICAgZm9ybWF0OiB0aGlzLl9mLFxuICAgICAgICAgICAgbG9jYWxlOiB0aGlzLl9sb2NhbGUsXG4gICAgICAgICAgICBpc1VUQzogdGhpcy5faXNVVEMsXG4gICAgICAgICAgICBzdHJpY3Q6IHRoaXMuX3N0cmljdFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnZ2cnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy53ZWVrWWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydHRycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzb1dlZWtZZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBhZGRXZWVrWWVhckZvcm1hdFRva2VuICh0b2tlbiwgZ2V0dGVyKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKDAsIFt0b2tlbiwgdG9rZW4ubGVuZ3RoXSwgMCwgZ2V0dGVyKTtcbiAgICB9XG5cbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdnZ2dnJywgICAgICd3ZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2dnJywgICAgJ3dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignR0dHRycsICAnaXNvV2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdHR0dHRycsICdpc29XZWVrWWVhcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCd3ZWVrWWVhcicsICdnZycpO1xuICAgIGFkZFVuaXRBbGlhcygnaXNvV2Vla1llYXInLCAnR0cnKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3dlZWtZZWFyJywgMSk7XG4gICAgYWRkVW5pdFByaW9yaXR5KCdpc29XZWVrWWVhcicsIDEpO1xuXG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdHJywgICAgICBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignZycsICAgICAgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHJywgICAgIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdnZycsICAgICBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignR0dHRycsICAgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnZ2cnLCAgIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdHR0dHRycsICBtYXRjaDF0bzYsIG1hdGNoNik7XG4gICAgYWRkUmVnZXhUb2tlbignZ2dnZ2cnLCAgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydnZ2dnJywgJ2dnZ2dnJywgJ0dHR0cnLCAnR0dHR0cnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW4uc3Vic3RyKDAsIDIpXSA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZ2cnLCAnR0cnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXIgKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBnZXRTZXRXZWVrWWVhckhlbHBlci5jYWxsKHRoaXMsXG4gICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgdGhpcy53ZWVrKCksXG4gICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5KCksXG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgICAgIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRveSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPV2Vla1llYXIgKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBnZXRTZXRXZWVrWWVhckhlbHBlci5jYWxsKHRoaXMsXG4gICAgICAgICAgICAgICAgaW5wdXQsIHRoaXMuaXNvV2VlaygpLCB0aGlzLmlzb1dlZWtkYXkoKSwgMSwgNCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SVNPV2Vla3NJblllYXIgKCkge1xuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy55ZWFyKCksIDEsIDQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFdlZWtzSW5ZZWFyICgpIHtcbiAgICAgICAgdmFyIHdlZWtJbmZvID0gdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWs7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLnllYXIoKSwgd2Vla0luZm8uZG93LCB3ZWVrSW5mby5kb3kpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWtZZWFySGVscGVyKGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla3NUYXJnZXQ7XG4gICAgICAgIGlmIChpbnB1dCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Vla09mWWVhcih0aGlzLCBkb3csIGRveSkueWVhcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdlZWtzVGFyZ2V0ID0gd2Vla3NJblllYXIoaW5wdXQsIGRvdywgZG95KTtcbiAgICAgICAgICAgIGlmICh3ZWVrID4gd2Vla3NUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICB3ZWVrID0gd2Vla3NUYXJnZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2V0V2Vla0FsbC5jYWxsKHRoaXMsIGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRXZWVrQWxsKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyRGF0YSA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoZGF5T2ZZZWFyRGF0YS55ZWFyLCAwLCBkYXlPZlllYXJEYXRhLmRheU9mWWVhcik7XG5cbiAgICAgICAgdGhpcy55ZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSk7XG4gICAgICAgIHRoaXMubW9udGgoZGF0ZS5nZXRVVENNb250aCgpKTtcbiAgICAgICAgdGhpcy5kYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1EnLCAwLCAnUW8nLCAncXVhcnRlcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdxdWFydGVyJywgJ1EnKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3F1YXJ0ZXInLCA3KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1EnLCBtYXRjaDEpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1EnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01PTlRIXSA9ICh0b0ludChpbnB1dCkgLSAxKSAqIDM7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRRdWFydGVyIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IE1hdGguY2VpbCgodGhpcy5tb250aCgpICsgMSkgLyAzKSA6IHRoaXMubW9udGgoKGlucHV0IC0gMSkgKiAzICsgdGhpcy5tb250aCgpICUgMyk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0QnLCBbJ0REJywgMl0sICdEbycsICdkYXRlJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ2RhdGUnLCAnRCcpO1xuXG4gICAgLy8gUFJJT1JJVFlcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2RhdGUnLCA5KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0QnLCAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdERCcsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdEbycsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBcIm9yZGluYWxQYXJzZVwiIGZhbGxiYWNrIGluIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID9cbiAgICAgICAgICAobG9jYWxlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlIHx8IGxvY2FsZS5fb3JkaW5hbFBhcnNlKSA6XG4gICAgICAgICAgbG9jYWxlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudDtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydEJywgJ0REJ10sIERBVEUpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0RvJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtEQVRFXSA9IHRvSW50KGlucHV0Lm1hdGNoKG1hdGNoMXRvMilbMF0pO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldERheU9mTW9udGggPSBtYWtlR2V0U2V0KCdEYXRlJywgdHJ1ZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignREREJywgWydEREREJywgM10sICdERERvJywgJ2RheU9mWWVhcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdkYXlPZlllYXInLCAnREREJyk7XG5cbiAgICAvLyBQUklPUklUWVxuICAgIGFkZFVuaXRQcmlvcml0eSgnZGF5T2ZZZWFyJywgNCk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdEREQnLCAgbWF0Y2gxdG8zKTtcbiAgICBhZGRSZWdleFRva2VuKCdEREREJywgbWF0Y2gzKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnREREJywgJ0REREQnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID0gdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0RGF5T2ZZZWFyIChpbnB1dCkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyID0gTWF0aC5yb3VuZCgodGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpIC0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ3llYXInKSkgLyA4NjRlNSkgKyAxO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IGRheU9mWWVhciA6IHRoaXMuYWRkKChpbnB1dCAtIGRheU9mWWVhciksICdkJyk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ20nLCBbJ21tJywgMl0sIDAsICdtaW51dGUnKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnbWludXRlJywgJ20nKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ21pbnV0ZScsIDE0KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ20nLCAgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdtbScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnbScsICdtbSddLCBNSU5VVEUpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldE1pbnV0ZSA9IG1ha2VHZXRTZXQoJ01pbnV0ZXMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigncycsIFsnc3MnLCAyXSwgMCwgJ3NlY29uZCcpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdzZWNvbmQnLCAncycpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnc2Vjb25kJywgMTUpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbigncycsICBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3NzJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydzJywgJ3NzJ10sIFNFQ09ORCk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0U2Vjb25kID0gbWFrZUdldFNldCgnU2Vjb25kcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdTJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gfn4odGhpcy5taWxsaXNlY29uZCgpIC8gMTAwKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1MnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gfn4odGhpcy5taWxsaXNlY29uZCgpIC8gMTApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1MnLCAzXSwgMCwgJ21pbGxpc2Vjb25kJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTJywgNF0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1MnLCA1XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTJywgNl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTJywgN10sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTU1MnLCA4XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTU1NTJywgOV0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwMDA7XG4gICAgfSk7XG5cblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnbWlsbGlzZWNvbmQnLCAnbXMnKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ21pbGxpc2Vjb25kJywgMTYpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignUycsICAgIG1hdGNoMXRvMywgbWF0Y2gxKTtcbiAgICBhZGRSZWdleFRva2VuKCdTUycsICAgbWF0Y2gxdG8zLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1NTUycsICBtYXRjaDF0bzMsIG1hdGNoMyk7XG5cbiAgICB2YXIgdG9rZW47XG4gICAgZm9yICh0b2tlbiA9ICdTU1NTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRSZWdleFRva2VuKHRva2VuLCBtYXRjaFVuc2lnbmVkKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZU1zKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNSUxMSVNFQ09ORF0gPSB0b0ludCgoJzAuJyArIGlucHV0KSAqIDEwMDApO1xuICAgIH1cblxuICAgIGZvciAodG9rZW4gPSAnUyc7IHRva2VuLmxlbmd0aCA8PSA5OyB0b2tlbiArPSAnUycpIHtcbiAgICAgICAgYWRkUGFyc2VUb2tlbih0b2tlbiwgcGFyc2VNcyk7XG4gICAgfVxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRNaWxsaXNlY29uZCA9IG1ha2VHZXRTZXQoJ01pbGxpc2Vjb25kcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCd6JywgIDAsIDAsICd6b25lQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd6eicsIDAsIDAsICd6b25lTmFtZScpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0Wm9uZUFiYnIgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNVVEMgPyAnVVRDJyA6ICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFpvbmVOYW1lICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ0Nvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lJyA6ICcnO1xuICAgIH1cblxuICAgIHZhciBwcm90byA9IE1vbWVudC5wcm90b3R5cGU7XG5cbiAgICBwcm90by5hZGQgICAgICAgICAgICAgICA9IGFkZDtcbiAgICBwcm90by5jYWxlbmRhciAgICAgICAgICA9IGNhbGVuZGFyJDE7XG4gICAgcHJvdG8uY2xvbmUgICAgICAgICAgICAgPSBjbG9uZTtcbiAgICBwcm90by5kaWZmICAgICAgICAgICAgICA9IGRpZmY7XG4gICAgcHJvdG8uZW5kT2YgICAgICAgICAgICAgPSBlbmRPZjtcbiAgICBwcm90by5mb3JtYXQgICAgICAgICAgICA9IGZvcm1hdDtcbiAgICBwcm90by5mcm9tICAgICAgICAgICAgICA9IGZyb207XG4gICAgcHJvdG8uZnJvbU5vdyAgICAgICAgICAgPSBmcm9tTm93O1xuICAgIHByb3RvLnRvICAgICAgICAgICAgICAgID0gdG87XG4gICAgcHJvdG8udG9Ob3cgICAgICAgICAgICAgPSB0b05vdztcbiAgICBwcm90by5nZXQgICAgICAgICAgICAgICA9IHN0cmluZ0dldDtcbiAgICBwcm90by5pbnZhbGlkQXQgICAgICAgICA9IGludmFsaWRBdDtcbiAgICBwcm90by5pc0FmdGVyICAgICAgICAgICA9IGlzQWZ0ZXI7XG4gICAgcHJvdG8uaXNCZWZvcmUgICAgICAgICAgPSBpc0JlZm9yZTtcbiAgICBwcm90by5pc0JldHdlZW4gICAgICAgICA9IGlzQmV0d2VlbjtcbiAgICBwcm90by5pc1NhbWUgICAgICAgICAgICA9IGlzU2FtZTtcbiAgICBwcm90by5pc1NhbWVPckFmdGVyICAgICA9IGlzU2FtZU9yQWZ0ZXI7XG4gICAgcHJvdG8uaXNTYW1lT3JCZWZvcmUgICAgPSBpc1NhbWVPckJlZm9yZTtcbiAgICBwcm90by5pc1ZhbGlkICAgICAgICAgICA9IGlzVmFsaWQkMjtcbiAgICBwcm90by5sYW5nICAgICAgICAgICAgICA9IGxhbmc7XG4gICAgcHJvdG8ubG9jYWxlICAgICAgICAgICAgPSBsb2NhbGU7XG4gICAgcHJvdG8ubG9jYWxlRGF0YSAgICAgICAgPSBsb2NhbGVEYXRhO1xuICAgIHByb3RvLm1heCAgICAgICAgICAgICAgID0gcHJvdG90eXBlTWF4O1xuICAgIHByb3RvLm1pbiAgICAgICAgICAgICAgID0gcHJvdG90eXBlTWluO1xuICAgIHByb3RvLnBhcnNpbmdGbGFncyAgICAgID0gcGFyc2luZ0ZsYWdzO1xuICAgIHByb3RvLnNldCAgICAgICAgICAgICAgID0gc3RyaW5nU2V0O1xuICAgIHByb3RvLnN0YXJ0T2YgICAgICAgICAgID0gc3RhcnRPZjtcbiAgICBwcm90by5zdWJ0cmFjdCAgICAgICAgICA9IHN1YnRyYWN0O1xuICAgIHByb3RvLnRvQXJyYXkgICAgICAgICAgID0gdG9BcnJheTtcbiAgICBwcm90by50b09iamVjdCAgICAgICAgICA9IHRvT2JqZWN0O1xuICAgIHByb3RvLnRvRGF0ZSAgICAgICAgICAgID0gdG9EYXRlO1xuICAgIHByb3RvLnRvSVNPU3RyaW5nICAgICAgID0gdG9JU09TdHJpbmc7XG4gICAgcHJvdG8uaW5zcGVjdCAgICAgICAgICAgPSBpbnNwZWN0O1xuICAgIHByb3RvLnRvSlNPTiAgICAgICAgICAgID0gdG9KU09OO1xuICAgIHByb3RvLnRvU3RyaW5nICAgICAgICAgID0gdG9TdHJpbmc7XG4gICAgcHJvdG8udW5peCAgICAgICAgICAgICAgPSB1bml4O1xuICAgIHByb3RvLnZhbHVlT2YgICAgICAgICAgID0gdmFsdWVPZjtcbiAgICBwcm90by5jcmVhdGlvbkRhdGEgICAgICA9IGNyZWF0aW9uRGF0YTtcbiAgICBwcm90by55ZWFyICAgICAgID0gZ2V0U2V0WWVhcjtcbiAgICBwcm90by5pc0xlYXBZZWFyID0gZ2V0SXNMZWFwWWVhcjtcbiAgICBwcm90by53ZWVrWWVhciAgICA9IGdldFNldFdlZWtZZWFyO1xuICAgIHByb3RvLmlzb1dlZWtZZWFyID0gZ2V0U2V0SVNPV2Vla1llYXI7XG4gICAgcHJvdG8ucXVhcnRlciA9IHByb3RvLnF1YXJ0ZXJzID0gZ2V0U2V0UXVhcnRlcjtcbiAgICBwcm90by5tb250aCAgICAgICA9IGdldFNldE1vbnRoO1xuICAgIHByb3RvLmRheXNJbk1vbnRoID0gZ2V0RGF5c0luTW9udGg7XG4gICAgcHJvdG8ud2VlayAgICAgICAgICAgPSBwcm90by53ZWVrcyAgICAgICAgPSBnZXRTZXRXZWVrO1xuICAgIHByb3RvLmlzb1dlZWsgICAgICAgID0gcHJvdG8uaXNvV2Vla3MgICAgID0gZ2V0U2V0SVNPV2VlaztcbiAgICBwcm90by53ZWVrc0luWWVhciAgICA9IGdldFdlZWtzSW5ZZWFyO1xuICAgIHByb3RvLmlzb1dlZWtzSW5ZZWFyID0gZ2V0SVNPV2Vla3NJblllYXI7XG4gICAgcHJvdG8uZGF0ZSAgICAgICA9IGdldFNldERheU9mTW9udGg7XG4gICAgcHJvdG8uZGF5ICAgICAgICA9IHByb3RvLmRheXMgICAgICAgICAgICAgPSBnZXRTZXREYXlPZldlZWs7XG4gICAgcHJvdG8ud2Vla2RheSAgICA9IGdldFNldExvY2FsZURheU9mV2VlaztcbiAgICBwcm90by5pc29XZWVrZGF5ID0gZ2V0U2V0SVNPRGF5T2ZXZWVrO1xuICAgIHByb3RvLmRheU9mWWVhciAgPSBnZXRTZXREYXlPZlllYXI7XG4gICAgcHJvdG8uaG91ciA9IHByb3RvLmhvdXJzID0gZ2V0U2V0SG91cjtcbiAgICBwcm90by5taW51dGUgPSBwcm90by5taW51dGVzID0gZ2V0U2V0TWludXRlO1xuICAgIHByb3RvLnNlY29uZCA9IHByb3RvLnNlY29uZHMgPSBnZXRTZXRTZWNvbmQ7XG4gICAgcHJvdG8ubWlsbGlzZWNvbmQgPSBwcm90by5taWxsaXNlY29uZHMgPSBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBwcm90by51dGNPZmZzZXQgICAgICAgICAgICA9IGdldFNldE9mZnNldDtcbiAgICBwcm90by51dGMgICAgICAgICAgICAgICAgICA9IHNldE9mZnNldFRvVVRDO1xuICAgIHByb3RvLmxvY2FsICAgICAgICAgICAgICAgID0gc2V0T2Zmc2V0VG9Mb2NhbDtcbiAgICBwcm90by5wYXJzZVpvbmUgICAgICAgICAgICA9IHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0O1xuICAgIHByb3RvLmhhc0FsaWduZWRIb3VyT2Zmc2V0ID0gaGFzQWxpZ25lZEhvdXJPZmZzZXQ7XG4gICAgcHJvdG8uaXNEU1QgICAgICAgICAgICAgICAgPSBpc0RheWxpZ2h0U2F2aW5nVGltZTtcbiAgICBwcm90by5pc0xvY2FsICAgICAgICAgICAgICA9IGlzTG9jYWw7XG4gICAgcHJvdG8uaXNVdGNPZmZzZXQgICAgICAgICAgPSBpc1V0Y09mZnNldDtcbiAgICBwcm90by5pc1V0YyAgICAgICAgICAgICAgICA9IGlzVXRjO1xuICAgIHByb3RvLmlzVVRDICAgICAgICAgICAgICAgID0gaXNVdGM7XG4gICAgcHJvdG8uem9uZUFiYnIgPSBnZXRab25lQWJicjtcbiAgICBwcm90by56b25lTmFtZSA9IGdldFpvbmVOYW1lO1xuICAgIHByb3RvLmRhdGVzICA9IGRlcHJlY2F0ZSgnZGF0ZXMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIGRhdGUgaW5zdGVhZC4nLCBnZXRTZXREYXlPZk1vbnRoKTtcbiAgICBwcm90by5tb250aHMgPSBkZXByZWNhdGUoJ21vbnRocyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgbW9udGggaW5zdGVhZCcsIGdldFNldE1vbnRoKTtcbiAgICBwcm90by55ZWFycyAgPSBkZXByZWNhdGUoJ3llYXJzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSB5ZWFyIGluc3RlYWQnLCBnZXRTZXRZZWFyKTtcbiAgICBwcm90by56b25lICAgPSBkZXByZWNhdGUoJ21vbWVudCgpLnpvbmUgaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudCgpLnV0Y09mZnNldCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL3pvbmUvJywgZ2V0U2V0Wm9uZSk7XG4gICAgcHJvdG8uaXNEU1RTaGlmdGVkID0gZGVwcmVjYXRlKCdpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZHN0LXNoaWZ0ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uJywgaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkKTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVuaXggKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCAqIDEwMDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUluWm9uZSAoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbC5hcHBseShudWxsLCBhcmd1bWVudHMpLnBhcnNlWm9uZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZVBhcnNlUG9zdEZvcm1hdCAoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDEgPSBMb2NhbGUucHJvdG90eXBlO1xuXG4gICAgcHJvdG8kMS5jYWxlbmRhciAgICAgICAgPSBjYWxlbmRhcjtcbiAgICBwcm90byQxLmxvbmdEYXRlRm9ybWF0ICA9IGxvbmdEYXRlRm9ybWF0O1xuICAgIHByb3RvJDEuaW52YWxpZERhdGUgICAgID0gaW52YWxpZERhdGU7XG4gICAgcHJvdG8kMS5vcmRpbmFsICAgICAgICAgPSBvcmRpbmFsO1xuICAgIHByb3RvJDEucHJlcGFyc2UgICAgICAgID0gcHJlUGFyc2VQb3N0Rm9ybWF0O1xuICAgIHByb3RvJDEucG9zdGZvcm1hdCAgICAgID0gcHJlUGFyc2VQb3N0Rm9ybWF0O1xuICAgIHByb3RvJDEucmVsYXRpdmVUaW1lICAgID0gcmVsYXRpdmVUaW1lO1xuICAgIHByb3RvJDEucGFzdEZ1dHVyZSAgICAgID0gcGFzdEZ1dHVyZTtcbiAgICBwcm90byQxLnNldCAgICAgICAgICAgICA9IHNldDtcblxuICAgIHByb3RvJDEubW9udGhzICAgICAgICAgICAgPSAgICAgICAgbG9jYWxlTW9udGhzO1xuICAgIHByb3RvJDEubW9udGhzU2hvcnQgICAgICAgPSAgICAgICAgbG9jYWxlTW9udGhzU2hvcnQ7XG4gICAgcHJvdG8kMS5tb250aHNQYXJzZSAgICAgICA9ICAgICAgICBsb2NhbGVNb250aHNQYXJzZTtcbiAgICBwcm90byQxLm1vbnRoc1JlZ2V4ICAgICAgID0gbW9udGhzUmVnZXg7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydFJlZ2V4ICA9IG1vbnRoc1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrID0gbG9jYWxlV2VlaztcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZZZWFyID0gbG9jYWxlRmlyc3REYXlPZlllYXI7XG4gICAgcHJvdG8kMS5maXJzdERheU9mV2VlayA9IGxvY2FsZUZpcnN0RGF5T2ZXZWVrO1xuXG4gICAgcHJvdG8kMS53ZWVrZGF5cyAgICAgICA9ICAgICAgICBsb2NhbGVXZWVrZGF5cztcbiAgICBwcm90byQxLndlZWtkYXlzTWluICAgID0gICAgICAgIGxvY2FsZVdlZWtkYXlzTWluO1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydCAgPSAgICAgICAgbG9jYWxlV2Vla2RheXNTaG9ydDtcbiAgICBwcm90byQxLndlZWtkYXlzUGFyc2UgID0gICAgICAgIGxvY2FsZVdlZWtkYXlzUGFyc2U7XG5cbiAgICBwcm90byQxLndlZWtkYXlzUmVnZXggICAgICAgPSAgICAgICAgd2Vla2RheXNSZWdleDtcbiAgICBwcm90byQxLndlZWtkYXlzU2hvcnRSZWdleCAgPSAgICAgICAgd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgIHByb3RvJDEud2Vla2RheXNNaW5SZWdleCAgICA9ICAgICAgICB3ZWVrZGF5c01pblJlZ2V4O1xuXG4gICAgcHJvdG8kMS5pc1BNID0gbG9jYWxlSXNQTTtcbiAgICBwcm90byQxLm1lcmlkaWVtID0gbG9jYWxlTWVyaWRpZW07XG5cbiAgICBmdW5jdGlvbiBnZXQkMSAoZm9ybWF0LCBpbmRleCwgZmllbGQsIHNldHRlcikge1xuICAgICAgICB2YXIgbG9jYWxlID0gZ2V0TG9jYWxlKCk7XG4gICAgICAgIHZhciB1dGMgPSBjcmVhdGVVVEMoKS5zZXQoc2V0dGVyLCBpbmRleCk7XG4gICAgICAgIHJldHVybiBsb2NhbGVbZmllbGRdKHV0YywgZm9ybWF0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzSW1wbCAoZm9ybWF0LCBpbmRleCwgZmllbGQpIHtcbiAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0JDEoZm9ybWF0LCBpbmRleCwgZmllbGQsICdtb250aCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGk7XG4gICAgICAgIHZhciBvdXQgPSBbXTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpXSA9IGdldCQxKGZvcm1hdCwgaSwgZmllbGQsICdtb250aCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgLy8gKClcbiAgICAvLyAoNSlcbiAgICAvLyAoZm10LCA1KVxuICAgIC8vIChmbXQpXG4gICAgLy8gKHRydWUpXG4gICAgLy8gKHRydWUsIDUpXG4gICAgLy8gKHRydWUsIGZtdCwgNSlcbiAgICAvLyAodHJ1ZSwgZm10KVxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c0ltcGwgKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgZmllbGQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBsb2NhbGVTb3J0ZWQgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGxvY2FsZVNvcnRlZDtcbiAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgbG9jYWxlU29ydGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChpc051bWJlcihmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbG9jYWxlID0gZ2V0TG9jYWxlKCksXG4gICAgICAgICAgICBzaGlmdCA9IGxvY2FsZVNvcnRlZCA/IGxvY2FsZS5fd2Vlay5kb3cgOiAwO1xuXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0JDEoZm9ybWF0LCAoaW5kZXggKyBzaGlmdCkgJSA3LCBmaWVsZCwgJ2RheScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGk7XG4gICAgICAgIHZhciBvdXQgPSBbXTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgb3V0W2ldID0gZ2V0JDEoZm9ybWF0LCAoaSArIHNoaWZ0KSAlIDcsIGZpZWxkLCAnZGF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzIChmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRoc1Nob3J0IChmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzU2hvcnQnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXMgKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsICd3ZWVrZGF5cycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c1Nob3J0IChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c01pbiAobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzTWluJyk7XG4gICAgfVxuXG4gICAgZ2V0U2V0R2xvYmFsTG9jYWxlKCdlbicsIHtcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHRofHN0fG5kfHJkKS8sXG4gICAgICAgIG9yZGluYWwgOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0b0ludChudW1iZXIgJSAxMDAgLyAxMCkgPT09IDEpID8gJ3RoJyA6XG4gICAgICAgICAgICAgICAgKGIgPT09IDEpID8gJ3N0JyA6XG4gICAgICAgICAgICAgICAgKGIgPT09IDIpID8gJ25kJyA6XG4gICAgICAgICAgICAgICAgKGIgPT09IDMpID8gJ3JkJyA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBTaWRlIGVmZmVjdCBpbXBvcnRzXG5cbiAgICBob29rcy5sYW5nID0gZGVwcmVjYXRlKCdtb21lbnQubGFuZyBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZSBpbnN0ZWFkLicsIGdldFNldEdsb2JhbExvY2FsZSk7XG4gICAgaG9va3MubGFuZ0RhdGEgPSBkZXByZWNhdGUoJ21vbWVudC5sYW5nRGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZURhdGEgaW5zdGVhZC4nLCBnZXRMb2NhbGUpO1xuXG4gICAgdmFyIG1hdGhBYnMgPSBNYXRoLmFicztcblxuICAgIGZ1bmN0aW9uIGFicyAoKSB7XG4gICAgICAgIHZhciBkYXRhICAgICAgICAgICA9IHRoaXMuX2RhdGE7XG5cbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID0gbWF0aEFicyh0aGlzLl9taWxsaXNlY29uZHMpO1xuICAgICAgICB0aGlzLl9kYXlzICAgICAgICAgPSBtYXRoQWJzKHRoaXMuX2RheXMpO1xuICAgICAgICB0aGlzLl9tb250aHMgICAgICAgPSBtYXRoQWJzKHRoaXMuX21vbnRocyk7XG5cbiAgICAgICAgZGF0YS5taWxsaXNlY29uZHMgID0gbWF0aEFicyhkYXRhLm1pbGxpc2Vjb25kcyk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyAgICAgICA9IG1hdGhBYnMoZGF0YS5zZWNvbmRzKTtcbiAgICAgICAgZGF0YS5taW51dGVzICAgICAgID0gbWF0aEFicyhkYXRhLm1pbnV0ZXMpO1xuICAgICAgICBkYXRhLmhvdXJzICAgICAgICAgPSBtYXRoQWJzKGRhdGEuaG91cnMpO1xuICAgICAgICBkYXRhLm1vbnRocyAgICAgICAgPSBtYXRoQWJzKGRhdGEubW9udGhzKTtcbiAgICAgICAgZGF0YS55ZWFycyAgICAgICAgID0gbWF0aEFicyhkYXRhLnllYXJzKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRTdWJ0cmFjdCQxIChkdXJhdGlvbiwgaW5wdXQsIHZhbHVlLCBkaXJlY3Rpb24pIHtcbiAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlRHVyYXRpb24oaW5wdXQsIHZhbHVlKTtcblxuICAgICAgICBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9taWxsaXNlY29uZHM7XG4gICAgICAgIGR1cmF0aW9uLl9kYXlzICAgICAgICAgKz0gZGlyZWN0aW9uICogb3RoZXIuX2RheXM7XG4gICAgICAgIGR1cmF0aW9uLl9tb250aHMgICAgICAgKz0gZGlyZWN0aW9uICogb3RoZXIuX21vbnRocztcblxuICAgICAgICByZXR1cm4gZHVyYXRpb24uX2J1YmJsZSgpO1xuICAgIH1cblxuICAgIC8vIHN1cHBvcnRzIG9ubHkgMi4wLXN0eWxlIGFkZCgxLCAncycpIG9yIGFkZChkdXJhdGlvbilcbiAgICBmdW5jdGlvbiBhZGQkMSAoaW5wdXQsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBhZGRTdWJ0cmFjdCQxKHRoaXMsIGlucHV0LCB2YWx1ZSwgMSk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgc3VidHJhY3QoMSwgJ3MnKSBvciBzdWJ0cmFjdChkdXJhdGlvbilcbiAgICBmdW5jdGlvbiBzdWJ0cmFjdCQxIChpbnB1dCwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGFkZFN1YnRyYWN0JDEodGhpcywgaW5wdXQsIHZhbHVlLCAtMSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzQ2VpbCAobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihudW1iZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnViYmxlICgpIHtcbiAgICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IHRoaXMuX21pbGxpc2Vjb25kcztcbiAgICAgICAgdmFyIGRheXMgICAgICAgICA9IHRoaXMuX2RheXM7XG4gICAgICAgIHZhciBtb250aHMgICAgICAgPSB0aGlzLl9tb250aHM7XG4gICAgICAgIHZhciBkYXRhICAgICAgICAgPSB0aGlzLl9kYXRhO1xuICAgICAgICB2YXIgc2Vjb25kcywgbWludXRlcywgaG91cnMsIHllYXJzLCBtb250aHNGcm9tRGF5cztcblxuICAgICAgICAvLyBpZiB3ZSBoYXZlIGEgbWl4IG9mIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB2YWx1ZXMsIGJ1YmJsZSBkb3duIGZpcnN0XG4gICAgICAgIC8vIGNoZWNrOiBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjE2NlxuICAgICAgICBpZiAoISgobWlsbGlzZWNvbmRzID49IDAgJiYgZGF5cyA+PSAwICYmIG1vbnRocyA+PSAwKSB8fFxuICAgICAgICAgICAgICAgIChtaWxsaXNlY29uZHMgPD0gMCAmJiBkYXlzIDw9IDAgJiYgbW9udGhzIDw9IDApKSkge1xuICAgICAgICAgICAgbWlsbGlzZWNvbmRzICs9IGFic0NlaWwobW9udGhzVG9EYXlzKG1vbnRocykgKyBkYXlzKSAqIDg2NGU1O1xuICAgICAgICAgICAgZGF5cyA9IDA7XG4gICAgICAgICAgICBtb250aHMgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGJ1YmJsZXMgdXAgdmFsdWVzLCBzZWUgdGhlIHRlc3RzIGZvclxuICAgICAgICAvLyBleGFtcGxlcyBvZiB3aGF0IHRoYXQgbWVhbnMuXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmRzICUgMTAwMDtcblxuICAgICAgICBzZWNvbmRzICAgICAgICAgICA9IGFic0Zsb29yKG1pbGxpc2Vjb25kcyAvIDEwMDApO1xuICAgICAgICBkYXRhLnNlY29uZHMgICAgICA9IHNlY29uZHMgJSA2MDtcblxuICAgICAgICBtaW51dGVzICAgICAgICAgICA9IGFic0Zsb29yKHNlY29uZHMgLyA2MCk7XG4gICAgICAgIGRhdGEubWludXRlcyAgICAgID0gbWludXRlcyAlIDYwO1xuXG4gICAgICAgIGhvdXJzICAgICAgICAgICAgID0gYWJzRmxvb3IobWludXRlcyAvIDYwKTtcbiAgICAgICAgZGF0YS5ob3VycyAgICAgICAgPSBob3VycyAlIDI0O1xuXG4gICAgICAgIGRheXMgKz0gYWJzRmxvb3IoaG91cnMgLyAyNCk7XG5cbiAgICAgICAgLy8gY29udmVydCBkYXlzIHRvIG1vbnRoc1xuICAgICAgICBtb250aHNGcm9tRGF5cyA9IGFic0Zsb29yKGRheXNUb01vbnRocyhkYXlzKSk7XG4gICAgICAgIG1vbnRocyArPSBtb250aHNGcm9tRGF5cztcbiAgICAgICAgZGF5cyAtPSBhYnNDZWlsKG1vbnRoc1RvRGF5cyhtb250aHNGcm9tRGF5cykpO1xuXG4gICAgICAgIC8vIDEyIG1vbnRocyAtPiAxIHllYXJcbiAgICAgICAgeWVhcnMgPSBhYnNGbG9vcihtb250aHMgLyAxMik7XG4gICAgICAgIG1vbnRocyAlPSAxMjtcblxuICAgICAgICBkYXRhLmRheXMgICA9IGRheXM7XG4gICAgICAgIGRhdGEubW9udGhzID0gbW9udGhzO1xuICAgICAgICBkYXRhLnllYXJzICA9IHllYXJzO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheXNUb01vbnRocyAoZGF5cykge1xuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxNDYwOTcgZGF5cyAodGFraW5nIGludG8gYWNjb3VudCBsZWFwIHllYXIgcnVsZXMpXG4gICAgICAgIC8vIDQwMCB5ZWFycyBoYXZlIDEyIG1vbnRocyA9PT0gNDgwMFxuICAgICAgICByZXR1cm4gZGF5cyAqIDQ4MDAgLyAxNDYwOTc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhzVG9EYXlzIChtb250aHMpIHtcbiAgICAgICAgLy8gdGhlIHJldmVyc2Ugb2YgZGF5c1RvTW9udGhzXG4gICAgICAgIHJldHVybiBtb250aHMgKiAxNDYwOTcgLyA0ODAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFzICh1bml0cykge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkYXlzO1xuICAgICAgICB2YXIgbW9udGhzO1xuICAgICAgICB2YXIgbWlsbGlzZWNvbmRzID0gdGhpcy5fbWlsbGlzZWNvbmRzO1xuXG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuXG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21vbnRoJyB8fCB1bml0cyA9PT0gJ3F1YXJ0ZXInIHx8IHVuaXRzID09PSAneWVhcicpIHtcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICBtb250aHMgPSB0aGlzLl9tb250aHMgKyBkYXlzVG9Nb250aHMoZGF5cyk7XG4gICAgICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnbW9udGgnOiAgIHJldHVybiBtb250aHM7XG4gICAgICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6IHJldHVybiBtb250aHMgLyAzO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3llYXInOiAgICByZXR1cm4gbW9udGhzIC8gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBoYW5kbGUgbWlsbGlzZWNvbmRzIHNlcGFyYXRlbHkgYmVjYXVzZSBvZiBmbG9hdGluZyBwb2ludCBtYXRoIGVycm9ycyAoaXNzdWUgIzE4NjcpXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyArIE1hdGgucm91bmQobW9udGhzVG9EYXlzKHRoaXMuX21vbnRocykpO1xuICAgICAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3dlZWsnICAgOiByZXR1cm4gZGF5cyAvIDcgICAgICsgbWlsbGlzZWNvbmRzIC8gNjA0OGU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RheScgICAgOiByZXR1cm4gZGF5cyAgICAgICAgICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnaG91cicgICA6IHJldHVybiBkYXlzICogMjQgICAgKyBtaWxsaXNlY29uZHMgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ21pbnV0ZScgOiByZXR1cm4gZGF5cyAqIDE0NDAgICsgbWlsbGlzZWNvbmRzIC8gNmU0O1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NlY29uZCcgOiByZXR1cm4gZGF5cyAqIDg2NDAwICsgbWlsbGlzZWNvbmRzIC8gMTAwMDtcbiAgICAgICAgICAgICAgICAvLyBNYXRoLmZsb29yIHByZXZlbnRzIGZsb2F0aW5nIHBvaW50IG1hdGggZXJyb3JzIGhlcmVcbiAgICAgICAgICAgICAgICBjYXNlICdtaWxsaXNlY29uZCc6IHJldHVybiBNYXRoLmZsb29yKGRheXMgKiA4NjRlNSkgKyBtaWxsaXNlY29uZHM7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHVuaXQgJyArIHVuaXRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IFVzZSB0aGlzLmFzKCdtcycpP1xuICAgIGZ1bmN0aW9uIHZhbHVlT2YkMSAoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyArXG4gICAgICAgICAgICB0aGlzLl9kYXlzICogODY0ZTUgK1xuICAgICAgICAgICAgKHRoaXMuX21vbnRocyAlIDEyKSAqIDI1OTJlNiArXG4gICAgICAgICAgICB0b0ludCh0aGlzLl9tb250aHMgLyAxMikgKiAzMTUzNmU2XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUFzIChhbGlhcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXMoYWxpYXMpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBhc01pbGxpc2Vjb25kcyA9IG1ha2VBcygnbXMnKTtcbiAgICB2YXIgYXNTZWNvbmRzICAgICAgPSBtYWtlQXMoJ3MnKTtcbiAgICB2YXIgYXNNaW51dGVzICAgICAgPSBtYWtlQXMoJ20nKTtcbiAgICB2YXIgYXNIb3VycyAgICAgICAgPSBtYWtlQXMoJ2gnKTtcbiAgICB2YXIgYXNEYXlzICAgICAgICAgPSBtYWtlQXMoJ2QnKTtcbiAgICB2YXIgYXNXZWVrcyAgICAgICAgPSBtYWtlQXMoJ3cnKTtcbiAgICB2YXIgYXNNb250aHMgICAgICAgPSBtYWtlQXMoJ00nKTtcbiAgICB2YXIgYXNRdWFydGVycyAgICAgPSBtYWtlQXMoJ1EnKTtcbiAgICB2YXIgYXNZZWFycyAgICAgICAgPSBtYWtlQXMoJ3knKTtcblxuICAgIGZ1bmN0aW9uIGNsb25lJDEgKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24odGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0JDIgKHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzW3VuaXRzICsgJ3MnXSgpIDogTmFOO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXR0ZXIobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5fZGF0YVtuYW1lXSA6IE5hTjtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgbWlsbGlzZWNvbmRzID0gbWFrZUdldHRlcignbWlsbGlzZWNvbmRzJyk7XG4gICAgdmFyIHNlY29uZHMgICAgICA9IG1ha2VHZXR0ZXIoJ3NlY29uZHMnKTtcbiAgICB2YXIgbWludXRlcyAgICAgID0gbWFrZUdldHRlcignbWludXRlcycpO1xuICAgIHZhciBob3VycyAgICAgICAgPSBtYWtlR2V0dGVyKCdob3VycycpO1xuICAgIHZhciBkYXlzICAgICAgICAgPSBtYWtlR2V0dGVyKCdkYXlzJyk7XG4gICAgdmFyIG1vbnRocyAgICAgICA9IG1ha2VHZXR0ZXIoJ21vbnRocycpO1xuICAgIHZhciB5ZWFycyAgICAgICAgPSBtYWtlR2V0dGVyKCd5ZWFycycpO1xuXG4gICAgZnVuY3Rpb24gd2Vla3MgKCkge1xuICAgICAgICByZXR1cm4gYWJzRmxvb3IodGhpcy5kYXlzKCkgLyA3KTtcbiAgICB9XG5cbiAgICB2YXIgcm91bmQgPSBNYXRoLnJvdW5kO1xuICAgIHZhciB0aHJlc2hvbGRzID0ge1xuICAgICAgICBzczogNDQsICAgICAgICAgLy8gYSBmZXcgc2Vjb25kcyB0byBzZWNvbmRzXG4gICAgICAgIHMgOiA0NSwgICAgICAgICAvLyBzZWNvbmRzIHRvIG1pbnV0ZVxuICAgICAgICBtIDogNDUsICAgICAgICAgLy8gbWludXRlcyB0byBob3VyXG4gICAgICAgIGggOiAyMiwgICAgICAgICAvLyBob3VycyB0byBkYXlcbiAgICAgICAgZCA6IDI2LCAgICAgICAgIC8vIGRheXMgdG8gbW9udGhcbiAgICAgICAgTSA6IDExICAgICAgICAgIC8vIG1vbnRocyB0byB5ZWFyXG4gICAgfTtcblxuICAgIC8vIGhlbHBlciBmdW5jdGlvbiBmb3IgbW9tZW50LmZuLmZyb20sIG1vbWVudC5mbi5mcm9tTm93LCBhbmQgbW9tZW50LmR1cmF0aW9uLmZuLmh1bWFuaXplXG4gICAgZnVuY3Rpb24gc3Vic3RpdHV0ZVRpbWVBZ28oc3RyaW5nLCBudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGlzRnV0dXJlLCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5yZWxhdGl2ZVRpbWUobnVtYmVyIHx8IDEsICEhd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lJDEgKHBvc05lZ0R1cmF0aW9uLCB3aXRob3V0U3VmZml4LCBsb2NhbGUpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gY3JlYXRlRHVyYXRpb24ocG9zTmVnRHVyYXRpb24pLmFicygpO1xuICAgICAgICB2YXIgc2Vjb25kcyAgPSByb3VuZChkdXJhdGlvbi5hcygncycpKTtcbiAgICAgICAgdmFyIG1pbnV0ZXMgID0gcm91bmQoZHVyYXRpb24uYXMoJ20nKSk7XG4gICAgICAgIHZhciBob3VycyAgICA9IHJvdW5kKGR1cmF0aW9uLmFzKCdoJykpO1xuICAgICAgICB2YXIgZGF5cyAgICAgPSByb3VuZChkdXJhdGlvbi5hcygnZCcpKTtcbiAgICAgICAgdmFyIG1vbnRocyAgID0gcm91bmQoZHVyYXRpb24uYXMoJ00nKSk7XG4gICAgICAgIHZhciB5ZWFycyAgICA9IHJvdW5kKGR1cmF0aW9uLmFzKCd5JykpO1xuXG4gICAgICAgIHZhciBhID0gc2Vjb25kcyA8PSB0aHJlc2hvbGRzLnNzICYmIFsncycsIHNlY29uZHNdICB8fFxuICAgICAgICAgICAgICAgIHNlY29uZHMgPCB0aHJlc2hvbGRzLnMgICAmJiBbJ3NzJywgc2Vjb25kc10gfHxcbiAgICAgICAgICAgICAgICBtaW51dGVzIDw9IDEgICAgICAgICAgICAgJiYgWydtJ10gICAgICAgICAgIHx8XG4gICAgICAgICAgICAgICAgbWludXRlcyA8IHRocmVzaG9sZHMubSAgICYmIFsnbW0nLCBtaW51dGVzXSB8fFxuICAgICAgICAgICAgICAgIGhvdXJzICAgPD0gMSAgICAgICAgICAgICAmJiBbJ2gnXSAgICAgICAgICAgfHxcbiAgICAgICAgICAgICAgICBob3VycyAgIDwgdGhyZXNob2xkcy5oICAgJiYgWydoaCcsIGhvdXJzXSAgIHx8XG4gICAgICAgICAgICAgICAgZGF5cyAgICA8PSAxICAgICAgICAgICAgICYmIFsnZCddICAgICAgICAgICB8fFxuICAgICAgICAgICAgICAgIGRheXMgICAgPCB0aHJlc2hvbGRzLmQgICAmJiBbJ2RkJywgZGF5c10gICAgfHxcbiAgICAgICAgICAgICAgICBtb250aHMgIDw9IDEgICAgICAgICAgICAgJiYgWydNJ10gICAgICAgICAgIHx8XG4gICAgICAgICAgICAgICAgbW9udGhzICA8IHRocmVzaG9sZHMuTSAgICYmIFsnTU0nLCBtb250aHNdICB8fFxuICAgICAgICAgICAgICAgIHllYXJzICAgPD0gMSAgICAgICAgICAgICAmJiBbJ3knXSAgICAgICAgICAgfHwgWyd5eScsIHllYXJzXTtcblxuICAgICAgICBhWzJdID0gd2l0aG91dFN1ZmZpeDtcbiAgICAgICAgYVszXSA9ICtwb3NOZWdEdXJhdGlvbiA+IDA7XG4gICAgICAgIGFbNF0gPSBsb2NhbGU7XG4gICAgICAgIHJldHVybiBzdWJzdGl0dXRlVGltZUFnby5hcHBseShudWxsLCBhKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IHRoZSByb3VuZGluZyBmdW5jdGlvbiBmb3IgcmVsYXRpdmUgdGltZSBzdHJpbmdzXG4gICAgZnVuY3Rpb24gZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmcgKHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgaWYgKHJvdW5kaW5nRnVuY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvdW5kO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Yocm91bmRpbmdGdW5jdGlvbikgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJvdW5kID0gcm91bmRpbmdGdW5jdGlvbjtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IGEgdGhyZXNob2xkIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQgKHRocmVzaG9sZCwgbGltaXQpIHtcbiAgICAgICAgaWYgKHRocmVzaG9sZHNbdGhyZXNob2xkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbWl0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJlc2hvbGRzW3RocmVzaG9sZF07XG4gICAgICAgIH1cbiAgICAgICAgdGhyZXNob2xkc1t0aHJlc2hvbGRdID0gbGltaXQ7XG4gICAgICAgIGlmICh0aHJlc2hvbGQgPT09ICdzJykge1xuICAgICAgICAgICAgdGhyZXNob2xkcy5zcyA9IGxpbWl0IC0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBodW1hbml6ZSAod2l0aFN1ZmZpeCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2NhbGUgPSB0aGlzLmxvY2FsZURhdGEoKTtcbiAgICAgICAgdmFyIG91dHB1dCA9IHJlbGF0aXZlVGltZSQxKHRoaXMsICF3aXRoU3VmZml4LCBsb2NhbGUpO1xuXG4gICAgICAgIGlmICh3aXRoU3VmZml4KSB7XG4gICAgICAgICAgICBvdXRwdXQgPSBsb2NhbGUucGFzdEZ1dHVyZSgrdGhpcywgb3V0cHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsb2NhbGUucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIHZhciBhYnMkMSA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gc2lnbih4KSB7XG4gICAgICAgIHJldHVybiAoKHggPiAwKSAtICh4IDwgMCkpIHx8ICt4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nJDEoKSB7XG4gICAgICAgIC8vIGZvciBJU08gc3RyaW5ncyB3ZSBkbyBub3QgdXNlIHRoZSBub3JtYWwgYnViYmxpbmcgcnVsZXM6XG4gICAgICAgIC8vICAqIG1pbGxpc2Vjb25kcyBidWJibGUgdXAgdW50aWwgdGhleSBiZWNvbWUgaG91cnNcbiAgICAgICAgLy8gICogZGF5cyBkbyBub3QgYnViYmxlIGF0IGFsbFxuICAgICAgICAvLyAgKiBtb250aHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIHllYXJzXG4gICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSBpcyBubyBjb250ZXh0LWZyZWUgY29udmVyc2lvbiBiZXR3ZWVuIGhvdXJzIGFuZCBkYXlzXG4gICAgICAgIC8vICh0aGluayBvZiBjbG9jayBjaGFuZ2VzKVxuICAgICAgICAvLyBhbmQgYWxzbyBub3QgYmV0d2VlbiBkYXlzIGFuZCBtb250aHMgKDI4LTMxIGRheXMgcGVyIG1vbnRoKVxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZWNvbmRzID0gYWJzJDEodGhpcy5fbWlsbGlzZWNvbmRzKSAvIDEwMDA7XG4gICAgICAgIHZhciBkYXlzICAgICAgICAgPSBhYnMkMSh0aGlzLl9kYXlzKTtcbiAgICAgICAgdmFyIG1vbnRocyAgICAgICA9IGFicyQxKHRoaXMuX21vbnRocyk7XG4gICAgICAgIHZhciBtaW51dGVzLCBob3VycywgeWVhcnM7XG5cbiAgICAgICAgLy8gMzYwMCBzZWNvbmRzIC0+IDYwIG1pbnV0ZXMgLT4gMSBob3VyXG4gICAgICAgIG1pbnV0ZXMgICAgICAgICAgID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgaG91cnMgICAgICAgICAgICAgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBzZWNvbmRzICU9IDYwO1xuICAgICAgICBtaW51dGVzICU9IDYwO1xuXG4gICAgICAgIC8vIDEyIG1vbnRocyAtPiAxIHllYXJcbiAgICAgICAgeWVhcnMgID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cblxuICAgICAgICAvLyBpbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZG9yZGlsbGUvbW9tZW50LWlzb2R1cmF0aW9uL2Jsb2IvbWFzdGVyL21vbWVudC5pc29kdXJhdGlvbi5qc1xuICAgICAgICB2YXIgWSA9IHllYXJzO1xuICAgICAgICB2YXIgTSA9IG1vbnRocztcbiAgICAgICAgdmFyIEQgPSBkYXlzO1xuICAgICAgICB2YXIgaCA9IGhvdXJzO1xuICAgICAgICB2YXIgbSA9IG1pbnV0ZXM7XG4gICAgICAgIHZhciBzID0gc2Vjb25kcyA/IHNlY29uZHMudG9GaXhlZCgzKS5yZXBsYWNlKC9cXC4/MCskLywgJycpIDogJyc7XG4gICAgICAgIHZhciB0b3RhbCA9IHRoaXMuYXNTZWNvbmRzKCk7XG5cbiAgICAgICAgaWYgKCF0b3RhbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgc2FtZSBhcyBDIydzIChOb2RhKSBhbmQgcHl0aG9uIChpc29kYXRlKS4uLlxuICAgICAgICAgICAgLy8gYnV0IG5vdCBvdGhlciBKUyAoZ29vZy5kYXRlKVxuICAgICAgICAgICAgcmV0dXJuICdQMEQnO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRvdGFsU2lnbiA9IHRvdGFsIDwgMCA/ICctJyA6ICcnO1xuICAgICAgICB2YXIgeW1TaWduID0gc2lnbih0aGlzLl9tb250aHMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuICAgICAgICB2YXIgZGF5c1NpZ24gPSBzaWduKHRoaXMuX2RheXMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuICAgICAgICB2YXIgaG1zU2lnbiA9IHNpZ24odGhpcy5fbWlsbGlzZWNvbmRzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcblxuICAgICAgICByZXR1cm4gdG90YWxTaWduICsgJ1AnICtcbiAgICAgICAgICAgIChZID8geW1TaWduICsgWSArICdZJyA6ICcnKSArXG4gICAgICAgICAgICAoTSA/IHltU2lnbiArIE0gKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKEQgPyBkYXlzU2lnbiArIEQgKyAnRCcgOiAnJykgK1xuICAgICAgICAgICAgKChoIHx8IG0gfHwgcykgPyAnVCcgOiAnJykgK1xuICAgICAgICAgICAgKGggPyBobXNTaWduICsgaCArICdIJyA6ICcnKSArXG4gICAgICAgICAgICAobSA/IGhtc1NpZ24gKyBtICsgJ00nIDogJycpICtcbiAgICAgICAgICAgIChzID8gaG1zU2lnbiArIHMgKyAnUycgOiAnJyk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDIgPSBEdXJhdGlvbi5wcm90b3R5cGU7XG5cbiAgICBwcm90byQyLmlzVmFsaWQgICAgICAgID0gaXNWYWxpZCQxO1xuICAgIHByb3RvJDIuYWJzICAgICAgICAgICAgPSBhYnM7XG4gICAgcHJvdG8kMi5hZGQgICAgICAgICAgICA9IGFkZCQxO1xuICAgIHByb3RvJDIuc3VidHJhY3QgICAgICAgPSBzdWJ0cmFjdCQxO1xuICAgIHByb3RvJDIuYXMgICAgICAgICAgICAgPSBhcztcbiAgICBwcm90byQyLmFzTWlsbGlzZWNvbmRzID0gYXNNaWxsaXNlY29uZHM7XG4gICAgcHJvdG8kMi5hc1NlY29uZHMgICAgICA9IGFzU2Vjb25kcztcbiAgICBwcm90byQyLmFzTWludXRlcyAgICAgID0gYXNNaW51dGVzO1xuICAgIHByb3RvJDIuYXNIb3VycyAgICAgICAgPSBhc0hvdXJzO1xuICAgIHByb3RvJDIuYXNEYXlzICAgICAgICAgPSBhc0RheXM7XG4gICAgcHJvdG8kMi5hc1dlZWtzICAgICAgICA9IGFzV2Vla3M7XG4gICAgcHJvdG8kMi5hc01vbnRocyAgICAgICA9IGFzTW9udGhzO1xuICAgIHByb3RvJDIuYXNRdWFydGVycyAgICAgPSBhc1F1YXJ0ZXJzO1xuICAgIHByb3RvJDIuYXNZZWFycyAgICAgICAgPSBhc1llYXJzO1xuICAgIHByb3RvJDIudmFsdWVPZiAgICAgICAgPSB2YWx1ZU9mJDE7XG4gICAgcHJvdG8kMi5fYnViYmxlICAgICAgICA9IGJ1YmJsZTtcbiAgICBwcm90byQyLmNsb25lICAgICAgICAgID0gY2xvbmUkMTtcbiAgICBwcm90byQyLmdldCAgICAgICAgICAgID0gZ2V0JDI7XG4gICAgcHJvdG8kMi5taWxsaXNlY29uZHMgICA9IG1pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLnNlY29uZHMgICAgICAgID0gc2Vjb25kcztcbiAgICBwcm90byQyLm1pbnV0ZXMgICAgICAgID0gbWludXRlcztcbiAgICBwcm90byQyLmhvdXJzICAgICAgICAgID0gaG91cnM7XG4gICAgcHJvdG8kMi5kYXlzICAgICAgICAgICA9IGRheXM7XG4gICAgcHJvdG8kMi53ZWVrcyAgICAgICAgICA9IHdlZWtzO1xuICAgIHByb3RvJDIubW9udGhzICAgICAgICAgPSBtb250aHM7XG4gICAgcHJvdG8kMi55ZWFycyAgICAgICAgICA9IHllYXJzO1xuICAgIHByb3RvJDIuaHVtYW5pemUgICAgICAgPSBodW1hbml6ZTtcbiAgICBwcm90byQyLnRvSVNPU3RyaW5nICAgID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLnRvU3RyaW5nICAgICAgID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLnRvSlNPTiAgICAgICAgID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLmxvY2FsZSAgICAgICAgID0gbG9jYWxlO1xuICAgIHByb3RvJDIubG9jYWxlRGF0YSAgICAgPSBsb2NhbGVEYXRhO1xuXG4gICAgcHJvdG8kMi50b0lzb1N0cmluZyA9IGRlcHJlY2F0ZSgndG9Jc29TdHJpbmcoKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRvSVNPU3RyaW5nKCkgaW5zdGVhZCAobm90aWNlIHRoZSBjYXBpdGFscyknLCB0b0lTT1N0cmluZyQxKTtcbiAgICBwcm90byQyLmxhbmcgPSBsYW5nO1xuXG4gICAgLy8gU2lkZSBlZmZlY3QgaW1wb3J0c1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1gnLCAwLCAwLCAndW5peCcpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd4JywgMCwgMCwgJ3ZhbHVlT2YnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3gnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWCcsIG1hdGNoVGltZXN0YW1wKTtcbiAgICBhZGRQYXJzZVRva2VuKCdYJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKHBhcnNlRmxvYXQoaW5wdXQsIDEwKSAqIDEwMDApO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ3gnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUodG9JbnQoaW5wdXQpKTtcbiAgICB9KTtcblxuICAgIC8vIFNpZGUgZWZmZWN0IGltcG9ydHNcblxuXG4gICAgaG9va3MudmVyc2lvbiA9ICcyLjI0LjAnO1xuXG4gICAgc2V0SG9va0NhbGxiYWNrKGNyZWF0ZUxvY2FsKTtcblxuICAgIGhvb2tzLmZuICAgICAgICAgICAgICAgICAgICA9IHByb3RvO1xuICAgIGhvb2tzLm1pbiAgICAgICAgICAgICAgICAgICA9IG1pbjtcbiAgICBob29rcy5tYXggICAgICAgICAgICAgICAgICAgPSBtYXg7XG4gICAgaG9va3Mubm93ICAgICAgICAgICAgICAgICAgID0gbm93O1xuICAgIGhvb2tzLnV0YyAgICAgICAgICAgICAgICAgICA9IGNyZWF0ZVVUQztcbiAgICBob29rcy51bml4ICAgICAgICAgICAgICAgICAgPSBjcmVhdGVVbml4O1xuICAgIGhvb2tzLm1vbnRocyAgICAgICAgICAgICAgICA9IGxpc3RNb250aHM7XG4gICAgaG9va3MuaXNEYXRlICAgICAgICAgICAgICAgID0gaXNEYXRlO1xuICAgIGhvb2tzLmxvY2FsZSAgICAgICAgICAgICAgICA9IGdldFNldEdsb2JhbExvY2FsZTtcbiAgICBob29rcy5pbnZhbGlkICAgICAgICAgICAgICAgPSBjcmVhdGVJbnZhbGlkO1xuICAgIGhvb2tzLmR1cmF0aW9uICAgICAgICAgICAgICA9IGNyZWF0ZUR1cmF0aW9uO1xuICAgIGhvb2tzLmlzTW9tZW50ICAgICAgICAgICAgICA9IGlzTW9tZW50O1xuICAgIGhvb2tzLndlZWtkYXlzICAgICAgICAgICAgICA9IGxpc3RXZWVrZGF5cztcbiAgICBob29rcy5wYXJzZVpvbmUgICAgICAgICAgICAgPSBjcmVhdGVJblpvbmU7XG4gICAgaG9va3MubG9jYWxlRGF0YSAgICAgICAgICAgID0gZ2V0TG9jYWxlO1xuICAgIGhvb2tzLmlzRHVyYXRpb24gICAgICAgICAgICA9IGlzRHVyYXRpb247XG4gICAgaG9va3MubW9udGhzU2hvcnQgICAgICAgICAgID0gbGlzdE1vbnRoc1Nob3J0O1xuICAgIGhvb2tzLndlZWtkYXlzTWluICAgICAgICAgICA9IGxpc3RXZWVrZGF5c01pbjtcbiAgICBob29rcy5kZWZpbmVMb2NhbGUgICAgICAgICAgPSBkZWZpbmVMb2NhbGU7XG4gICAgaG9va3MudXBkYXRlTG9jYWxlICAgICAgICAgID0gdXBkYXRlTG9jYWxlO1xuICAgIGhvb2tzLmxvY2FsZXMgICAgICAgICAgICAgICA9IGxpc3RMb2NhbGVzO1xuICAgIGhvb2tzLndlZWtkYXlzU2hvcnQgICAgICAgICA9IGxpc3RXZWVrZGF5c1Nob3J0O1xuICAgIGhvb2tzLm5vcm1hbGl6ZVVuaXRzICAgICAgICA9IG5vcm1hbGl6ZVVuaXRzO1xuICAgIGhvb2tzLnJlbGF0aXZlVGltZVJvdW5kaW5nICA9IGdldFNldFJlbGF0aXZlVGltZVJvdW5kaW5nO1xuICAgIGhvb2tzLnJlbGF0aXZlVGltZVRocmVzaG9sZCA9IGdldFNldFJlbGF0aXZlVGltZVRocmVzaG9sZDtcbiAgICBob29rcy5jYWxlbmRhckZvcm1hdCAgICAgICAgPSBnZXRDYWxlbmRhckZvcm1hdDtcbiAgICBob29rcy5wcm90b3R5cGUgICAgICAgICAgICAgPSBwcm90bztcblxuICAgIC8vIGN1cnJlbnRseSBIVE1MNSBpbnB1dCB0eXBlIG9ubHkgc3VwcG9ydHMgMjQtaG91ciBmb3JtYXRzXG4gICAgaG9va3MuSFRNTDVfRk1UID0ge1xuICAgICAgICBEQVRFVElNRV9MT0NBTDogJ1lZWVktTU0tRERUSEg6bW0nLCAgICAgICAgICAgICAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfU0VDT05EUzogJ1lZWVktTU0tRERUSEg6bW06c3MnLCAgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIxXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfTVM6ICdZWVlZLU1NLUREVEhIOm1tOnNzLlNTUycsICAgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIwLjAwMVwiIC8+XG4gICAgICAgIERBVEU6ICdZWVlZLU1NLUREJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIC8+XG4gICAgICAgIFRJTUU6ICdISDptbScsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIC8+XG4gICAgICAgIFRJTUVfU0VDT05EUzogJ0hIOm1tOnNzJywgICAgICAgICAgICAgICAgICAgICAgIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIHN0ZXA9XCIxXCIgLz5cbiAgICAgICAgVElNRV9NUzogJ0hIOm1tOnNzLlNTUycsICAgICAgICAgICAgICAgICAgICAgICAgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgc3RlcD1cIjAuMDAxXCIgLz5cbiAgICAgICAgV0VFSzogJ0dHR0ctW1ddV1cnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPGlucHV0IHR5cGU9XCJ3ZWVrXCIgLz5cbiAgICAgICAgTU9OVEg6ICdZWVlZLU1NJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPGlucHV0IHR5cGU9XCJtb250aFwiIC8+XG4gICAgfTtcblxuICAgIHJldHVybiBob29rcztcblxufSkpKTtcbiIsIi8qIVxuICogbXVzdGFjaGUuanMgLSBMb2dpYy1sZXNzIHt7bXVzdGFjaGV9fSB0ZW1wbGF0ZXMgd2l0aCBKYXZhU2NyaXB0XG4gKiBodHRwOi8vZ2l0aHViLmNvbS9qYW5sL211c3RhY2hlLmpzXG4gKi9cblxuLypnbG9iYWwgZGVmaW5lOiBmYWxzZSBNdXN0YWNoZTogdHJ1ZSovXG5cbihmdW5jdGlvbiBkZWZpbmVNdXN0YWNoZSAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiB0eXBlb2YgZXhwb3J0cy5ub2RlTmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBmYWN0b3J5KGV4cG9ydHMpOyAvLyBDb21tb25KU1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSk7IC8vIEFNRFxuICB9IGVsc2Uge1xuICAgIGdsb2JhbC5NdXN0YWNoZSA9IHt9O1xuICAgIGZhY3RvcnkoZ2xvYmFsLk11c3RhY2hlKTsgLy8gc2NyaXB0LCB3c2gsIGFzcFxuICB9XG59KHRoaXMsIGZ1bmN0aW9uIG11c3RhY2hlRmFjdG9yeSAobXVzdGFjaGUpIHtcblxuICB2YXIgb2JqZWN0VG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheVBvbHlmaWxsIChvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0VG9TdHJpbmcuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBBcnJheV0nO1xuICB9O1xuXG4gIGZ1bmN0aW9uIGlzRnVuY3Rpb24gKG9iamVjdCkge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vcmUgY29ycmVjdCB0eXBlb2Ygc3RyaW5nIGhhbmRsaW5nIGFycmF5XG4gICAqIHdoaWNoIG5vcm1hbGx5IHJldHVybnMgdHlwZW9mICdvYmplY3QnXG4gICAqL1xuICBmdW5jdGlvbiB0eXBlU3RyIChvYmopIHtcbiAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ2FycmF5JyA6IHR5cGVvZiBvYmo7XG4gIH1cblxuICBmdW5jdGlvbiBlc2NhcGVSZWdFeHAgKHN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW1xcLVxcW1xcXXt9KCkqKz8uLFxcXFxcXF4kfCNcXHNdL2csICdcXFxcJCYnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOdWxsIHNhZmUgd2F5IG9mIGNoZWNraW5nIHdoZXRoZXIgb3Igbm90IGFuIG9iamVjdCxcbiAgICogaW5jbHVkaW5nIGl0cyBwcm90b3R5cGUsIGhhcyBhIGdpdmVuIHByb3BlcnR5XG4gICAqL1xuICBmdW5jdGlvbiBoYXNQcm9wZXJ0eSAob2JqLCBwcm9wTmFtZSkge1xuICAgIHJldHVybiBvYmogIT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiAocHJvcE5hbWUgaW4gb2JqKTtcbiAgfVxuXG4gIC8vIFdvcmthcm91bmQgZm9yIGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvQ09VQ0hEQi01NzdcbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qYW5sL211c3RhY2hlLmpzL2lzc3Vlcy8xODlcbiAgdmFyIHJlZ0V4cFRlc3QgPSBSZWdFeHAucHJvdG90eXBlLnRlc3Q7XG4gIGZ1bmN0aW9uIHRlc3RSZWdFeHAgKHJlLCBzdHJpbmcpIHtcbiAgICByZXR1cm4gcmVnRXhwVGVzdC5jYWxsKHJlLCBzdHJpbmcpO1xuICB9XG5cbiAgdmFyIG5vblNwYWNlUmUgPSAvXFxTLztcbiAgZnVuY3Rpb24gaXNXaGl0ZXNwYWNlIChzdHJpbmcpIHtcbiAgICByZXR1cm4gIXRlc3RSZWdFeHAobm9uU3BhY2VSZSwgc3RyaW5nKTtcbiAgfVxuXG4gIHZhciBlbnRpdHlNYXAgPSB7XG4gICAgJyYnOiAnJmFtcDsnLFxuICAgICc8JzogJyZsdDsnLFxuICAgICc+JzogJyZndDsnLFxuICAgICdcIic6ICcmcXVvdDsnLFxuICAgIFwiJ1wiOiAnJiMzOTsnLFxuICAgICcvJzogJyYjeDJGOycsXG4gICAgJ2AnOiAnJiN4NjA7JyxcbiAgICAnPSc6ICcmI3gzRDsnXG4gIH07XG5cbiAgZnVuY3Rpb24gZXNjYXBlSHRtbCAoc3RyaW5nKSB7XG4gICAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UoL1smPD5cIidgPVxcL10vZywgZnVuY3Rpb24gZnJvbUVudGl0eU1hcCAocykge1xuICAgICAgcmV0dXJuIGVudGl0eU1hcFtzXTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciB3aGl0ZVJlID0gL1xccyovO1xuICB2YXIgc3BhY2VSZSA9IC9cXHMrLztcbiAgdmFyIGVxdWFsc1JlID0gL1xccyo9LztcbiAgdmFyIGN1cmx5UmUgPSAvXFxzKlxcfS87XG4gIHZhciB0YWdSZSA9IC8jfFxcXnxcXC98PnxcXHt8Jnw9fCEvO1xuXG4gIC8qKlxuICAgKiBCcmVha3MgdXAgdGhlIGdpdmVuIGB0ZW1wbGF0ZWAgc3RyaW5nIGludG8gYSB0cmVlIG9mIHRva2Vucy4gSWYgdGhlIGB0YWdzYFxuICAgKiBhcmd1bWVudCBpcyBnaXZlbiBoZXJlIGl0IG11c3QgYmUgYW4gYXJyYXkgd2l0aCB0d28gc3RyaW5nIHZhbHVlczogdGhlXG4gICAqIG9wZW5pbmcgYW5kIGNsb3NpbmcgdGFncyB1c2VkIGluIHRoZSB0ZW1wbGF0ZSAoZS5nLiBbIFwiPCVcIiwgXCIlPlwiIF0pLiBPZlxuICAgKiBjb3Vyc2UsIHRoZSBkZWZhdWx0IGlzIHRvIHVzZSBtdXN0YWNoZXMgKGkuZS4gbXVzdGFjaGUudGFncykuXG4gICAqXG4gICAqIEEgdG9rZW4gaXMgYW4gYXJyYXkgd2l0aCBhdCBsZWFzdCA0IGVsZW1lbnRzLiBUaGUgZmlyc3QgZWxlbWVudCBpcyB0aGVcbiAgICogbXVzdGFjaGUgc3ltYm9sIHRoYXQgd2FzIHVzZWQgaW5zaWRlIHRoZSB0YWcsIGUuZy4gXCIjXCIgb3IgXCImXCIuIElmIHRoZSB0YWdcbiAgICogZGlkIG5vdCBjb250YWluIGEgc3ltYm9sIChpLmUuIHt7bXlWYWx1ZX19KSB0aGlzIGVsZW1lbnQgaXMgXCJuYW1lXCIuIEZvclxuICAgKiBhbGwgdGV4dCB0aGF0IGFwcGVhcnMgb3V0c2lkZSBhIHN5bWJvbCB0aGlzIGVsZW1lbnQgaXMgXCJ0ZXh0XCIuXG4gICAqXG4gICAqIFRoZSBzZWNvbmQgZWxlbWVudCBvZiBhIHRva2VuIGlzIGl0cyBcInZhbHVlXCIuIEZvciBtdXN0YWNoZSB0YWdzIHRoaXMgaXNcbiAgICogd2hhdGV2ZXIgZWxzZSB3YXMgaW5zaWRlIHRoZSB0YWcgYmVzaWRlcyB0aGUgb3BlbmluZyBzeW1ib2wuIEZvciB0ZXh0IHRva2Vuc1xuICAgKiB0aGlzIGlzIHRoZSB0ZXh0IGl0c2VsZi5cbiAgICpcbiAgICogVGhlIHRoaXJkIGFuZCBmb3VydGggZWxlbWVudHMgb2YgdGhlIHRva2VuIGFyZSB0aGUgc3RhcnQgYW5kIGVuZCBpbmRpY2VzLFxuICAgKiByZXNwZWN0aXZlbHksIG9mIHRoZSB0b2tlbiBpbiB0aGUgb3JpZ2luYWwgdGVtcGxhdGUuXG4gICAqXG4gICAqIFRva2VucyB0aGF0IGFyZSB0aGUgcm9vdCBub2RlIG9mIGEgc3VidHJlZSBjb250YWluIHR3byBtb3JlIGVsZW1lbnRzOiAxKSBhblxuICAgKiBhcnJheSBvZiB0b2tlbnMgaW4gdGhlIHN1YnRyZWUgYW5kIDIpIHRoZSBpbmRleCBpbiB0aGUgb3JpZ2luYWwgdGVtcGxhdGUgYXRcbiAgICogd2hpY2ggdGhlIGNsb3NpbmcgdGFnIGZvciB0aGF0IHNlY3Rpb24gYmVnaW5zLlxuICAgKi9cbiAgZnVuY3Rpb24gcGFyc2VUZW1wbGF0ZSAodGVtcGxhdGUsIHRhZ3MpIHtcbiAgICBpZiAoIXRlbXBsYXRlKVxuICAgICAgcmV0dXJuIFtdO1xuXG4gICAgdmFyIHNlY3Rpb25zID0gW107ICAgICAvLyBTdGFjayB0byBob2xkIHNlY3Rpb24gdG9rZW5zXG4gICAgdmFyIHRva2VucyA9IFtdOyAgICAgICAvLyBCdWZmZXIgdG8gaG9sZCB0aGUgdG9rZW5zXG4gICAgdmFyIHNwYWNlcyA9IFtdOyAgICAgICAvLyBJbmRpY2VzIG9mIHdoaXRlc3BhY2UgdG9rZW5zIG9uIHRoZSBjdXJyZW50IGxpbmVcbiAgICB2YXIgaGFzVGFnID0gZmFsc2U7ICAgIC8vIElzIHRoZXJlIGEge3t0YWd9fSBvbiB0aGUgY3VycmVudCBsaW5lP1xuICAgIHZhciBub25TcGFjZSA9IGZhbHNlOyAgLy8gSXMgdGhlcmUgYSBub24tc3BhY2UgY2hhciBvbiB0aGUgY3VycmVudCBsaW5lP1xuXG4gICAgLy8gU3RyaXBzIGFsbCB3aGl0ZXNwYWNlIHRva2VucyBhcnJheSBmb3IgdGhlIGN1cnJlbnQgbGluZVxuICAgIC8vIGlmIHRoZXJlIHdhcyBhIHt7I3RhZ319IG9uIGl0IGFuZCBvdGhlcndpc2Ugb25seSBzcGFjZS5cbiAgICBmdW5jdGlvbiBzdHJpcFNwYWNlICgpIHtcbiAgICAgIGlmIChoYXNUYWcgJiYgIW5vblNwYWNlKSB7XG4gICAgICAgIHdoaWxlIChzcGFjZXMubGVuZ3RoKVxuICAgICAgICAgIGRlbGV0ZSB0b2tlbnNbc3BhY2VzLnBvcCgpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNwYWNlcyA9IFtdO1xuICAgICAgfVxuXG4gICAgICBoYXNUYWcgPSBmYWxzZTtcbiAgICAgIG5vblNwYWNlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIG9wZW5pbmdUYWdSZSwgY2xvc2luZ1RhZ1JlLCBjbG9zaW5nQ3VybHlSZTtcbiAgICBmdW5jdGlvbiBjb21waWxlVGFncyAodGFnc1RvQ29tcGlsZSkge1xuICAgICAgaWYgKHR5cGVvZiB0YWdzVG9Db21waWxlID09PSAnc3RyaW5nJylcbiAgICAgICAgdGFnc1RvQ29tcGlsZSA9IHRhZ3NUb0NvbXBpbGUuc3BsaXQoc3BhY2VSZSwgMik7XG5cbiAgICAgIGlmICghaXNBcnJheSh0YWdzVG9Db21waWxlKSB8fCB0YWdzVG9Db21waWxlLmxlbmd0aCAhPT0gMilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHRhZ3M6ICcgKyB0YWdzVG9Db21waWxlKTtcblxuICAgICAgb3BlbmluZ1RhZ1JlID0gbmV3IFJlZ0V4cChlc2NhcGVSZWdFeHAodGFnc1RvQ29tcGlsZVswXSkgKyAnXFxcXHMqJyk7XG4gICAgICBjbG9zaW5nVGFnUmUgPSBuZXcgUmVnRXhwKCdcXFxccyonICsgZXNjYXBlUmVnRXhwKHRhZ3NUb0NvbXBpbGVbMV0pKTtcbiAgICAgIGNsb3NpbmdDdXJseVJlID0gbmV3IFJlZ0V4cCgnXFxcXHMqJyArIGVzY2FwZVJlZ0V4cCgnfScgKyB0YWdzVG9Db21waWxlWzFdKSk7XG4gICAgfVxuXG4gICAgY29tcGlsZVRhZ3ModGFncyB8fCBtdXN0YWNoZS50YWdzKTtcblxuICAgIHZhciBzY2FubmVyID0gbmV3IFNjYW5uZXIodGVtcGxhdGUpO1xuXG4gICAgdmFyIHN0YXJ0LCB0eXBlLCB2YWx1ZSwgY2hyLCB0b2tlbiwgb3BlblNlY3Rpb247XG4gICAgd2hpbGUgKCFzY2FubmVyLmVvcygpKSB7XG4gICAgICBzdGFydCA9IHNjYW5uZXIucG9zO1xuXG4gICAgICAvLyBNYXRjaCBhbnkgdGV4dCBiZXR3ZWVuIHRhZ3MuXG4gICAgICB2YWx1ZSA9IHNjYW5uZXIuc2NhblVudGlsKG9wZW5pbmdUYWdSZSk7XG5cbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgdmFsdWVMZW5ndGggPSB2YWx1ZS5sZW5ndGg7IGkgPCB2YWx1ZUxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgY2hyID0gdmFsdWUuY2hhckF0KGkpO1xuXG4gICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjaHIpKSB7XG4gICAgICAgICAgICBzcGFjZXMucHVzaCh0b2tlbnMubGVuZ3RoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbm9uU3BhY2UgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRva2Vucy5wdXNoKFsgJ3RleHQnLCBjaHIsIHN0YXJ0LCBzdGFydCArIDEgXSk7XG4gICAgICAgICAgc3RhcnQgKz0gMTtcblxuICAgICAgICAgIC8vIENoZWNrIGZvciB3aGl0ZXNwYWNlIG9uIHRoZSBjdXJyZW50IGxpbmUuXG4gICAgICAgICAgaWYgKGNociA9PT0gJ1xcbicpXG4gICAgICAgICAgICBzdHJpcFNwYWNlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTWF0Y2ggdGhlIG9wZW5pbmcgdGFnLlxuICAgICAgaWYgKCFzY2FubmVyLnNjYW4ob3BlbmluZ1RhZ1JlKSlcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGhhc1RhZyA9IHRydWU7XG5cbiAgICAgIC8vIEdldCB0aGUgdGFnIHR5cGUuXG4gICAgICB0eXBlID0gc2Nhbm5lci5zY2FuKHRhZ1JlKSB8fCAnbmFtZSc7XG4gICAgICBzY2FubmVyLnNjYW4od2hpdGVSZSk7XG5cbiAgICAgIC8vIEdldCB0aGUgdGFnIHZhbHVlLlxuICAgICAgaWYgKHR5cGUgPT09ICc9Jykge1xuICAgICAgICB2YWx1ZSA9IHNjYW5uZXIuc2NhblVudGlsKGVxdWFsc1JlKTtcbiAgICAgICAgc2Nhbm5lci5zY2FuKGVxdWFsc1JlKTtcbiAgICAgICAgc2Nhbm5lci5zY2FuVW50aWwoY2xvc2luZ1RhZ1JlKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3snKSB7XG4gICAgICAgIHZhbHVlID0gc2Nhbm5lci5zY2FuVW50aWwoY2xvc2luZ0N1cmx5UmUpO1xuICAgICAgICBzY2FubmVyLnNjYW4oY3VybHlSZSk7XG4gICAgICAgIHNjYW5uZXIuc2NhblVudGlsKGNsb3NpbmdUYWdSZSk7XG4gICAgICAgIHR5cGUgPSAnJic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IHNjYW5uZXIuc2NhblVudGlsKGNsb3NpbmdUYWdSZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIE1hdGNoIHRoZSBjbG9zaW5nIHRhZy5cbiAgICAgIGlmICghc2Nhbm5lci5zY2FuKGNsb3NpbmdUYWdSZSkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5jbG9zZWQgdGFnIGF0ICcgKyBzY2FubmVyLnBvcyk7XG5cbiAgICAgIHRva2VuID0gWyB0eXBlLCB2YWx1ZSwgc3RhcnQsIHNjYW5uZXIucG9zIF07XG4gICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG5cbiAgICAgIGlmICh0eXBlID09PSAnIycgfHwgdHlwZSA9PT0gJ14nKSB7XG4gICAgICAgIHNlY3Rpb25zLnB1c2godG9rZW4pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnLycpIHtcbiAgICAgICAgLy8gQ2hlY2sgc2VjdGlvbiBuZXN0aW5nLlxuICAgICAgICBvcGVuU2VjdGlvbiA9IHNlY3Rpb25zLnBvcCgpO1xuXG4gICAgICAgIGlmICghb3BlblNlY3Rpb24pXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbm9wZW5lZCBzZWN0aW9uIFwiJyArIHZhbHVlICsgJ1wiIGF0ICcgKyBzdGFydCk7XG5cbiAgICAgICAgaWYgKG9wZW5TZWN0aW9uWzFdICE9PSB2YWx1ZSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuY2xvc2VkIHNlY3Rpb24gXCInICsgb3BlblNlY3Rpb25bMV0gKyAnXCIgYXQgJyArIHN0YXJ0KTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ25hbWUnIHx8IHR5cGUgPT09ICd7JyB8fCB0eXBlID09PSAnJicpIHtcbiAgICAgICAgbm9uU3BhY2UgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnPScpIHtcbiAgICAgICAgLy8gU2V0IHRoZSB0YWdzIGZvciB0aGUgbmV4dCB0aW1lIGFyb3VuZC5cbiAgICAgICAgY29tcGlsZVRhZ3ModmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3BlbiBzZWN0aW9ucyB3aGVuIHdlJ3JlIGRvbmUuXG4gICAgb3BlblNlY3Rpb24gPSBzZWN0aW9ucy5wb3AoKTtcblxuICAgIGlmIChvcGVuU2VjdGlvbilcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5jbG9zZWQgc2VjdGlvbiBcIicgKyBvcGVuU2VjdGlvblsxXSArICdcIiBhdCAnICsgc2Nhbm5lci5wb3MpO1xuXG4gICAgcmV0dXJuIG5lc3RUb2tlbnMoc3F1YXNoVG9rZW5zKHRva2VucykpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbWJpbmVzIHRoZSB2YWx1ZXMgb2YgY29uc2VjdXRpdmUgdGV4dCB0b2tlbnMgaW4gdGhlIGdpdmVuIGB0b2tlbnNgIGFycmF5XG4gICAqIHRvIGEgc2luZ2xlIHRva2VuLlxuICAgKi9cbiAgZnVuY3Rpb24gc3F1YXNoVG9rZW5zICh0b2tlbnMpIHtcbiAgICB2YXIgc3F1YXNoZWRUb2tlbnMgPSBbXTtcblxuICAgIHZhciB0b2tlbiwgbGFzdFRva2VuO1xuICAgIGZvciAodmFyIGkgPSAwLCBudW1Ub2tlbnMgPSB0b2tlbnMubGVuZ3RoOyBpIDwgbnVtVG9rZW5zOyArK2kpIHtcbiAgICAgIHRva2VuID0gdG9rZW5zW2ldO1xuXG4gICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgaWYgKHRva2VuWzBdID09PSAndGV4dCcgJiYgbGFzdFRva2VuICYmIGxhc3RUb2tlblswXSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgbGFzdFRva2VuWzFdICs9IHRva2VuWzFdO1xuICAgICAgICAgIGxhc3RUb2tlblszXSA9IHRva2VuWzNdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNxdWFzaGVkVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgIGxhc3RUb2tlbiA9IHRva2VuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNxdWFzaGVkVG9rZW5zO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1zIHRoZSBnaXZlbiBhcnJheSBvZiBgdG9rZW5zYCBpbnRvIGEgbmVzdGVkIHRyZWUgc3RydWN0dXJlIHdoZXJlXG4gICAqIHRva2VucyB0aGF0IHJlcHJlc2VudCBhIHNlY3Rpb24gaGF2ZSB0d28gYWRkaXRpb25hbCBpdGVtczogMSkgYW4gYXJyYXkgb2ZcbiAgICogYWxsIHRva2VucyB0aGF0IGFwcGVhciBpbiB0aGF0IHNlY3Rpb24gYW5kIDIpIHRoZSBpbmRleCBpbiB0aGUgb3JpZ2luYWxcbiAgICogdGVtcGxhdGUgdGhhdCByZXByZXNlbnRzIHRoZSBlbmQgb2YgdGhhdCBzZWN0aW9uLlxuICAgKi9cbiAgZnVuY3Rpb24gbmVzdFRva2VucyAodG9rZW5zKSB7XG4gICAgdmFyIG5lc3RlZFRva2VucyA9IFtdO1xuICAgIHZhciBjb2xsZWN0b3IgPSBuZXN0ZWRUb2tlbnM7XG4gICAgdmFyIHNlY3Rpb25zID0gW107XG5cbiAgICB2YXIgdG9rZW4sIHNlY3Rpb247XG4gICAgZm9yICh2YXIgaSA9IDAsIG51bVRva2VucyA9IHRva2Vucy5sZW5ndGg7IGkgPCBudW1Ub2tlbnM7ICsraSkge1xuICAgICAgdG9rZW4gPSB0b2tlbnNbaV07XG5cbiAgICAgIHN3aXRjaCAodG9rZW5bMF0pIHtcbiAgICAgICAgY2FzZSAnIyc6XG4gICAgICAgIGNhc2UgJ14nOlxuICAgICAgICAgIGNvbGxlY3Rvci5wdXNoKHRva2VuKTtcbiAgICAgICAgICBzZWN0aW9ucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICBjb2xsZWN0b3IgPSB0b2tlbls0XSA9IFtdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICcvJzpcbiAgICAgICAgICBzZWN0aW9uID0gc2VjdGlvbnMucG9wKCk7XG4gICAgICAgICAgc2VjdGlvbls1XSA9IHRva2VuWzJdO1xuICAgICAgICAgIGNvbGxlY3RvciA9IHNlY3Rpb25zLmxlbmd0aCA+IDAgPyBzZWN0aW9uc1tzZWN0aW9ucy5sZW5ndGggLSAxXVs0XSA6IG5lc3RlZFRva2VucztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb2xsZWN0b3IucHVzaCh0b2tlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5lc3RlZFRva2VucztcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNpbXBsZSBzdHJpbmcgc2Nhbm5lciB0aGF0IGlzIHVzZWQgYnkgdGhlIHRlbXBsYXRlIHBhcnNlciB0byBmaW5kXG4gICAqIHRva2VucyBpbiB0ZW1wbGF0ZSBzdHJpbmdzLlxuICAgKi9cbiAgZnVuY3Rpb24gU2Nhbm5lciAoc3RyaW5nKSB7XG4gICAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG4gICAgdGhpcy50YWlsID0gc3RyaW5nO1xuICAgIHRoaXMucG9zID0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdGFpbCBpcyBlbXB0eSAoZW5kIG9mIHN0cmluZykuXG4gICAqL1xuICBTY2FubmVyLnByb3RvdHlwZS5lb3MgPSBmdW5jdGlvbiBlb3MgKCkge1xuICAgIHJldHVybiB0aGlzLnRhaWwgPT09ICcnO1xuICB9O1xuXG4gIC8qKlxuICAgKiBUcmllcyB0byBtYXRjaCB0aGUgZ2l2ZW4gcmVndWxhciBleHByZXNzaW9uIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLlxuICAgKiBSZXR1cm5zIHRoZSBtYXRjaGVkIHRleHQgaWYgaXQgY2FuIG1hdGNoLCB0aGUgZW1wdHkgc3RyaW5nIG90aGVyd2lzZS5cbiAgICovXG4gIFNjYW5uZXIucHJvdG90eXBlLnNjYW4gPSBmdW5jdGlvbiBzY2FuIChyZSkge1xuICAgIHZhciBtYXRjaCA9IHRoaXMudGFpbC5tYXRjaChyZSk7XG5cbiAgICBpZiAoIW1hdGNoIHx8IG1hdGNoLmluZGV4ICE9PSAwKVxuICAgICAgcmV0dXJuICcnO1xuXG4gICAgdmFyIHN0cmluZyA9IG1hdGNoWzBdO1xuXG4gICAgdGhpcy50YWlsID0gdGhpcy50YWlsLnN1YnN0cmluZyhzdHJpbmcubGVuZ3RoKTtcbiAgICB0aGlzLnBvcyArPSBzdHJpbmcubGVuZ3RoO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfTtcblxuICAvKipcbiAgICogU2tpcHMgYWxsIHRleHQgdW50aWwgdGhlIGdpdmVuIHJlZ3VsYXIgZXhwcmVzc2lvbiBjYW4gYmUgbWF0Y2hlZC4gUmV0dXJuc1xuICAgKiB0aGUgc2tpcHBlZCBzdHJpbmcsIHdoaWNoIGlzIHRoZSBlbnRpcmUgdGFpbCBpZiBubyBtYXRjaCBjYW4gYmUgbWFkZS5cbiAgICovXG4gIFNjYW5uZXIucHJvdG90eXBlLnNjYW5VbnRpbCA9IGZ1bmN0aW9uIHNjYW5VbnRpbCAocmUpIHtcbiAgICB2YXIgaW5kZXggPSB0aGlzLnRhaWwuc2VhcmNoKHJlKSwgbWF0Y2g7XG5cbiAgICBzd2l0Y2ggKGluZGV4KSB7XG4gICAgICBjYXNlIC0xOlxuICAgICAgICBtYXRjaCA9IHRoaXMudGFpbDtcbiAgICAgICAgdGhpcy50YWlsID0gJyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAwOlxuICAgICAgICBtYXRjaCA9ICcnO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIG1hdGNoID0gdGhpcy50YWlsLnN1YnN0cmluZygwLCBpbmRleCk7XG4gICAgICAgIHRoaXMudGFpbCA9IHRoaXMudGFpbC5zdWJzdHJpbmcoaW5kZXgpO1xuICAgIH1cblxuICAgIHRoaXMucG9zICs9IG1hdGNoLmxlbmd0aDtcblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcblxuICAvKipcbiAgICogUmVwcmVzZW50cyBhIHJlbmRlcmluZyBjb250ZXh0IGJ5IHdyYXBwaW5nIGEgdmlldyBvYmplY3QgYW5kXG4gICAqIG1haW50YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgY29udGV4dC5cbiAgICovXG4gIGZ1bmN0aW9uIENvbnRleHQgKHZpZXcsIHBhcmVudENvbnRleHQpIHtcbiAgICB0aGlzLnZpZXcgPSB2aWV3O1xuICAgIHRoaXMuY2FjaGUgPSB7ICcuJzogdGhpcy52aWV3IH07XG4gICAgdGhpcy5wYXJlbnQgPSBwYXJlbnRDb250ZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgY29udGV4dCB1c2luZyB0aGUgZ2l2ZW4gdmlldyB3aXRoIHRoaXMgY29udGV4dFxuICAgKiBhcyB0aGUgcGFyZW50LlxuICAgKi9cbiAgQ29udGV4dC5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIHB1c2ggKHZpZXcpIHtcbiAgICByZXR1cm4gbmV3IENvbnRleHQodmlldywgdGhpcyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBnaXZlbiBuYW1lIGluIHRoaXMgY29udGV4dCwgdHJhdmVyc2luZ1xuICAgKiB1cCB0aGUgY29udGV4dCBoaWVyYXJjaHkgaWYgdGhlIHZhbHVlIGlzIGFic2VudCBpbiB0aGlzIGNvbnRleHQncyB2aWV3LlxuICAgKi9cbiAgQ29udGV4dC5wcm90b3R5cGUubG9va3VwID0gZnVuY3Rpb24gbG9va3VwIChuYW1lKSB7XG4gICAgdmFyIGNhY2hlID0gdGhpcy5jYWNoZTtcblxuICAgIHZhciB2YWx1ZTtcbiAgICBpZiAoY2FjaGUuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIHZhbHVlID0gY2FjaGVbbmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcywgbmFtZXMsIGluZGV4LCBsb29rdXBIaXQgPSBmYWxzZTtcblxuICAgICAgd2hpbGUgKGNvbnRleHQpIHtcbiAgICAgICAgaWYgKG5hbWUuaW5kZXhPZignLicpID4gMCkge1xuICAgICAgICAgIHZhbHVlID0gY29udGV4dC52aWV3O1xuICAgICAgICAgIG5hbWVzID0gbmFtZS5zcGxpdCgnLicpO1xuICAgICAgICAgIGluZGV4ID0gMDtcblxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIFVzaW5nIHRoZSBkb3Qgbm90aW9uIHBhdGggaW4gYG5hbWVgLCB3ZSBkZXNjZW5kIHRocm91Z2ggdGhlXG4gICAgICAgICAgICogbmVzdGVkIG9iamVjdHMuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBUbyBiZSBjZXJ0YWluIHRoYXQgdGhlIGxvb2t1cCBoYXMgYmVlbiBzdWNjZXNzZnVsLCB3ZSBoYXZlIHRvXG4gICAgICAgICAgICogY2hlY2sgaWYgdGhlIGxhc3Qgb2JqZWN0IGluIHRoZSBwYXRoIGFjdHVhbGx5IGhhcyB0aGUgcHJvcGVydHlcbiAgICAgICAgICAgKiB3ZSBhcmUgbG9va2luZyBmb3IuIFdlIHN0b3JlIHRoZSByZXN1bHQgaW4gYGxvb2t1cEhpdGAuXG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiBUaGlzIGlzIHNwZWNpYWxseSBuZWNlc3NhcnkgZm9yIHdoZW4gdGhlIHZhbHVlIGhhcyBiZWVuIHNldCB0b1xuICAgICAgICAgICAqIGB1bmRlZmluZWRgIGFuZCB3ZSB3YW50IHRvIGF2b2lkIGxvb2tpbmcgdXAgcGFyZW50IGNvbnRleHRzLlxuICAgICAgICAgICAqKi9cbiAgICAgICAgICB3aGlsZSAodmFsdWUgIT0gbnVsbCAmJiBpbmRleCA8IG5hbWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSBuYW1lcy5sZW5ndGggLSAxKVxuICAgICAgICAgICAgICBsb29rdXBIaXQgPSBoYXNQcm9wZXJ0eSh2YWx1ZSwgbmFtZXNbaW5kZXhdKTtcblxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVtuYW1lc1tpbmRleCsrXV07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlID0gY29udGV4dC52aWV3W25hbWVdO1xuICAgICAgICAgIGxvb2t1cEhpdCA9IGhhc1Byb3BlcnR5KGNvbnRleHQudmlldywgbmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobG9va3VwSGl0KVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnBhcmVudDtcbiAgICAgIH1cblxuICAgICAgY2FjaGVbbmFtZV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpXG4gICAgICB2YWx1ZSA9IHZhbHVlLmNhbGwodGhpcy52aWV3KTtcblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcblxuICAvKipcbiAgICogQSBXcml0ZXIga25vd3MgaG93IHRvIHRha2UgYSBzdHJlYW0gb2YgdG9rZW5zIGFuZCByZW5kZXIgdGhlbSB0byBhXG4gICAqIHN0cmluZywgZ2l2ZW4gYSBjb250ZXh0LiBJdCBhbHNvIG1haW50YWlucyBhIGNhY2hlIG9mIHRlbXBsYXRlcyB0b1xuICAgKiBhdm9pZCB0aGUgbmVlZCB0byBwYXJzZSB0aGUgc2FtZSB0ZW1wbGF0ZSB0d2ljZS5cbiAgICovXG4gIGZ1bmN0aW9uIFdyaXRlciAoKSB7XG4gICAgdGhpcy5jYWNoZSA9IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBhbGwgY2FjaGVkIHRlbXBsYXRlcyBpbiB0aGlzIHdyaXRlci5cbiAgICovXG4gIFdyaXRlci5wcm90b3R5cGUuY2xlYXJDYWNoZSA9IGZ1bmN0aW9uIGNsZWFyQ2FjaGUgKCkge1xuICAgIHRoaXMuY2FjaGUgPSB7fTtcbiAgfTtcblxuICAvKipcbiAgICogUGFyc2VzIGFuZCBjYWNoZXMgdGhlIGdpdmVuIGB0ZW1wbGF0ZWAgYW5kIHJldHVybnMgdGhlIGFycmF5IG9mIHRva2Vuc1xuICAgKiB0aGF0IGlzIGdlbmVyYXRlZCBmcm9tIHRoZSBwYXJzZS5cbiAgICovXG4gIFdyaXRlci5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiBwYXJzZSAodGVtcGxhdGUsIHRhZ3MpIHtcbiAgICB2YXIgY2FjaGUgPSB0aGlzLmNhY2hlO1xuICAgIHZhciB0b2tlbnMgPSBjYWNoZVt0ZW1wbGF0ZV07XG5cbiAgICBpZiAodG9rZW5zID09IG51bGwpXG4gICAgICB0b2tlbnMgPSBjYWNoZVt0ZW1wbGF0ZV0gPSBwYXJzZVRlbXBsYXRlKHRlbXBsYXRlLCB0YWdzKTtcblxuICAgIHJldHVybiB0b2tlbnM7XG4gIH07XG5cbiAgLyoqXG4gICAqIEhpZ2gtbGV2ZWwgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byByZW5kZXIgdGhlIGdpdmVuIGB0ZW1wbGF0ZWAgd2l0aFxuICAgKiB0aGUgZ2l2ZW4gYHZpZXdgLlxuICAgKlxuICAgKiBUaGUgb3B0aW9uYWwgYHBhcnRpYWxzYCBhcmd1bWVudCBtYXkgYmUgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlXG4gICAqIG5hbWVzIGFuZCB0ZW1wbGF0ZXMgb2YgcGFydGlhbHMgdGhhdCBhcmUgdXNlZCBpbiB0aGUgdGVtcGxhdGUuIEl0IG1heVxuICAgKiBhbHNvIGJlIGEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHRvIGxvYWQgcGFydGlhbCB0ZW1wbGF0ZXMgb24gdGhlIGZseVxuICAgKiB0aGF0IHRha2VzIGEgc2luZ2xlIGFyZ3VtZW50OiB0aGUgbmFtZSBvZiB0aGUgcGFydGlhbC5cbiAgICovXG4gIFdyaXRlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyICh0ZW1wbGF0ZSwgdmlldywgcGFydGlhbHMpIHtcbiAgICB2YXIgdG9rZW5zID0gdGhpcy5wYXJzZSh0ZW1wbGF0ZSk7XG4gICAgdmFyIGNvbnRleHQgPSAodmlldyBpbnN0YW5jZW9mIENvbnRleHQpID8gdmlldyA6IG5ldyBDb250ZXh0KHZpZXcpO1xuICAgIHJldHVybiB0aGlzLnJlbmRlclRva2Vucyh0b2tlbnMsIGNvbnRleHQsIHBhcnRpYWxzLCB0ZW1wbGF0ZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIExvdy1sZXZlbCBtZXRob2QgdGhhdCByZW5kZXJzIHRoZSBnaXZlbiBhcnJheSBvZiBgdG9rZW5zYCB1c2luZ1xuICAgKiB0aGUgZ2l2ZW4gYGNvbnRleHRgIGFuZCBgcGFydGlhbHNgLlxuICAgKlxuICAgKiBOb3RlOiBUaGUgYG9yaWdpbmFsVGVtcGxhdGVgIGlzIG9ubHkgZXZlciB1c2VkIHRvIGV4dHJhY3QgdGhlIHBvcnRpb25cbiAgICogb2YgdGhlIG9yaWdpbmFsIHRlbXBsYXRlIHRoYXQgd2FzIGNvbnRhaW5lZCBpbiBhIGhpZ2hlci1vcmRlciBzZWN0aW9uLlxuICAgKiBJZiB0aGUgdGVtcGxhdGUgZG9lc24ndCB1c2UgaGlnaGVyLW9yZGVyIHNlY3Rpb25zLCB0aGlzIGFyZ3VtZW50IG1heVxuICAgKiBiZSBvbWl0dGVkLlxuICAgKi9cbiAgV3JpdGVyLnByb3RvdHlwZS5yZW5kZXJUb2tlbnMgPSBmdW5jdGlvbiByZW5kZXJUb2tlbnMgKHRva2VucywgY29udGV4dCwgcGFydGlhbHMsIG9yaWdpbmFsVGVtcGxhdGUpIHtcbiAgICB2YXIgYnVmZmVyID0gJyc7XG5cbiAgICB2YXIgdG9rZW4sIHN5bWJvbCwgdmFsdWU7XG4gICAgZm9yICh2YXIgaSA9IDAsIG51bVRva2VucyA9IHRva2Vucy5sZW5ndGg7IGkgPCBudW1Ub2tlbnM7ICsraSkge1xuICAgICAgdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICB0b2tlbiA9IHRva2Vuc1tpXTtcbiAgICAgIHN5bWJvbCA9IHRva2VuWzBdO1xuXG4gICAgICBpZiAoc3ltYm9sID09PSAnIycpIHZhbHVlID0gdGhpcy5yZW5kZXJTZWN0aW9uKHRva2VuLCBjb250ZXh0LCBwYXJ0aWFscywgb3JpZ2luYWxUZW1wbGF0ZSk7XG4gICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICdeJykgdmFsdWUgPSB0aGlzLnJlbmRlckludmVydGVkKHRva2VuLCBjb250ZXh0LCBwYXJ0aWFscywgb3JpZ2luYWxUZW1wbGF0ZSk7XG4gICAgICBlbHNlIGlmIChzeW1ib2wgPT09ICc+JykgdmFsdWUgPSB0aGlzLnJlbmRlclBhcnRpYWwodG9rZW4sIGNvbnRleHQsIHBhcnRpYWxzLCBvcmlnaW5hbFRlbXBsYXRlKTtcbiAgICAgIGVsc2UgaWYgKHN5bWJvbCA9PT0gJyYnKSB2YWx1ZSA9IHRoaXMudW5lc2NhcGVkVmFsdWUodG9rZW4sIGNvbnRleHQpO1xuICAgICAgZWxzZSBpZiAoc3ltYm9sID09PSAnbmFtZScpIHZhbHVlID0gdGhpcy5lc2NhcGVkVmFsdWUodG9rZW4sIGNvbnRleHQpO1xuICAgICAgZWxzZSBpZiAoc3ltYm9sID09PSAndGV4dCcpIHZhbHVlID0gdGhpcy5yYXdWYWx1ZSh0b2tlbik7XG5cbiAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBidWZmZXIgKz0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlcjtcbiAgfTtcblxuICBXcml0ZXIucHJvdG90eXBlLnJlbmRlclNlY3Rpb24gPSBmdW5jdGlvbiByZW5kZXJTZWN0aW9uICh0b2tlbiwgY29udGV4dCwgcGFydGlhbHMsIG9yaWdpbmFsVGVtcGxhdGUpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGJ1ZmZlciA9ICcnO1xuICAgIHZhciB2YWx1ZSA9IGNvbnRleHQubG9va3VwKHRva2VuWzFdKTtcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZW5kZXIgYW4gYXJiaXRyYXJ5IHRlbXBsYXRlXG4gICAgLy8gaW4gdGhlIGN1cnJlbnQgY29udGV4dCBieSBoaWdoZXItb3JkZXIgc2VjdGlvbnMuXG4gICAgZnVuY3Rpb24gc3ViUmVuZGVyICh0ZW1wbGF0ZSkge1xuICAgICAgcmV0dXJuIHNlbGYucmVuZGVyKHRlbXBsYXRlLCBjb250ZXh0LCBwYXJ0aWFscyk7XG4gICAgfVxuXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuXG4gICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBmb3IgKHZhciBqID0gMCwgdmFsdWVMZW5ndGggPSB2YWx1ZS5sZW5ndGg7IGogPCB2YWx1ZUxlbmd0aDsgKytqKSB7XG4gICAgICAgIGJ1ZmZlciArPSB0aGlzLnJlbmRlclRva2Vucyh0b2tlbls0XSwgY29udGV4dC5wdXNoKHZhbHVlW2pdKSwgcGFydGlhbHMsIG9yaWdpbmFsVGVtcGxhdGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGJ1ZmZlciArPSB0aGlzLnJlbmRlclRva2Vucyh0b2tlbls0XSwgY29udGV4dC5wdXNoKHZhbHVlKSwgcGFydGlhbHMsIG9yaWdpbmFsVGVtcGxhdGUpO1xuICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3JpZ2luYWxUZW1wbGF0ZSAhPT0gJ3N0cmluZycpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHVzZSBoaWdoZXItb3JkZXIgc2VjdGlvbnMgd2l0aG91dCB0aGUgb3JpZ2luYWwgdGVtcGxhdGUnKTtcblxuICAgICAgLy8gRXh0cmFjdCB0aGUgcG9ydGlvbiBvZiB0aGUgb3JpZ2luYWwgdGVtcGxhdGUgdGhhdCB0aGUgc2VjdGlvbiBjb250YWlucy5cbiAgICAgIHZhbHVlID0gdmFsdWUuY2FsbChjb250ZXh0LnZpZXcsIG9yaWdpbmFsVGVtcGxhdGUuc2xpY2UodG9rZW5bM10sIHRva2VuWzVdKSwgc3ViUmVuZGVyKTtcblxuICAgICAgaWYgKHZhbHVlICE9IG51bGwpXG4gICAgICAgIGJ1ZmZlciArPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmZmVyICs9IHRoaXMucmVuZGVyVG9rZW5zKHRva2VuWzRdLCBjb250ZXh0LCBwYXJ0aWFscywgb3JpZ2luYWxUZW1wbGF0ZSk7XG4gICAgfVxuICAgIHJldHVybiBidWZmZXI7XG4gIH07XG5cbiAgV3JpdGVyLnByb3RvdHlwZS5yZW5kZXJJbnZlcnRlZCA9IGZ1bmN0aW9uIHJlbmRlckludmVydGVkICh0b2tlbiwgY29udGV4dCwgcGFydGlhbHMsIG9yaWdpbmFsVGVtcGxhdGUpIHtcbiAgICB2YXIgdmFsdWUgPSBjb250ZXh0Lmxvb2t1cCh0b2tlblsxXSk7XG5cbiAgICAvLyBVc2UgSmF2YVNjcmlwdCdzIGRlZmluaXRpb24gb2YgZmFsc3kuIEluY2x1ZGUgZW1wdHkgYXJyYXlzLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vamFubC9tdXN0YWNoZS5qcy9pc3N1ZXMvMTg2XG4gICAgaWYgKCF2YWx1ZSB8fCAoaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSlcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlclRva2Vucyh0b2tlbls0XSwgY29udGV4dCwgcGFydGlhbHMsIG9yaWdpbmFsVGVtcGxhdGUpO1xuICB9O1xuXG4gIFdyaXRlci5wcm90b3R5cGUucmVuZGVyUGFydGlhbCA9IGZ1bmN0aW9uIHJlbmRlclBhcnRpYWwgKHRva2VuLCBjb250ZXh0LCBwYXJ0aWFscykge1xuICAgIGlmICghcGFydGlhbHMpIHJldHVybjtcblxuICAgIHZhciB2YWx1ZSA9IGlzRnVuY3Rpb24ocGFydGlhbHMpID8gcGFydGlhbHModG9rZW5bMV0pIDogcGFydGlhbHNbdG9rZW5bMV1dO1xuICAgIGlmICh2YWx1ZSAhPSBudWxsKVxuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyVG9rZW5zKHRoaXMucGFyc2UodmFsdWUpLCBjb250ZXh0LCBwYXJ0aWFscywgdmFsdWUpO1xuICB9O1xuXG4gIFdyaXRlci5wcm90b3R5cGUudW5lc2NhcGVkVmFsdWUgPSBmdW5jdGlvbiB1bmVzY2FwZWRWYWx1ZSAodG9rZW4sIGNvbnRleHQpIHtcbiAgICB2YXIgdmFsdWUgPSBjb250ZXh0Lmxvb2t1cCh0b2tlblsxXSk7XG4gICAgaWYgKHZhbHVlICE9IG51bGwpXG4gICAgICByZXR1cm4gdmFsdWU7XG4gIH07XG5cbiAgV3JpdGVyLnByb3RvdHlwZS5lc2NhcGVkVmFsdWUgPSBmdW5jdGlvbiBlc2NhcGVkVmFsdWUgKHRva2VuLCBjb250ZXh0KSB7XG4gICAgdmFyIHZhbHVlID0gY29udGV4dC5sb29rdXAodG9rZW5bMV0pO1xuICAgIGlmICh2YWx1ZSAhPSBudWxsKVxuICAgICAgcmV0dXJuIG11c3RhY2hlLmVzY2FwZSh2YWx1ZSk7XG4gIH07XG5cbiAgV3JpdGVyLnByb3RvdHlwZS5yYXdWYWx1ZSA9IGZ1bmN0aW9uIHJhd1ZhbHVlICh0b2tlbikge1xuICAgIHJldHVybiB0b2tlblsxXTtcbiAgfTtcblxuICBtdXN0YWNoZS5uYW1lID0gJ211c3RhY2hlLmpzJztcbiAgbXVzdGFjaGUudmVyc2lvbiA9ICcyLjMuMic7XG4gIG11c3RhY2hlLnRhZ3MgPSBbICd7eycsICd9fScgXTtcblxuICAvLyBBbGwgaGlnaC1sZXZlbCBtdXN0YWNoZS4qIGZ1bmN0aW9ucyB1c2UgdGhpcyB3cml0ZXIuXG4gIHZhciBkZWZhdWx0V3JpdGVyID0gbmV3IFdyaXRlcigpO1xuXG4gIC8qKlxuICAgKiBDbGVhcnMgYWxsIGNhY2hlZCB0ZW1wbGF0ZXMgaW4gdGhlIGRlZmF1bHQgd3JpdGVyLlxuICAgKi9cbiAgbXVzdGFjaGUuY2xlYXJDYWNoZSA9IGZ1bmN0aW9uIGNsZWFyQ2FjaGUgKCkge1xuICAgIHJldHVybiBkZWZhdWx0V3JpdGVyLmNsZWFyQ2FjaGUoKTtcbiAgfTtcblxuICAvKipcbiAgICogUGFyc2VzIGFuZCBjYWNoZXMgdGhlIGdpdmVuIHRlbXBsYXRlIGluIHRoZSBkZWZhdWx0IHdyaXRlciBhbmQgcmV0dXJucyB0aGVcbiAgICogYXJyYXkgb2YgdG9rZW5zIGl0IGNvbnRhaW5zLiBEb2luZyB0aGlzIGFoZWFkIG9mIHRpbWUgYXZvaWRzIHRoZSBuZWVkIHRvXG4gICAqIHBhcnNlIHRlbXBsYXRlcyBvbiB0aGUgZmx5IGFzIHRoZXkgYXJlIHJlbmRlcmVkLlxuICAgKi9cbiAgbXVzdGFjaGUucGFyc2UgPSBmdW5jdGlvbiBwYXJzZSAodGVtcGxhdGUsIHRhZ3MpIHtcbiAgICByZXR1cm4gZGVmYXVsdFdyaXRlci5wYXJzZSh0ZW1wbGF0ZSwgdGFncyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGB0ZW1wbGF0ZWAgd2l0aCB0aGUgZ2l2ZW4gYHZpZXdgIGFuZCBgcGFydGlhbHNgIHVzaW5nIHRoZVxuICAgKiBkZWZhdWx0IHdyaXRlci5cbiAgICovXG4gIG11c3RhY2hlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlciAodGVtcGxhdGUsIHZpZXcsIHBhcnRpYWxzKSB7XG4gICAgaWYgKHR5cGVvZiB0ZW1wbGF0ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgdGVtcGxhdGUhIFRlbXBsYXRlIHNob3VsZCBiZSBhIFwic3RyaW5nXCIgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdidXQgXCInICsgdHlwZVN0cih0ZW1wbGF0ZSkgKyAnXCIgd2FzIGdpdmVuIGFzIHRoZSBmaXJzdCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyZ3VtZW50IGZvciBtdXN0YWNoZSNyZW5kZXIodGVtcGxhdGUsIHZpZXcsIHBhcnRpYWxzKScpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWZhdWx0V3JpdGVyLnJlbmRlcih0ZW1wbGF0ZSwgdmlldywgcGFydGlhbHMpO1xuICB9O1xuXG4gIC8vIFRoaXMgaXMgaGVyZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCAwLjQueC4sXG4gIC8qZXNsaW50LWRpc2FibGUgKi8gLy8gZXNsaW50IHdhbnRzIGNhbWVsIGNhc2VkIGZ1bmN0aW9uIG5hbWVcbiAgbXVzdGFjaGUudG9faHRtbCA9IGZ1bmN0aW9uIHRvX2h0bWwgKHRlbXBsYXRlLCB2aWV3LCBwYXJ0aWFscywgc2VuZCkge1xuICAgIC8qZXNsaW50LWVuYWJsZSovXG5cbiAgICB2YXIgcmVzdWx0ID0gbXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLCB2aWV3LCBwYXJ0aWFscyk7XG5cbiAgICBpZiAoaXNGdW5jdGlvbihzZW5kKSkge1xuICAgICAgc2VuZChyZXN1bHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfTtcblxuICAvLyBFeHBvcnQgdGhlIGVzY2FwaW5nIGZ1bmN0aW9uIHNvIHRoYXQgdGhlIHVzZXIgbWF5IG92ZXJyaWRlIGl0LlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2phbmwvbXVzdGFjaGUuanMvaXNzdWVzLzI0NFxuICBtdXN0YWNoZS5lc2NhcGUgPSBlc2NhcGVIdG1sO1xuXG4gIC8vIEV4cG9ydCB0aGVzZSBtYWlubHkgZm9yIHRlc3RpbmcsIGJ1dCBhbHNvIGZvciBhZHZhbmNlZCB1c2FnZS5cbiAgbXVzdGFjaGUuU2Nhbm5lciA9IFNjYW5uZXI7XG4gIG11c3RhY2hlLkNvbnRleHQgPSBDb250ZXh0O1xuICBtdXN0YWNoZS5Xcml0ZXIgPSBXcml0ZXI7XG5cbiAgcmV0dXJuIG11c3RhY2hlO1xufSkpO1xuIiwiLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG5cbid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCkge1xuXHR0cnkge1xuXHRcdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcblx0XHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXG5cdFx0dGVzdDFbNV0gPSAnZGUnO1xuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDIgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcblx0XHRcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcblx0XHR9XG5cdFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcblx0XHRcdHJldHVybiB0ZXN0MltuXTtcblx0XHR9KTtcblx0XHRpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1Njc4OScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QzID0ge307XG5cdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XG5cdFx0XHR0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyO1xuXHRcdH0pO1xuXHRcdGlmIChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PVxuXHRcdFx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgc3ltYm9scztcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdHRvW2tleV0gPSBmcm9tW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIi8qISBucG0uaW0vb2JqZWN0LWZpdC1pbWFnZXMgMy4yLjQgKi9cbid1c2Ugc3RyaWN0JztcblxudmFyIE9GSSA9ICdiZnJlZC1pdDpvYmplY3QtZml0LWltYWdlcyc7XG52YXIgcHJvcFJlZ2V4ID0gLyhvYmplY3QtZml0fG9iamVjdC1wb3NpdGlvbilcXHMqOlxccyooWy0uXFx3XFxzJV0rKS9nO1xudmFyIHRlc3RJbWcgPSB0eXBlb2YgSW1hZ2UgPT09ICd1bmRlZmluZWQnID8ge3N0eWxlOiB7J29iamVjdC1wb3NpdGlvbic6IDF9fSA6IG5ldyBJbWFnZSgpO1xudmFyIHN1cHBvcnRzT2JqZWN0Rml0ID0gJ29iamVjdC1maXQnIGluIHRlc3RJbWcuc3R5bGU7XG52YXIgc3VwcG9ydHNPYmplY3RQb3NpdGlvbiA9ICdvYmplY3QtcG9zaXRpb24nIGluIHRlc3RJbWcuc3R5bGU7XG52YXIgc3VwcG9ydHNPRkkgPSAnYmFja2dyb3VuZC1zaXplJyBpbiB0ZXN0SW1nLnN0eWxlO1xudmFyIHN1cHBvcnRzQ3VycmVudFNyYyA9IHR5cGVvZiB0ZXN0SW1nLmN1cnJlbnRTcmMgPT09ICdzdHJpbmcnO1xudmFyIG5hdGl2ZUdldEF0dHJpYnV0ZSA9IHRlc3RJbWcuZ2V0QXR0cmlidXRlO1xudmFyIG5hdGl2ZVNldEF0dHJpYnV0ZSA9IHRlc3RJbWcuc2V0QXR0cmlidXRlO1xudmFyIGF1dG9Nb2RlRW5hYmxlZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBjcmVhdGVQbGFjZWhvbGRlcih3LCBoKSB7XG5cdHJldHVybiAoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9J1wiICsgdyArIFwiJyBoZWlnaHQ9J1wiICsgaCArIFwiJyUzRSUzQy9zdmclM0VcIik7XG59XG5cbmZ1bmN0aW9uIHBvbHlmaWxsQ3VycmVudFNyYyhlbCkge1xuXHRpZiAoZWwuc3Jjc2V0ICYmICFzdXBwb3J0c0N1cnJlbnRTcmMgJiYgd2luZG93LnBpY3R1cmVmaWxsKSB7XG5cdFx0dmFyIHBmID0gd2luZG93LnBpY3R1cmVmaWxsLl87XG5cdFx0Ly8gcGFyc2Ugc3Jjc2V0IHdpdGggcGljdHVyZWZpbGwgd2hlcmUgY3VycmVudFNyYyBpc24ndCBhdmFpbGFibGVcblx0XHRpZiAoIWVsW3BmLm5zXSB8fCAhZWxbcGYubnNdLmV2YWxlZCkge1xuXHRcdFx0Ly8gZm9yY2Ugc3luY2hyb25vdXMgc3Jjc2V0IHBhcnNpbmdcblx0XHRcdHBmLmZpbGxJbWcoZWwsIHtyZXNlbGVjdDogdHJ1ZX0pO1xuXHRcdH1cblxuXHRcdGlmICghZWxbcGYubnNdLmN1clNyYykge1xuXHRcdFx0Ly8gZm9yY2UgcGljdHVyZWZpbGwgdG8gcGFyc2Ugc3Jjc2V0XG5cdFx0XHRlbFtwZi5uc10uc3VwcG9ydGVkID0gZmFsc2U7XG5cdFx0XHRwZi5maWxsSW1nKGVsLCB7cmVzZWxlY3Q6IHRydWV9KTtcblx0XHR9XG5cblx0XHQvLyByZXRyaWV2ZSBwYXJzZWQgY3VycmVudFNyYywgaWYgYW55XG5cdFx0ZWwuY3VycmVudFNyYyA9IGVsW3BmLm5zXS5jdXJTcmMgfHwgZWwuc3JjO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldFN0eWxlKGVsKSB7XG5cdHZhciBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWwpLmZvbnRGYW1pbHk7XG5cdHZhciBwYXJzZWQ7XG5cdHZhciBwcm9wcyA9IHt9O1xuXHR3aGlsZSAoKHBhcnNlZCA9IHByb3BSZWdleC5leGVjKHN0eWxlKSkgIT09IG51bGwpIHtcblx0XHRwcm9wc1twYXJzZWRbMV1dID0gcGFyc2VkWzJdO1xuXHR9XG5cdHJldHVybiBwcm9wcztcbn1cblxuZnVuY3Rpb24gc2V0UGxhY2Vob2xkZXIoaW1nLCB3aWR0aCwgaGVpZ2h0KSB7XG5cdC8vIERlZmF1bHQ6IGZpbGwgd2lkdGgsIG5vIGhlaWdodFxuXHR2YXIgcGxhY2Vob2xkZXIgPSBjcmVhdGVQbGFjZWhvbGRlcih3aWR0aCB8fCAxLCBoZWlnaHQgfHwgMCk7XG5cblx0Ly8gT25seSBzZXQgcGxhY2Vob2xkZXIgaWYgaXQncyBkaWZmZXJlbnRcblx0aWYgKG5hdGl2ZUdldEF0dHJpYnV0ZS5jYWxsKGltZywgJ3NyYycpICE9PSBwbGFjZWhvbGRlcikge1xuXHRcdG5hdGl2ZVNldEF0dHJpYnV0ZS5jYWxsKGltZywgJ3NyYycsIHBsYWNlaG9sZGVyKTtcblx0fVxufVxuXG5mdW5jdGlvbiBvbkltYWdlUmVhZHkoaW1nLCBjYWxsYmFjaykge1xuXHQvLyBuYXR1cmFsV2lkdGggaXMgb25seSBhdmFpbGFibGUgd2hlbiB0aGUgaW1hZ2UgaGVhZGVycyBhcmUgbG9hZGVkLFxuXHQvLyB0aGlzIGxvb3Agd2lsbCBwb2xsIGl0IGV2ZXJ5IDEwMG1zLlxuXHRpZiAoaW1nLm5hdHVyYWxXaWR0aCkge1xuXHRcdGNhbGxiYWNrKGltZyk7XG5cdH0gZWxzZSB7XG5cdFx0c2V0VGltZW91dChvbkltYWdlUmVhZHksIDEwMCwgaW1nLCBjYWxsYmFjayk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZml4T25lKGVsKSB7XG5cdHZhciBzdHlsZSA9IGdldFN0eWxlKGVsKTtcblx0dmFyIG9maSA9IGVsW09GSV07XG5cdHN0eWxlWydvYmplY3QtZml0J10gPSBzdHlsZVsnb2JqZWN0LWZpdCddIHx8ICdmaWxsJzsgLy8gZGVmYXVsdCB2YWx1ZVxuXG5cdC8vIEF2b2lkIHJ1bm5pbmcgd2hlcmUgdW5uZWNlc3NhcnksIHVubGVzcyBPRkkgaGFkIGFscmVhZHkgZG9uZSBpdHMgZGVlZFxuXHRpZiAoIW9maS5pbWcpIHtcblx0XHQvLyBmaWxsIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIHNvIG5vIGFjdGlvbiBpcyBuZWNlc3Nhcnlcblx0XHRpZiAoc3R5bGVbJ29iamVjdC1maXQnXSA9PT0gJ2ZpbGwnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gV2hlcmUgb2JqZWN0LWZpdCBpcyBzdXBwb3J0ZWQgYW5kIG9iamVjdC1wb3NpdGlvbiBpc24ndCAoU2FmYXJpIDwgMTApXG5cdFx0aWYgKFxuXHRcdFx0IW9maS5za2lwVGVzdCAmJiAvLyB1bmxlc3MgdXNlciB3YW50cyB0byBhcHBseSByZWdhcmRsZXNzIG9mIGJyb3dzZXIgc3VwcG9ydFxuXHRcdFx0c3VwcG9ydHNPYmplY3RGaXQgJiYgLy8gaWYgYnJvd3NlciBhbHJlYWR5IHN1cHBvcnRzIG9iamVjdC1maXRcblx0XHRcdCFzdHlsZVsnb2JqZWN0LXBvc2l0aW9uJ10gLy8gdW5sZXNzIG9iamVjdC1wb3NpdGlvbiBpcyB1c2VkXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHR9XG5cblx0Ly8ga2VlcCBhIGNsb25lIGluIG1lbW9yeSB3aGlsZSByZXNldHRpbmcgdGhlIG9yaWdpbmFsIHRvIGEgYmxhbmtcblx0aWYgKCFvZmkuaW1nKSB7XG5cdFx0b2ZpLmltZyA9IG5ldyBJbWFnZShlbC53aWR0aCwgZWwuaGVpZ2h0KTtcblx0XHRvZmkuaW1nLnNyY3NldCA9IG5hdGl2ZUdldEF0dHJpYnV0ZS5jYWxsKGVsLCBcImRhdGEtb2ZpLXNyY3NldFwiKSB8fCBlbC5zcmNzZXQ7XG5cdFx0b2ZpLmltZy5zcmMgPSBuYXRpdmVHZXRBdHRyaWJ1dGUuY2FsbChlbCwgXCJkYXRhLW9maS1zcmNcIikgfHwgZWwuc3JjO1xuXG5cdFx0Ly8gcHJlc2VydmUgZm9yIGFueSBmdXR1cmUgY2xvbmVOb2RlIGNhbGxzXG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL2JmcmVkLWl0L29iamVjdC1maXQtaW1hZ2VzL2lzc3Vlcy81M1xuXHRcdG5hdGl2ZVNldEF0dHJpYnV0ZS5jYWxsKGVsLCBcImRhdGEtb2ZpLXNyY1wiLCBlbC5zcmMpO1xuXHRcdGlmIChlbC5zcmNzZXQpIHtcblx0XHRcdG5hdGl2ZVNldEF0dHJpYnV0ZS5jYWxsKGVsLCBcImRhdGEtb2ZpLXNyY3NldFwiLCBlbC5zcmNzZXQpO1xuXHRcdH1cblxuXHRcdHNldFBsYWNlaG9sZGVyKGVsLCBlbC5uYXR1cmFsV2lkdGggfHwgZWwud2lkdGgsIGVsLm5hdHVyYWxIZWlnaHQgfHwgZWwuaGVpZ2h0KTtcblxuXHRcdC8vIHJlbW92ZSBzcmNzZXQgYmVjYXVzZSBpdCBvdmVycmlkZXMgc3JjXG5cdFx0aWYgKGVsLnNyY3NldCkge1xuXHRcdFx0ZWwuc3Jjc2V0ID0gJyc7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRrZWVwU3JjVXNhYmxlKGVsKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdGlmICh3aW5kb3cuY29uc29sZSkge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oJ2h0dHBzOi8vYml0Lmx5L29maS1vbGQtYnJvd3NlcicpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHBvbHlmaWxsQ3VycmVudFNyYyhvZmkuaW1nKTtcblxuXHRlbC5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBcInVybChcXFwiXCIgKyAoKG9maS5pbWcuY3VycmVudFNyYyB8fCBvZmkuaW1nLnNyYykucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpKSArIFwiXFxcIilcIjtcblx0ZWwuc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uID0gc3R5bGVbJ29iamVjdC1wb3NpdGlvbiddIHx8ICdjZW50ZXInO1xuXHRlbC5zdHlsZS5iYWNrZ3JvdW5kUmVwZWF0ID0gJ25vLXJlcGVhdCc7XG5cdGVsLnN0eWxlLmJhY2tncm91bmRPcmlnaW4gPSAnY29udGVudC1ib3gnO1xuXG5cdGlmICgvc2NhbGUtZG93bi8udGVzdChzdHlsZVsnb2JqZWN0LWZpdCddKSkge1xuXHRcdG9uSW1hZ2VSZWFkeShvZmkuaW1nLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAob2ZpLmltZy5uYXR1cmFsV2lkdGggPiBlbC53aWR0aCB8fCBvZmkuaW1nLm5hdHVyYWxIZWlnaHQgPiBlbC5oZWlnaHQpIHtcblx0XHRcdFx0ZWwuc3R5bGUuYmFja2dyb3VuZFNpemUgPSAnY29udGFpbic7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbC5zdHlsZS5iYWNrZ3JvdW5kU2l6ZSA9ICdhdXRvJztcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRlbC5zdHlsZS5iYWNrZ3JvdW5kU2l6ZSA9IHN0eWxlWydvYmplY3QtZml0J10ucmVwbGFjZSgnbm9uZScsICdhdXRvJykucmVwbGFjZSgnZmlsbCcsICcxMDAlIDEwMCUnKTtcblx0fVxuXG5cdG9uSW1hZ2VSZWFkeShvZmkuaW1nLCBmdW5jdGlvbiAoaW1nKSB7XG5cdFx0c2V0UGxhY2Vob2xkZXIoZWwsIGltZy5uYXR1cmFsV2lkdGgsIGltZy5uYXR1cmFsSGVpZ2h0KTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGtlZXBTcmNVc2FibGUoZWwpIHtcblx0dmFyIGRlc2NyaXB0b3JzID0ge1xuXHRcdGdldDogZnVuY3Rpb24gZ2V0KHByb3ApIHtcblx0XHRcdHJldHVybiBlbFtPRkldLmltZ1twcm9wID8gcHJvcCA6ICdzcmMnXTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gc2V0KHZhbHVlLCBwcm9wKSB7XG5cdFx0XHRlbFtPRkldLmltZ1twcm9wID8gcHJvcCA6ICdzcmMnXSA9IHZhbHVlO1xuXHRcdFx0bmF0aXZlU2V0QXR0cmlidXRlLmNhbGwoZWwsIChcImRhdGEtb2ZpLVwiICsgcHJvcCksIHZhbHVlKTsgLy8gcHJlc2VydmUgZm9yIGFueSBmdXR1cmUgY2xvbmVOb2RlXG5cdFx0XHRmaXhPbmUoZWwpO1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0fTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGVsLCAnc3JjJywgZGVzY3JpcHRvcnMpO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZWwsICdjdXJyZW50U3JjJywge1xuXHRcdGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVzY3JpcHRvcnMuZ2V0KCdjdXJyZW50U3JjJyk7IH1cblx0fSk7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbCwgJ3NyY3NldCcsIHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlc2NyaXB0b3JzLmdldCgnc3Jjc2V0Jyk7IH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAoc3MpIHsgcmV0dXJuIGRlc2NyaXB0b3JzLnNldChzcywgJ3NyY3NldCcpOyB9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBoaWphY2tBdHRyaWJ1dGVzKCkge1xuXHRmdW5jdGlvbiBnZXRPZmlJbWFnZU1heWJlKGVsLCBuYW1lKSB7XG5cdFx0cmV0dXJuIGVsW09GSV0gJiYgZWxbT0ZJXS5pbWcgJiYgKG5hbWUgPT09ICdzcmMnIHx8IG5hbWUgPT09ICdzcmNzZXQnKSA/IGVsW09GSV0uaW1nIDogZWw7XG5cdH1cblx0aWYgKCFzdXBwb3J0c09iamVjdFBvc2l0aW9uKSB7XG5cdFx0SFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUuZ2V0QXR0cmlidXRlID0gZnVuY3Rpb24gKG5hbWUpIHtcblx0XHRcdHJldHVybiBuYXRpdmVHZXRBdHRyaWJ1dGUuY2FsbChnZXRPZmlJbWFnZU1heWJlKHRoaXMsIG5hbWUpLCBuYW1lKTtcblx0XHR9O1xuXG5cdFx0SFRNTEltYWdlRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gbmF0aXZlU2V0QXR0cmlidXRlLmNhbGwoZ2V0T2ZpSW1hZ2VNYXliZSh0aGlzLCBuYW1lKSwgbmFtZSwgU3RyaW5nKHZhbHVlKSk7XG5cdFx0fTtcblx0fVxufVxuXG5mdW5jdGlvbiBmaXgoaW1ncywgb3B0cykge1xuXHR2YXIgc3RhcnRBdXRvTW9kZSA9ICFhdXRvTW9kZUVuYWJsZWQgJiYgIWltZ3M7XG5cdG9wdHMgPSBvcHRzIHx8IHt9O1xuXHRpbWdzID0gaW1ncyB8fCAnaW1nJztcblxuXHRpZiAoKHN1cHBvcnRzT2JqZWN0UG9zaXRpb24gJiYgIW9wdHMuc2tpcFRlc3QpIHx8ICFzdXBwb3J0c09GSSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIHVzZSBpbWdzIGFzIGEgc2VsZWN0b3Igb3IganVzdCBzZWxlY3QgYWxsIGltYWdlc1xuXHRpZiAoaW1ncyA9PT0gJ2ltZycpIHtcblx0XHRpbWdzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBpbWdzID09PSAnc3RyaW5nJykge1xuXHRcdGltZ3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGltZ3MpO1xuXHR9IGVsc2UgaWYgKCEoJ2xlbmd0aCcgaW4gaW1ncykpIHtcblx0XHRpbWdzID0gW2ltZ3NdO1xuXHR9XG5cblx0Ly8gYXBwbHkgZml4IHRvIGFsbFxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGltZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRpbWdzW2ldW09GSV0gPSBpbWdzW2ldW09GSV0gfHwge1xuXHRcdFx0c2tpcFRlc3Q6IG9wdHMuc2tpcFRlc3Rcblx0XHR9O1xuXHRcdGZpeE9uZShpbWdzW2ldKTtcblx0fVxuXG5cdGlmIChzdGFydEF1dG9Nb2RlKSB7XG5cdFx0ZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24gKGUpIHtcblx0XHRcdGlmIChlLnRhcmdldC50YWdOYW1lID09PSAnSU1HJykge1xuXHRcdFx0XHRmaXgoZS50YXJnZXQsIHtcblx0XHRcdFx0XHRza2lwVGVzdDogb3B0cy5za2lwVGVzdFxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9LCB0cnVlKTtcblx0XHRhdXRvTW9kZUVuYWJsZWQgPSB0cnVlO1xuXHRcdGltZ3MgPSAnaW1nJzsgLy8gcmVzZXQgdG8gYSBnZW5lcmljIHNlbGVjdG9yIGZvciB3YXRjaE1RXG5cdH1cblxuXHQvLyBpZiByZXF1ZXN0ZWQsIHdhdGNoIG1lZGlhIHF1ZXJpZXMgZm9yIG9iamVjdC1maXQgY2hhbmdlXG5cdGlmIChvcHRzLndhdGNoTVEpIHtcblx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZml4LmJpbmQobnVsbCwgaW1ncywge1xuXHRcdFx0c2tpcFRlc3Q6IG9wdHMuc2tpcFRlc3Rcblx0XHR9KSk7XG5cdH1cbn1cblxuZml4LnN1cHBvcnRzT2JqZWN0Rml0ID0gc3VwcG9ydHNPYmplY3RGaXQ7XG5maXguc3VwcG9ydHNPYmplY3RQb3NpdGlvbiA9IHN1cHBvcnRzT2JqZWN0UG9zaXRpb247XG5cbmhpamFja0F0dHJpYnV0ZXMoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmaXg7XG4iLCJBcnJheS5wcm90b3R5cGUuaW5jbHVkZXN8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsXCJpbmNsdWRlc1wiLHt2YWx1ZTpmdW5jdGlvbihyLGUpe2lmKG51bGw9PXRoaXMpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJ0aGlzXCIgaXMgbnVsbCBvciBub3QgZGVmaW5lZCcpO3ZhciB0PU9iamVjdCh0aGlzKSxuPXQubGVuZ3RoPj4+MDtpZigwPT09bilyZXR1cm4hMTtmb3IodmFyIGk9MHxlLG89TWF0aC5tYXgoaT49MD9pOm4tTWF0aC5hYnMoaSksMCk7bzxuOyl7aWYoZnVuY3Rpb24ocixlKXtyZXR1cm4gcj09PWV8fFwibnVtYmVyXCI9PXR5cGVvZiByJiZcIm51bWJlclwiPT10eXBlb2YgZSYmaXNOYU4ocikmJmlzTmFOKGUpfSh0W29dLHIpKXJldHVybiEwO28rK31yZXR1cm4hMX19KTsiLCIvKlxuICAgIHBvcnRhbC12dWVcbiAgICBWZXJzaW9uOiAxLjUuMVxuICAgIExpY2VuY2U6IE1JVFxuICAgIChjKSBUaG9yc3RlbiBMw7xuYm9yZ1xuICAqL1xuICBcbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG5cdHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCd2dWUnKSkgOlxuXHR0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWyd2dWUnXSwgZmFjdG9yeSkgOlxuXHQoZ2xvYmFsLlBvcnRhbFZ1ZSA9IGZhY3RvcnkoZ2xvYmFsLlZ1ZSkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKFZ1ZSkgeyAndXNlIHN0cmljdCc7XG5cblZ1ZSA9IFZ1ZSAmJiBWdWUuaGFzT3duUHJvcGVydHkoJ2RlZmF1bHQnKSA/IFZ1ZVsnZGVmYXVsdCddIDogVnVlO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdHlwZW9mIG9iajtcbn0gOiBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xufTtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59O1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciB0b0NvbnN1bWFibGVBcnJheSA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG5cbiAgICByZXR1cm4gYXJyMjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShhcnIpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBleHRyYWN0QXR0cmlidXRlcyhlbCkge1xuICB2YXIgbWFwID0gZWwuaGFzQXR0cmlidXRlcygpID8gZWwuYXR0cmlidXRlcyA6IFtdO1xuICB2YXIgYXR0cnMgPSB7fTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXAubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgYXR0ciA9IG1hcFtpXTtcbiAgICBpZiAoYXR0ci52YWx1ZSkge1xuICAgICAgYXR0cnNbYXR0ci5uYW1lXSA9IGF0dHIudmFsdWUgPT09ICcnID8gdHJ1ZSA6IGF0dHIudmFsdWU7XG4gICAgfVxuICB9XG4gIHZhciBrbGFzcyA9IHZvaWQgMCxcbiAgICAgIHN0eWxlID0gdm9pZCAwO1xuICBpZiAoYXR0cnMuY2xhc3MpIHtcbiAgICBrbGFzcyA9IGF0dHJzLmNsYXNzO1xuICAgIGRlbGV0ZSBhdHRycy5jbGFzcztcbiAgfVxuICBpZiAoYXR0cnMuc3R5bGUpIHtcbiAgICBzdHlsZSA9IGF0dHJzLnN0eWxlO1xuICAgIGRlbGV0ZSBhdHRycy5zdHlsZTtcbiAgfVxuICB2YXIgZGF0YSA9IHtcbiAgICBhdHRyczogYXR0cnMsXG4gICAgY2xhc3M6IGtsYXNzLFxuICAgIHN0eWxlOiBzdHlsZVxuICB9O1xuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gZnJlZXplKGl0ZW0pIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkgfHwgKHR5cGVvZiBpdGVtID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihpdGVtKSkgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoaXRlbSk7XG4gIH1cbiAgcmV0dXJuIGl0ZW07XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVQYXNzZW5nZXJzKHRyYW5zcG9ydHMpIHtcbiAgdmFyIHNsb3RQcm9wcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgcmV0dXJuIHRyYW5zcG9ydHMucmVkdWNlKGZ1bmN0aW9uIChwYXNzZW5nZXJzLCB0cmFuc3BvcnQpIHtcbiAgICB2YXIgbmV3UGFzc2VuZ2VycyA9IHRyYW5zcG9ydC5wYXNzZW5nZXJzWzBdO1xuICAgIG5ld1Bhc3NlbmdlcnMgPSB0eXBlb2YgbmV3UGFzc2VuZ2VycyA9PT0gJ2Z1bmN0aW9uJyA/IG5ld1Bhc3NlbmdlcnMoc2xvdFByb3BzKSA6IHRyYW5zcG9ydC5wYXNzZW5nZXJzO1xuICAgIHJldHVybiBwYXNzZW5nZXJzLmNvbmNhdChuZXdQYXNzZW5nZXJzKTtcbiAgfSwgW10pO1xufVxuXG5mdW5jdGlvbiBzdGFibGVTb3J0KGFycmF5LCBjb21wYXJlRm4pIHtcbiAgcmV0dXJuIGFycmF5Lm1hcChmdW5jdGlvbiAodiwgaWR4KSB7XG4gICAgcmV0dXJuIFtpZHgsIHZdO1xuICB9KS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIHRoaXMoYVsxXSwgYlsxXSkgfHwgYVswXSAtIGJbMF07XG4gIH0uYmluZChjb21wYXJlRm4pKS5tYXAoZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gY1sxXTtcbiAgfSk7XG59XG5cbnZhciB0cmFuc3BvcnRzID0ge307XG5cbnZhciBXb3JtaG9sZSA9IFZ1ZS5leHRlbmQoe1xuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7IHRyYW5zcG9ydHM6IHRyYW5zcG9ydHMgfTtcbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIG9wZW46IGZ1bmN0aW9uIG9wZW4odHJhbnNwb3J0KSB7XG4gICAgICB2YXIgdG8gPSB0cmFuc3BvcnQudG8sXG4gICAgICAgICAgZnJvbSA9IHRyYW5zcG9ydC5mcm9tLFxuICAgICAgICAgIHBhc3NlbmdlcnMgPSB0cmFuc3BvcnQucGFzc2VuZ2VycztcblxuICAgICAgaWYgKCF0byB8fCAhZnJvbSB8fCAhcGFzc2VuZ2VycykgcmV0dXJuO1xuXG4gICAgICB0cmFuc3BvcnQucGFzc2VuZ2VycyA9IGZyZWV6ZShwYXNzZW5nZXJzKTtcbiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModGhpcy50cmFuc3BvcnRzKTtcbiAgICAgIGlmIChrZXlzLmluZGV4T2YodG8pID09PSAtMSkge1xuICAgICAgICBWdWUuc2V0KHRoaXMudHJhbnNwb3J0cywgdG8sIFtdKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGN1cnJlbnRJbmRleCA9IHRoaXMuZ2V0VHJhbnNwb3J0SW5kZXgodHJhbnNwb3J0KTtcbiAgICAgIC8vIENvcHlpbmcgdGhlIGFycmF5IGhlcmUgc28gdGhhdCB0aGUgUG9ydGFsVGFyZ2V0IGNoYW5nZSBldmVudCB3aWxsIGFjdHVhbGx5IGNvbnRhaW4gdHdvIGRpc3RpbmN0IGFycmF5c1xuICAgICAgdmFyIG5ld1RyYW5zcG9ydHMgPSB0aGlzLnRyYW5zcG9ydHNbdG9dLnNsaWNlKDApO1xuICAgICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgbmV3VHJhbnNwb3J0cy5wdXNoKHRyYW5zcG9ydCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdUcmFuc3BvcnRzW2N1cnJlbnRJbmRleF0gPSB0cmFuc3BvcnQ7XG4gICAgICB9XG4gICAgICB0aGlzLnRyYW5zcG9ydHNbdG9dID0gc3RhYmxlU29ydChuZXdUcmFuc3BvcnRzLCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gYS5vcmRlciAtIGIub3JkZXI7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGNsb3NlOiBmdW5jdGlvbiBjbG9zZSh0cmFuc3BvcnQpIHtcbiAgICAgIHZhciBmb3JjZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gICAgICB2YXIgdG8gPSB0cmFuc3BvcnQudG8sXG4gICAgICAgICAgZnJvbSA9IHRyYW5zcG9ydC5mcm9tO1xuXG4gICAgICBpZiAoIXRvIHx8ICFmcm9tKSByZXR1cm47XG4gICAgICBpZiAoIXRoaXMudHJhbnNwb3J0c1t0b10pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgdGhpcy50cmFuc3BvcnRzW3RvXSA9IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5nZXRUcmFuc3BvcnRJbmRleCh0cmFuc3BvcnQpO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIC8vIENvcHlpbmcgdGhlIGFycmF5IGhlcmUgc28gdGhhdCB0aGUgUG9ydGFsVGFyZ2V0IGNoYW5nZSBldmVudCB3aWxsIGFjdHVhbGx5IGNvbnRhaW4gdHdvIGRpc3RpbmN0IGFycmF5c1xuICAgICAgICAgIHZhciBuZXdUcmFuc3BvcnRzID0gdGhpcy50cmFuc3BvcnRzW3RvXS5zbGljZSgwKTtcbiAgICAgICAgICBuZXdUcmFuc3BvcnRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgdGhpcy50cmFuc3BvcnRzW3RvXSA9IG5ld1RyYW5zcG9ydHM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGhhc1RhcmdldDogZnVuY3Rpb24gaGFzVGFyZ2V0KHRvKSB7XG4gICAgICByZXR1cm4gdGhpcy50cmFuc3BvcnRzLmhhc093blByb3BlcnR5KHRvKTtcbiAgICB9LFxuICAgIGhhc0NvbnRlbnRGb3I6IGZ1bmN0aW9uIGhhc0NvbnRlbnRGb3IodG8pIHtcbiAgICAgIGlmICghdGhpcy50cmFuc3BvcnRzW3RvXSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb250ZW50Rm9yKHRvKS5sZW5ndGggPiAwO1xuICAgIH0sXG4gICAgZ2V0U291cmNlRm9yOiBmdW5jdGlvbiBnZXRTb3VyY2VGb3IodG8pIHtcbiAgICAgIHJldHVybiB0aGlzLnRyYW5zcG9ydHNbdG9dICYmIHRoaXMudHJhbnNwb3J0c1t0b11bMF0uZnJvbTtcbiAgICB9LFxuICAgIGdldENvbnRlbnRGb3I6IGZ1bmN0aW9uIGdldENvbnRlbnRGb3IodG8pIHtcbiAgICAgIHZhciB0cmFuc3BvcnRzID0gdGhpcy50cmFuc3BvcnRzW3RvXTtcbiAgICAgIGlmICghdHJhbnNwb3J0cykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbWJpbmVQYXNzZW5nZXJzKHRyYW5zcG9ydHMpO1xuICAgIH0sXG4gICAgZ2V0VHJhbnNwb3J0SW5kZXg6IGZ1bmN0aW9uIGdldFRyYW5zcG9ydEluZGV4KF9yZWYpIHtcbiAgICAgIHZhciB0byA9IF9yZWYudG8sXG4gICAgICAgICAgZnJvbSA9IF9yZWYuZnJvbTtcblxuICAgICAgZm9yICh2YXIgaSBpbiB0aGlzLnRyYW5zcG9ydHNbdG9dKSB7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zcG9ydHNbdG9dW2ldLmZyb20gPT09IGZyb20pIHtcbiAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgfVxufSk7XG5cbnZhciB3b3JtaG9sZSA9IG5ldyBXb3JtaG9sZSh0cmFuc3BvcnRzKTtcblxudmFyIG5lc3RSRSA9IC9eKGF0dHJzfHByb3BzfG9ufG5hdGl2ZU9ufGNsYXNzfHN0eWxlfGhvb2spJC87XG5cbnZhciBiYWJlbEhlbHBlclZ1ZUpzeE1lcmdlUHJvcHMgPSBmdW5jdGlvbiBtZXJnZUpTWFByb3BzIChvYmpzKSB7XG4gIHJldHVybiBvYmpzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xuICAgIHZhciBhYSwgYmIsIGtleSwgbmVzdGVkS2V5LCB0ZW1wO1xuICAgIGZvciAoa2V5IGluIGIpIHtcbiAgICAgIGFhID0gYVtrZXldO1xuICAgICAgYmIgPSBiW2tleV07XG4gICAgICBpZiAoYWEgJiYgbmVzdFJFLnRlc3Qoa2V5KSkge1xuICAgICAgICAvLyBub3JtYWxpemUgY2xhc3NcbiAgICAgICAgaWYgKGtleSA9PT0gJ2NsYXNzJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgYWEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0ZW1wID0gYWE7XG4gICAgICAgICAgICBhW2tleV0gPSBhYSA9IHt9O1xuICAgICAgICAgICAgYWFbdGVtcF0gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZW9mIGJiID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGVtcCA9IGJiO1xuICAgICAgICAgICAgYltrZXldID0gYmIgPSB7fTtcbiAgICAgICAgICAgIGJiW3RlbXBdID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ29uJyB8fCBrZXkgPT09ICduYXRpdmVPbicgfHwga2V5ID09PSAnaG9vaycpIHtcbiAgICAgICAgICAvLyBtZXJnZSBmdW5jdGlvbnNcbiAgICAgICAgICBmb3IgKG5lc3RlZEtleSBpbiBiYikge1xuICAgICAgICAgICAgYWFbbmVzdGVkS2V5XSA9IG1lcmdlRm4oYWFbbmVzdGVkS2V5XSwgYmJbbmVzdGVkS2V5XSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYWEpKSB7XG4gICAgICAgICAgYVtrZXldID0gYWEuY29uY2F0KGJiKTtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGJiKSkge1xuICAgICAgICAgIGFba2V5XSA9IFthYV0uY29uY2F0KGJiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKG5lc3RlZEtleSBpbiBiYikge1xuICAgICAgICAgICAgYWFbbmVzdGVkS2V5XSA9IGJiW25lc3RlZEtleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhW2tleV0gPSBiW2tleV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhXG4gIH0sIHt9KVxufTtcblxuZnVuY3Rpb24gbWVyZ2VGbiAoYSwgYikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGEgJiYgYS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGIgJiYgYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG59XG5cbi8vIGltcG9ydCB7IHRyYW5zcG9ydHMgfSBmcm9tICcuL3dvcm1ob2xlJ1xudmFyIFBvcnRhbFRhcmdldCA9IHtcbiAgYWJzdHJhY3Q6IGZhbHNlLFxuICBuYW1lOiAncG9ydGFsVGFyZ2V0JyxcbiAgcHJvcHM6IHtcbiAgICBhdHRyaWJ1dGVzOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH0gfSxcbiAgICBtdWx0aXBsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNsaW06IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBzbG90UHJvcHM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfSB9LFxuICAgIHRhZzogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdkaXYnIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBbQm9vbGVhbiwgU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRyYW5zaXRpb25FdmVudHM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfSB9XG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRyYW5zcG9ydHM6IHdvcm1ob2xlLnRyYW5zcG9ydHMsXG4gICAgICBmaXJzdFJlbmRlcjogdHJ1ZVxuICAgIH07XG4gIH0sXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG4gICAgaWYgKCF0aGlzLnRyYW5zcG9ydHNbdGhpcy5uYW1lXSkge1xuICAgICAgdGhpcy4kc2V0KHRoaXMudHJhbnNwb3J0cywgdGhpcy5uYW1lLCBbXSk7XG4gICAgfVxuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLnVud2F0Y2ggPSB0aGlzLiR3YXRjaCgnb3duVHJhbnNwb3J0cycsIHRoaXMuZW1pdENoYW5nZSk7XG4gICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLnRyYW5zaXRpb24pIHtcbiAgICAgICAgLy8gb25seSB3aGVuIHdlIGhhdmUgYSB0cmFuc2l0aW9uLCBiZWNhdXNlIGl0IGNhdXNlcyBhIHJlLXJlbmRlclxuICAgICAgICBfdGhpcy5maXJzdFJlbmRlciA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0aGlzLiRvcHRpb25zLmFic3RyYWN0KSB7XG4gICAgICB0aGlzLiRvcHRpb25zLmFic3RyYWN0ID0gZmFsc2U7XG4gICAgfVxuICB9LFxuICB1cGRhdGVkOiBmdW5jdGlvbiB1cGRhdGVkKCkge1xuICAgIGlmICh0aGlzLiRvcHRpb25zLmFic3RyYWN0KSB7XG4gICAgICB0aGlzLiRvcHRpb25zLmFic3RyYWN0ID0gZmFsc2U7XG4gICAgfVxuICB9LFxuICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMudW53YXRjaCgpO1xuICB9LFxuXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBvd25UcmFuc3BvcnRzOiBmdW5jdGlvbiBvd25UcmFuc3BvcnRzKCkge1xuICAgICAgdmFyIHRyYW5zcG9ydHMkJDEgPSB0aGlzLnRyYW5zcG9ydHNbdGhpcy5uYW1lXSB8fCBbXTtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIHJldHVybiB0cmFuc3BvcnRzJCQxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRyYW5zcG9ydHMkJDEubGVuZ3RoID09PSAwID8gW10gOiBbdHJhbnNwb3J0cyQkMVt0cmFuc3BvcnRzJCQxLmxlbmd0aCAtIDFdXTtcbiAgICB9LFxuICAgIHBhc3NlbmdlcnM6IGZ1bmN0aW9uIHBhc3NlbmdlcnMoKSB7XG4gICAgICByZXR1cm4gY29tYmluZVBhc3NlbmdlcnModGhpcy5vd25UcmFuc3BvcnRzLCB0aGlzLnNsb3RQcm9wcyk7XG4gICAgfSxcbiAgICBoYXNBdHRyaWJ1dGVzOiBmdW5jdGlvbiBoYXNBdHRyaWJ1dGVzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuYXR0cmlidXRlcykubGVuZ3RoID4gMDtcbiAgICB9LFxuICAgIHdpdGhUcmFuc2l0aW9uOiBmdW5jdGlvbiB3aXRoVHJhbnNpdGlvbigpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudHJhbnNpdGlvbjtcbiAgICB9LFxuICAgIHRyYW5zaXRpb25EYXRhOiBmdW5jdGlvbiB0cmFuc2l0aW9uRGF0YSgpIHtcbiAgICAgIHZhciB0ID0gdGhpcy50cmFuc2l0aW9uO1xuICAgICAgdmFyIGRhdGEgPSB7fTtcblxuICAgICAgLy8gRHVyaW5nIGZpcnN0IHJlbmRlciwgd2UgcmVuZGVyIGEgZHVtYiB0cmFuc2l0aW9uIHdpdGhvdXQgYW55IGNsYXNzZXMsIGV2ZW50cyBhbmQgYSBmYWtlIG5hbWVcbiAgICAgIC8vIFdlIGhhdmUgdG8gZG8gdGhpcyB0byBlbXVsYXRlIHRoZSBub3JtYWwgYmVoYXZpb3VyIG9mIHRyYW5zaXRpb25zIHdpdGhvdXQgYGFwcGVhcmBcbiAgICAgIC8vIGJlY2F1c2UgaW4gUG9ydGFscywgdHJhbnNpdGlvbnMgY2FuIGJlaGF2ZSBhcyBpZiBhcHBlYXIgd2FzIGRlZmluZWQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLlxuICAgICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIgJiYgX3R5cGVvZih0aGlzLnRyYW5zaXRpb24pID09PSAnb2JqZWN0JyAmJiAhdGhpcy50cmFuc2l0aW9uLmFwcGVhcikge1xuICAgICAgICBkYXRhLnByb3BzID0geyBuYW1lOiAnX19ub3RyYW5zdGl0aW9uX19wb3J0YWwtdnVlX18nIH07XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGRhdGEucHJvcHMgPSB7IG5hbWU6IHQgfTtcbiAgICAgIH0gZWxzZSBpZiAoKHR5cGVvZiB0ID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZih0KSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGRhdGEucHJvcHMgPSB0O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucmVuZGVyU2xpbSkge1xuICAgICAgICBkYXRhLnByb3BzLnRhZyA9IHRoaXMudGFnO1xuICAgICAgfVxuICAgICAgZGF0YS5vbiA9IHRoaXMudHJhbnNpdGlvbkV2ZW50cztcblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSxcbiAgICB0cmFuc3BvcnRlZENsYXNzZXM6IGZ1bmN0aW9uIHRyYW5zcG9ydGVkQ2xhc3NlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLm93blRyYW5zcG9ydHMubWFwKGZ1bmN0aW9uICh0cmFuc3BvcnQpIHtcbiAgICAgICAgcmV0dXJuIHRyYW5zcG9ydC5jbGFzcztcbiAgICAgIH0pLnJlZHVjZShmdW5jdGlvbiAoYXJyYXksIHN1YmFycmF5KSB7XG4gICAgICAgIHJldHVybiBhcnJheS5jb25jYXQoc3ViYXJyYXkpO1xuICAgICAgfSwgW10pO1xuICAgICAgLy8uZmlsdGVyKChzdHJpbmcsIGluZGV4LCBhcnJheSkgPT4gYXJyYXkuaW5kZXhPZihzdHJpbmcpID09PSBpbmRleClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGVtaXRDaGFuZ2U6IGZ1bmN0aW9uIGVtaXRDaGFuZ2UobmV3VHJhbnNwb3J0cywgb2xkVHJhbnNwb3J0cykge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgW10uY29uY2F0KHRvQ29uc3VtYWJsZUFycmF5KG5ld1RyYW5zcG9ydHMpKSwgW10uY29uY2F0KHRvQ29uc3VtYWJsZUFycmF5KG9sZFRyYW5zcG9ydHMpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgbmV3VHJhbnNwb3J0ID0gbmV3VHJhbnNwb3J0cy5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiBuZXdUcmFuc3BvcnRzWzBdO1xuICAgICAgICB2YXIgb2xkVHJhbnNwb3J0ID0gb2xkVHJhbnNwb3J0cy5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiBvbGRUcmFuc3BvcnRzWzBdO1xuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBfZXh0ZW5kcyh7fSwgbmV3VHJhbnNwb3J0KSwgX2V4dGVuZHMoe30sIG9sZFRyYW5zcG9ydCkpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBjYW4ndCBiZSBhIGNvbXB1dGVkIHByb3AgYmVjYXVzZSBpdCBoYXMgdG8gXCJyZWFjdFwiIHRvICRzbG90IGNoYW5nZXMuXG4gICAgY2hpbGRyZW46IGZ1bmN0aW9uIGNoaWxkcmVuKCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFzc2VuZ2Vycy5sZW5ndGggIT09IDAgPyB0aGlzLnBhc3NlbmdlcnMgOiB0aGlzLiRzbG90cy5kZWZhdWx0IHx8IFtdO1xuICAgIH0sXG4gICAgbm9XcmFwcGVyOiBmdW5jdGlvbiBub1dyYXBwZXIoKSB7XG4gICAgICB2YXIgbm9XcmFwcGVyID0gIXRoaXMuaGFzQXR0cmlidXRlcyAmJiB0aGlzLnNsaW07XG4gICAgICBpZiAobm9XcmFwcGVyICYmIHRoaXMuY2hpbGRyZW4oKS5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW3BvcnRhbC12dWVdOiBQb3J0YWxUYXJnZXQgd2l0aCBgc2xpbWAgb3B0aW9uIHJlY2VpdmVkIG1vcmUgdGhhbiBvbmUgY2hpbGQgZWxlbWVudC4nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBub1dyYXBwZXI7XG4gICAgfVxuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG4gICAgdGhpcy4kb3B0aW9ucy5hYnN0cmFjdCA9IHRydWU7XG4gICAgdmFyIG5vV3JhcHBlciA9IHRoaXMubm9XcmFwcGVyKCk7XG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbigpO1xuICAgIHZhciBUcmFuc2l0aW9uVHlwZSA9IG5vV3JhcHBlciA/ICd0cmFuc2l0aW9uJyA6ICd0cmFuc2l0aW9uLWdyb3VwJztcbiAgICB2YXIgVGFnID0gdGhpcy50YWc7XG5cbiAgICBpZiAodGhpcy53aXRoVHJhbnNpdGlvbikge1xuICAgICAgcmV0dXJuIGgoXG4gICAgICAgIFRyYW5zaXRpb25UeXBlLFxuICAgICAgICBiYWJlbEhlbHBlclZ1ZUpzeE1lcmdlUHJvcHMoW3RoaXMudHJhbnNpdGlvbkRhdGEsIHsgJ2NsYXNzJzogJ3Z1ZS1wb3J0YWwtdGFyZ2V0JyB9XSksXG4gICAgICAgIFtjaGlsZHJlbl1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vV3JhcHBlciA/IGNoaWxkcmVuWzBdIDogaChcbiAgICAgIFRhZyxcbiAgICAgIGJhYmVsSGVscGVyVnVlSnN4TWVyZ2VQcm9wcyhbe1xuICAgICAgICAnY2xhc3MnOiAndnVlLXBvcnRhbC10YXJnZXQgJyArIHRoaXMudHJhbnNwb3J0ZWRDbGFzc2VzLmpvaW4oJyAnKVxuICAgICAgfSwgdGhpcy5hdHRyaWJ1dGVzXSksXG4gICAgICBbY2hpbGRyZW5dXG4gICAgKTtcbiAgfVxufTtcblxudmFyIGluQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xuXG52YXIgcGlkID0gMTtcblxudmFyIFBvcnRhbCA9IHtcbiAgYWJzdHJhY3Q6IGZhbHNlLFxuICBuYW1lOiAncG9ydGFsJyxcbiAgcHJvcHM6IHtcbiAgICAvKiBnbG9iYWwgSFRNTEVsZW1lbnQgKi9cbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyhwaWQrKyk7XG4gICAgICB9IH0sXG4gICAgb3JkZXI6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH0sXG4gICAgc2xpbTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHNsb3RQcm9wczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9IH0sXG4gICAgdGFnOiB7IHR5cGU6IFtTdHJpbmddLCBkZWZhdWx0OiAnRElWJyB9LFxuICAgIHRhcmdldEVsOiB7IHR5cGU6IGluQnJvd3NlciA/IFtTdHJpbmcsIEhUTUxFbGVtZW50XSA6IFN0cmluZyB9LFxuICAgIHRhcmdldENsYXNzOiB7IHR5cGU6IFN0cmluZyB9LFxuICAgIHRvOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyhNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwMCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIGlmICh0aGlzLnRhcmdldEVsKSB7XG4gICAgICB0aGlzLm1vdW50VG9UYXJnZXQoKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnNlbmRVcGRhdGUoKTtcbiAgICB9XG4gICAgLy8gUmVzZXQgaGFjayB0byBtYWtlIGNoaWxkIGNvbXBvbmVudHMgc2tpcCB0aGUgcG9ydGFsIHdoZW4gZGVmaW5pbmcgdGhlaXIgJHBhcmVudFxuICAgIC8vIHdhcyBzZXQgdG8gdHJ1ZSBkdXJpbmcgcmVuZGVyIHdoZW4gd2UgcmVuZGVyIHNvbWV0aGluZyBsb2NhbGx5LlxuICAgIGlmICh0aGlzLiRvcHRpb25zLmFic3RyYWN0KSB7XG4gICAgICB0aGlzLiRvcHRpb25zLmFic3RyYWN0ID0gZmFsc2U7XG4gICAgfVxuICB9LFxuICB1cGRhdGVkOiBmdW5jdGlvbiB1cGRhdGVkKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmNsZWFyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VuZFVwZGF0ZSgpO1xuICAgIH1cbiAgICAvLyBSZXNldCBoYWNrIHRvIG1ha2UgY2hpbGQgY29tcG9uZW50cyBza2lwIHRoZSBwb3J0YWwgd2hlbiBkZWZpbmluZyB0aGVpciAkcGFyZW50XG4gICAgLy8gd2FzIHNldCB0byB0cnVlIGR1cmluZyByZW5kZXIgd2hlbiB3ZSByZW5kZXIgc29tZXRoaW5nIGxvY2FsbHkuXG4gICAgaWYgKHRoaXMuJG9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICAgIHRoaXMuJG9wdGlvbnMuYWJzdHJhY3QgPSBmYWxzZTtcbiAgICB9XG4gIH0sXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5jbGVhcigpO1xuICAgIGlmICh0aGlzLm1vdW50ZWRDb21wKSB7XG4gICAgICB0aGlzLm1vdW50ZWRDb21wLiRkZXN0cm95KCk7XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdG86IGZ1bmN0aW9uIHRvKG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICAgICAgb2xkVmFsdWUgJiYgb2xkVmFsdWUgIT09IG5ld1ZhbHVlICYmIHRoaXMuY2xlYXIob2xkVmFsdWUpO1xuICAgICAgdGhpcy5zZW5kVXBkYXRlKCk7XG4gICAgfSxcbiAgICB0YXJnZXRFbDogZnVuY3Rpb24gdGFyZ2V0RWwobmV3VmFsdWUsIG9sZFZhbHVlKSB7XG4gICAgICBpZiAobmV3VmFsdWUpIHtcbiAgICAgICAgdGhpcy5tb3VudFRvVGFyZ2V0KCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBub3JtYWxpemVkU2xvdHM6IGZ1bmN0aW9uIG5vcm1hbGl6ZWRTbG90cygpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzY29wZWRTbG90cy5kZWZhdWx0ID8gW3RoaXMuJHNjb3BlZFNsb3RzLmRlZmF1bHRdIDogdGhpcy4kc2xvdHMuZGVmYXVsdDtcbiAgICB9LFxuICAgIHNlbmRVcGRhdGU6IGZ1bmN0aW9uIHNlbmRVcGRhdGUoKSB7XG4gICAgICB2YXIgc2xvdENvbnRlbnQgPSB0aGlzLm5vcm1hbGl6ZWRTbG90cygpO1xuXG4gICAgICBpZiAoc2xvdENvbnRlbnQpIHtcbiAgICAgICAgd29ybWhvbGUub3Blbih7XG4gICAgICAgICAgZnJvbTogdGhpcy5uYW1lLFxuICAgICAgICAgIHRvOiB0aGlzLnRvLFxuICAgICAgICAgIHBhc3NlbmdlcnM6IFtdLmNvbmNhdCh0b0NvbnN1bWFibGVBcnJheShzbG90Q29udGVudCkpLFxuICAgICAgICAgIGNsYXNzOiB0aGlzLnRhcmdldENsYXNzICYmIHRoaXMudGFyZ2V0Q2xhc3Muc3BsaXQoJyAnKSxcbiAgICAgICAgICBvcmRlcjogdGhpcy5vcmRlclxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcih0YXJnZXQpIHtcbiAgICAgIHdvcm1ob2xlLmNsb3NlKHtcbiAgICAgICAgZnJvbTogdGhpcy5uYW1lLFxuICAgICAgICB0bzogdGFyZ2V0IHx8IHRoaXMudG9cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgbW91bnRUb1RhcmdldDogZnVuY3Rpb24gbW91bnRUb1RhcmdldCgpIHtcbiAgICAgIHZhciBlbCA9IHZvaWQgMDtcbiAgICAgIHZhciB0YXJnZXQgPSB0aGlzLnRhcmdldEVsO1xuXG4gICAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7XG4gICAgICB9IGVsc2UgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgIGVsID0gdGFyZ2V0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbdnVlLXBvcnRhbF06IHZhbHVlIG9mIHRhcmdldEVsIG11c3QgYmUgb2YgdHlwZSBTdHJpbmcgb3IgSFRNTEVsZW1lbnQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgdmFyIG5ld1RhcmdldCA9IG5ldyBWdWUoX2V4dGVuZHMoe30sIFBvcnRhbFRhcmdldCwge1xuICAgICAgICAgIHBhcmVudDogdGhpcyxcbiAgICAgICAgICBwcm9wc0RhdGE6IHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMudG8sXG4gICAgICAgICAgICB0YWc6IGVsLnRhZ05hbWUsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiBleHRyYWN0QXR0cmlidXRlcyhlbClcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgICAgbmV3VGFyZ2V0LiRtb3VudChlbCk7XG4gICAgICAgIHRoaXMubW91bnRlZENvbXAgPSBuZXdUYXJnZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1t2dWUtcG9ydGFsXTogVGhlIHNwZWNpZmllZCB0YXJnZXRFbCAnICsgdGFyZ2V0ICsgJyB3YXMgbm90IGZvdW5kJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBub3JtYWxpemVDaGlsZHJlbjogZnVuY3Rpb24gbm9ybWFsaXplQ2hpbGRyZW4oY2hpbGRyZW4pIHtcbiAgICAgIHJldHVybiB0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicgPyBjaGlsZHJlbih0aGlzLnNsb3RQcm9wcykgOiBjaGlsZHJlbjtcbiAgICB9XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuJHNsb3RzLmRlZmF1bHQgfHwgdGhpcy4kc2NvcGVkU2xvdHMuZGVmYXVsdCB8fCBbXTtcbiAgICB2YXIgVGFnID0gdGhpcy50YWc7XG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCAmJiB0aGlzLmRpc2FibGVkKSB7XG4gICAgICAvLyBoYWNrIHRvIG1ha2UgY2hpbGQgY29tcG9uZW50cyBza2lwIHRoZSBwb3J0YWwgd2hlbiBkZWZpbmluZyB0aGVpciAkcGFyZW50XG4gICAgICB0aGlzLiRvcHRpb25zLmFic3RyYWN0ID0gdHJ1ZTtcbiAgICAgIHJldHVybiBjaGlsZHJlbi5sZW5ndGggPD0gMSAmJiB0aGlzLnNsaW0gPyBjaGlsZHJlblswXSA6IGgoVGFnLCBbdGhpcy5ub3JtYWxpemVDaGlsZHJlbihjaGlsZHJlbildKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGgoVGFnLCB7XG4gICAgICAgICdjbGFzcyc6ICd2LXBvcnRhbCcsXG4gICAgICAgIHN0eWxlOiAnZGlzcGxheTogbm9uZScsXG4gICAgICAgIGtleTogJ3YtcG9ydGFsLXBsYWNlaG9sZGVyJ1xuICAgICAgfSk7XG4gICAgICAvLyBoKHRoaXMudGFnLCB7IGNsYXNzOiB7ICd2LXBvcnRhbCc6IHRydWUgfSwgc3R5bGU6IHsgZGlzcGxheTogJ25vbmUnIH0sIGtleTogJ3YtcG9ydGFsLXBsYWNlaG9sZGVyJyB9KVxuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gaW5zdGFsbChWdWUkJDEpIHtcbiAgdmFyIG9wdHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gIFZ1ZSQkMS5jb21wb25lbnQob3B0cy5wb3J0YWxOYW1lIHx8ICdQb3J0YWwnLCBQb3J0YWwpO1xuICBWdWUkJDEuY29tcG9uZW50KG9wdHMucG9ydGFsVGFyZ2V0TmFtZSB8fCAnUG9ydGFsVGFyZ2V0JywgUG9ydGFsVGFyZ2V0KTtcbn1cbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuVnVlKSB7XG4gIHdpbmRvdy5WdWUudXNlKHsgaW5zdGFsbDogaW5zdGFsbCB9KTtcbn1cblxudmFyIGluZGV4ID0ge1xuICBpbnN0YWxsOiBpbnN0YWxsLFxuICBQb3J0YWw6IFBvcnRhbCxcbiAgUG9ydGFsVGFyZ2V0OiBQb3J0YWxUYXJnZXQsXG4gIFdvcm1ob2xlOiB3b3JtaG9sZVxufTtcblxucmV0dXJuIGluZGV4O1xuXG59KSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cG9ydGFsLXZ1ZS5qcy5tYXBcbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc3RyaWN0VXJpRW5jb2RlID0gcmVxdWlyZSgnc3RyaWN0LXVyaS1lbmNvZGUnKTtcbnZhciBvYmplY3RBc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG52YXIgZGVjb2RlQ29tcG9uZW50ID0gcmVxdWlyZSgnZGVjb2RlLXVyaS1jb21wb25lbnQnKTtcblxuZnVuY3Rpb24gZW5jb2RlckZvckFycmF5Rm9ybWF0KG9wdHMpIHtcblx0c3dpdGNoIChvcHRzLmFycmF5Rm9ybWF0KSB7XG5cdFx0Y2FzZSAnaW5kZXgnOlxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlLCBpbmRleCkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGwgPyBbXG5cdFx0XHRcdFx0ZW5jb2RlKGtleSwgb3B0cyksXG5cdFx0XHRcdFx0J1snLFxuXHRcdFx0XHRcdGluZGV4LFxuXHRcdFx0XHRcdCddJ1xuXHRcdFx0XHRdLmpvaW4oJycpIDogW1xuXHRcdFx0XHRcdGVuY29kZShrZXksIG9wdHMpLFxuXHRcdFx0XHRcdCdbJyxcblx0XHRcdFx0XHRlbmNvZGUoaW5kZXgsIG9wdHMpLFxuXHRcdFx0XHRcdCddPScsXG5cdFx0XHRcdFx0ZW5jb2RlKHZhbHVlLCBvcHRzKVxuXHRcdFx0XHRdLmpvaW4oJycpO1xuXHRcdFx0fTtcblxuXHRcdGNhc2UgJ2JyYWNrZXQnOlxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IGVuY29kZShrZXksIG9wdHMpIDogW1xuXHRcdFx0XHRcdGVuY29kZShrZXksIG9wdHMpLFxuXHRcdFx0XHRcdCdbXT0nLFxuXHRcdFx0XHRcdGVuY29kZSh2YWx1ZSwgb3B0cylcblx0XHRcdFx0XS5qb2luKCcnKTtcblx0XHRcdH07XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IGVuY29kZShrZXksIG9wdHMpIDogW1xuXHRcdFx0XHRcdGVuY29kZShrZXksIG9wdHMpLFxuXHRcdFx0XHRcdCc9Jyxcblx0XHRcdFx0XHRlbmNvZGUodmFsdWUsIG9wdHMpXG5cdFx0XHRcdF0uam9pbignJyk7XG5cdFx0XHR9O1xuXHR9XG59XG5cbmZ1bmN0aW9uIHBhcnNlckZvckFycmF5Rm9ybWF0KG9wdHMpIHtcblx0dmFyIHJlc3VsdDtcblxuXHRzd2l0Y2ggKG9wdHMuYXJyYXlGb3JtYXQpIHtcblx0XHRjYXNlICdpbmRleCc6XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUsIGFjY3VtdWxhdG9yKSB7XG5cdFx0XHRcdHJlc3VsdCA9IC9cXFsoXFxkKilcXF0kLy5leGVjKGtleSk7XG5cblx0XHRcdFx0a2V5ID0ga2V5LnJlcGxhY2UoL1xcW1xcZCpcXF0kLywgJycpO1xuXG5cdFx0XHRcdGlmICghcmVzdWx0KSB7XG5cdFx0XHRcdFx0YWNjdW11bGF0b3Jba2V5XSA9IHZhbHVlO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChhY2N1bXVsYXRvcltrZXldID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRhY2N1bXVsYXRvcltrZXldID0ge307XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhY2N1bXVsYXRvcltrZXldW3Jlc3VsdFsxXV0gPSB2YWx1ZTtcblx0XHRcdH07XG5cblx0XHRjYXNlICdicmFja2V0Jzpcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgYWNjdW11bGF0b3IpIHtcblx0XHRcdFx0cmVzdWx0ID0gLyhcXFtcXF0pJC8uZXhlYyhrZXkpO1xuXHRcdFx0XHRrZXkgPSBrZXkucmVwbGFjZSgvXFxbXFxdJC8sICcnKTtcblxuXHRcdFx0XHRpZiAoIXJlc3VsdCkge1xuXHRcdFx0XHRcdGFjY3VtdWxhdG9yW2tleV0gPSB2YWx1ZTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0gZWxzZSBpZiAoYWNjdW11bGF0b3Jba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0YWNjdW11bGF0b3Jba2V5XSA9IFt2YWx1ZV07XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YWNjdW11bGF0b3Jba2V5XSA9IFtdLmNvbmNhdChhY2N1bXVsYXRvcltrZXldLCB2YWx1ZSk7XG5cdFx0XHR9O1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgYWNjdW11bGF0b3IpIHtcblx0XHRcdFx0aWYgKGFjY3VtdWxhdG9yW2tleV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGFjY3VtdWxhdG9yW2tleV0gPSB2YWx1ZTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhY2N1bXVsYXRvcltrZXldID0gW10uY29uY2F0KGFjY3VtdWxhdG9yW2tleV0sIHZhbHVlKTtcblx0XHRcdH07XG5cdH1cbn1cblxuZnVuY3Rpb24gZW5jb2RlKHZhbHVlLCBvcHRzKSB7XG5cdGlmIChvcHRzLmVuY29kZSkge1xuXHRcdHJldHVybiBvcHRzLnN0cmljdCA/IHN0cmljdFVyaUVuY29kZSh2YWx1ZSkgOiBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuXHR9XG5cblx0cmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBrZXlzU29ydGVyKGlucHV0KSB7XG5cdGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dC5zb3J0KCk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnb2JqZWN0Jykge1xuXHRcdHJldHVybiBrZXlzU29ydGVyKE9iamVjdC5rZXlzKGlucHV0KSkuc29ydChmdW5jdGlvbiAoYSwgYikge1xuXHRcdFx0cmV0dXJuIE51bWJlcihhKSAtIE51bWJlcihiKTtcblx0XHR9KS5tYXAoZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0cmV0dXJuIGlucHV0W2tleV07XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gaW5wdXQ7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3Qoc3RyKSB7XG5cdHZhciBxdWVyeVN0YXJ0ID0gc3RyLmluZGV4T2YoJz8nKTtcblx0aWYgKHF1ZXJ5U3RhcnQgPT09IC0xKSB7XG5cdFx0cmV0dXJuICcnO1xuXHR9XG5cdHJldHVybiBzdHIuc2xpY2UocXVlcnlTdGFydCArIDEpO1xufVxuXG5mdW5jdGlvbiBwYXJzZShzdHIsIG9wdHMpIHtcblx0b3B0cyA9IG9iamVjdEFzc2lnbih7YXJyYXlGb3JtYXQ6ICdub25lJ30sIG9wdHMpO1xuXG5cdHZhciBmb3JtYXR0ZXIgPSBwYXJzZXJGb3JBcnJheUZvcm1hdChvcHRzKTtcblxuXHQvLyBDcmVhdGUgYW4gb2JqZWN0IHdpdGggbm8gcHJvdG90eXBlXG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvcXVlcnktc3RyaW5nL2lzc3Vlcy80N1xuXHR2YXIgcmV0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuXHRpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gcmV0O1xuXHR9XG5cblx0c3RyID0gc3RyLnRyaW0oKS5yZXBsYWNlKC9eWz8jJl0vLCAnJyk7XG5cblx0aWYgKCFzdHIpIHtcblx0XHRyZXR1cm4gcmV0O1xuXHR9XG5cblx0c3RyLnNwbGl0KCcmJykuZm9yRWFjaChmdW5jdGlvbiAocGFyYW0pIHtcblx0XHR2YXIgcGFydHMgPSBwYXJhbS5yZXBsYWNlKC9cXCsvZywgJyAnKS5zcGxpdCgnPScpO1xuXHRcdC8vIEZpcmVmb3ggKHByZSA0MCkgZGVjb2RlcyBgJTNEYCB0byBgPWBcblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL3F1ZXJ5LXN0cmluZy9wdWxsLzM3XG5cdFx0dmFyIGtleSA9IHBhcnRzLnNoaWZ0KCk7XG5cdFx0dmFyIHZhbCA9IHBhcnRzLmxlbmd0aCA+IDAgPyBwYXJ0cy5qb2luKCc9JykgOiB1bmRlZmluZWQ7XG5cblx0XHQvLyBtaXNzaW5nIGA9YCBzaG91bGQgYmUgYG51bGxgOlxuXHRcdC8vIGh0dHA6Ly93My5vcmcvVFIvMjAxMi9XRC11cmwtMjAxMjA1MjQvI2NvbGxlY3QtdXJsLXBhcmFtZXRlcnNcblx0XHR2YWwgPSB2YWwgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZWNvZGVDb21wb25lbnQodmFsKTtcblxuXHRcdGZvcm1hdHRlcihkZWNvZGVDb21wb25lbnQoa2V5KSwgdmFsLCByZXQpO1xuXHR9KTtcblxuXHRyZXR1cm4gT2JqZWN0LmtleXMocmV0KS5zb3J0KCkucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGtleSkge1xuXHRcdHZhciB2YWwgPSByZXRba2V5XTtcblx0XHRpZiAoQm9vbGVhbih2YWwpICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbCkpIHtcblx0XHRcdC8vIFNvcnQgb2JqZWN0IGtleXMsIG5vdCB2YWx1ZXNcblx0XHRcdHJlc3VsdFtrZXldID0ga2V5c1NvcnRlcih2YWwpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXN1bHRba2V5XSA9IHZhbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LCBPYmplY3QuY3JlYXRlKG51bGwpKTtcbn1cblxuZXhwb3J0cy5leHRyYWN0ID0gZXh0cmFjdDtcbmV4cG9ydHMucGFyc2UgPSBwYXJzZTtcblxuZXhwb3J0cy5zdHJpbmdpZnkgPSBmdW5jdGlvbiAob2JqLCBvcHRzKSB7XG5cdHZhciBkZWZhdWx0cyA9IHtcblx0XHRlbmNvZGU6IHRydWUsXG5cdFx0c3RyaWN0OiB0cnVlLFxuXHRcdGFycmF5Rm9ybWF0OiAnbm9uZSdcblx0fTtcblxuXHRvcHRzID0gb2JqZWN0QXNzaWduKGRlZmF1bHRzLCBvcHRzKTtcblxuXHRpZiAob3B0cy5zb3J0ID09PSBmYWxzZSkge1xuXHRcdG9wdHMuc29ydCA9IGZ1bmN0aW9uICgpIHt9O1xuXHR9XG5cblx0dmFyIGZvcm1hdHRlciA9IGVuY29kZXJGb3JBcnJheUZvcm1hdChvcHRzKTtcblxuXHRyZXR1cm4gb2JqID8gT2JqZWN0LmtleXMob2JqKS5zb3J0KG9wdHMuc29ydCkubWFwKGZ1bmN0aW9uIChrZXkpIHtcblx0XHR2YXIgdmFsID0gb2JqW2tleV07XG5cblx0XHRpZiAodmFsID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cblx0XHRpZiAodmFsID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gZW5jb2RlKGtleSwgb3B0cyk7XG5cdFx0fVxuXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuXHRcdFx0dmFyIHJlc3VsdCA9IFtdO1xuXG5cdFx0XHR2YWwuc2xpY2UoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWwyKSB7XG5cdFx0XHRcdGlmICh2YWwyID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXN1bHQucHVzaChmb3JtYXR0ZXIoa2V5LCB2YWwyLCByZXN1bHQubGVuZ3RoKSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIHJlc3VsdC5qb2luKCcmJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVuY29kZShrZXksIG9wdHMpICsgJz0nICsgZW5jb2RlKHZhbCwgb3B0cyk7XG5cdH0pLmZpbHRlcihmdW5jdGlvbiAoeCkge1xuXHRcdHJldHVybiB4Lmxlbmd0aCA+IDA7XG5cdH0pLmpvaW4oJyYnKSA6ICcnO1xufTtcblxuZXhwb3J0cy5wYXJzZVVybCA9IGZ1bmN0aW9uIChzdHIsIG9wdHMpIHtcblx0cmV0dXJuIHtcblx0XHR1cmw6IHN0ci5zcGxpdCgnPycpWzBdIHx8ICcnLFxuXHRcdHF1ZXJ5OiBwYXJzZShleHRyYWN0KHN0ciksIG9wdHMpXG5cdH07XG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4vLyBUaGlzIG1ldGhvZCBvZiBvYnRhaW5pbmcgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QgbmVlZHMgdG8gYmVcbi8vIGtlcHQgaWRlbnRpY2FsIHRvIHRoZSB3YXkgaXQgaXMgb2J0YWluZWQgaW4gcnVudGltZS5qc1xudmFyIGcgPSAoZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzIH0pKCkgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xuXG4vLyBVc2UgYGdldE93blByb3BlcnR5TmFtZXNgIGJlY2F1c2Ugbm90IGFsbCBicm93c2VycyBzdXBwb3J0IGNhbGxpbmdcbi8vIGBoYXNPd25Qcm9wZXJ0eWAgb24gdGhlIGdsb2JhbCBgc2VsZmAgb2JqZWN0IGluIGEgd29ya2VyLiBTZWUgIzE4My5cbnZhciBoYWRSdW50aW1lID0gZy5yZWdlbmVyYXRvclJ1bnRpbWUgJiZcbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZykuaW5kZXhPZihcInJlZ2VuZXJhdG9yUnVudGltZVwiKSA+PSAwO1xuXG4vLyBTYXZlIHRoZSBvbGQgcmVnZW5lcmF0b3JSdW50aW1lIGluIGNhc2UgaXQgbmVlZHMgdG8gYmUgcmVzdG9yZWQgbGF0ZXIuXG52YXIgb2xkUnVudGltZSA9IGhhZFJ1bnRpbWUgJiYgZy5yZWdlbmVyYXRvclJ1bnRpbWU7XG5cbi8vIEZvcmNlIHJlZXZhbHV0YXRpb24gb2YgcnVudGltZS5qcy5cbmcucmVnZW5lcmF0b3JSdW50aW1lID0gdW5kZWZpbmVkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuL3J1bnRpbWVcIik7XG5cbmlmIChoYWRSdW50aW1lKSB7XG4gIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHJ1bnRpbWUuXG4gIGcucmVnZW5lcmF0b3JSdW50aW1lID0gb2xkUnVudGltZTtcbn0gZWxzZSB7XG4gIC8vIFJlbW92ZSB0aGUgZ2xvYmFsIHByb3BlcnR5IGFkZGVkIGJ5IHJ1bnRpbWUuanMuXG4gIHRyeSB7XG4gICAgZGVsZXRlIGcucmVnZW5lcmF0b3JSdW50aW1lO1xuICB9IGNhdGNoKGUpIHtcbiAgICBnLnJlZ2VuZXJhdG9yUnVudGltZSA9IHVuZGVmaW5lZDtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4hKGZ1bmN0aW9uKGdsb2JhbCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIHZhciBpbk1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCI7XG4gIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcbiAgaWYgKHJ1bnRpbWUpIHtcbiAgICBpZiAoaW5Nb2R1bGUpIHtcbiAgICAgIC8vIElmIHJlZ2VuZXJhdG9yUnVudGltZSBpcyBkZWZpbmVkIGdsb2JhbGx5IGFuZCB3ZSdyZSBpbiBhIG1vZHVsZSxcbiAgICAgIC8vIG1ha2UgdGhlIGV4cG9ydHMgb2JqZWN0IGlkZW50aWNhbCB0byByZWdlbmVyYXRvclJ1bnRpbWUuXG4gICAgICBtb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG4gICAgfVxuICAgIC8vIERvbid0IGJvdGhlciBldmFsdWF0aW5nIHRoZSByZXN0IG9mIHRoaXMgZmlsZSBpZiB0aGUgcnVudGltZSB3YXNcbiAgICAvLyBhbHJlYWR5IGRlZmluZWQgZ2xvYmFsbHkuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRGVmaW5lIHRoZSBydW50aW1lIGdsb2JhbGx5IChhcyBleHBlY3RlZCBieSBnZW5lcmF0ZWQgY29kZSkgYXMgZWl0aGVyXG4gIC8vIG1vZHVsZS5leHBvcnRzIChpZiB3ZSdyZSBpbiBhIG1vZHVsZSkgb3IgYSBuZXcsIGVtcHR5IG9iamVjdC5cbiAgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWUgPSBpbk1vZHVsZSA/IG1vZHVsZS5leHBvcnRzIDoge307XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgcnVudGltZS53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID1cbiAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBydW50aW1lLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHtcbiAgICAgICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgcnVudGltZS5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uIElmIHRoZSBQcm9taXNlIGlzIHJlamVjdGVkLCBob3dldmVyLCB0aGVcbiAgICAgICAgICAvLyByZXN1bHQgZm9yIHRoaXMgaXRlcmF0aW9uIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCB0aGUgc2FtZVxuICAgICAgICAgIC8vIHJlYXNvbi4gTm90ZSB0aGF0IHJlamVjdGlvbnMgb2YgeWllbGRlZCBQcm9taXNlcyBhcmUgbm90XG4gICAgICAgICAgLy8gdGhyb3duIGJhY2sgaW50byB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBhcyBpcyB0aGUgY2FzZVxuICAgICAgICAgIC8vIHdoZW4gYW4gYXdhaXRlZCBQcm9taXNlIGlzIHJlamVjdGVkLiBUaGlzIGRpZmZlcmVuY2UgaW5cbiAgICAgICAgICAvLyBiZWhhdmlvciBiZXR3ZWVuIHlpZWxkIGFuZCBhd2FpdCBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgaXRcbiAgICAgICAgICAvLyBhbGxvd3MgdGhlIGNvbnN1bWVyIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlIHlpZWxkZWRcbiAgICAgICAgICAvLyByZWplY3Rpb24gKHN3YWxsb3cgaXQgYW5kIGNvbnRpbnVlLCBtYW51YWxseSAudGhyb3cgaXQgYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGdlbmVyYXRvciwgYWJhbmRvbiBpdGVyYXRpb24sIHdoYXRldmVyKS4gV2l0aFxuICAgICAgICAgIC8vIGF3YWl0LCBieSBjb250cmFzdCwgdGhlcmUgaXMgbm8gb3Bwb3J0dW5pdHkgdG8gZXhhbWluZSB0aGVcbiAgICAgICAgICAvLyByZWplY3Rpb24gcmVhc29uIG91dHNpZGUgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgc28gdGhlXG4gICAgICAgICAgLy8gb25seSBvcHRpb24gaXMgdG8gdGhyb3cgaXQgZnJvbSB0aGUgYXdhaXQgZXhwcmVzc2lvbiwgYW5kXG4gICAgICAgICAgLy8gbGV0IHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24gaGFuZGxlIHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIEFzeW5jSXRlcmF0b3IucHJvdG90eXBlW2FzeW5jSXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBydW50aW1lLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBydW50aW1lLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdClcbiAgICApO1xuXG4gICAgcmV0dXJuIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdO1xuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQgY29udGV4dC5tZXRob2QgZnJvbVxuICAgICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcblxuICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgaWYgKCEgaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblxuICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblxuICAgICAgLy8gSWYgY29udGV4dC5tZXRob2Qgd2FzIFwidGhyb3dcIiBidXQgdGhlIGRlbGVnYXRlIGhhbmRsZWQgdGhlXG4gICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9yIHByb2NlZWQgbm9ybWFsbHkuIElmXG4gICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgXCJuZXh0XCIsIGZvcmdldCBjb250ZXh0LmFyZyBzaW5jZSBpdCBoYXMgYmVlblxuICAgICAgLy8gXCJjb25zdW1lZFwiIGJ5IHRoZSBkZWxlZ2F0ZSBpdGVyYXRvci4gSWYgY29udGV4dC5tZXRob2Qgd2FzXG4gICAgICAvLyBcInJldHVyblwiLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVlIGluIHRoZVxuICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLlxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLXlpZWxkIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGRlbGVnYXRlIG1ldGhvZC5cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cbiAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBHcFt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvclwiO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIHJ1bnRpbWUua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBydW50aW1lLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xufSkoXG4gIC8vIEluIHNsb3BweSBtb2RlLCB1bmJvdW5kIGB0aGlzYCByZWZlcnMgdG8gdGhlIGdsb2JhbCBvYmplY3QsIGZhbGxiYWNrIHRvXG4gIC8vIEZ1bmN0aW9uIGNvbnN0cnVjdG9yIGlmIHdlJ3JlIGluIGdsb2JhbCBzdHJpY3QgbW9kZS4gVGhhdCBpcyBzYWRseSBhIGZvcm1cbiAgLy8gb2YgaW5kaXJlY3QgZXZhbCB3aGljaCB2aW9sYXRlcyBDb250ZW50IFNlY3VyaXR5IFBvbGljeS5cbiAgKGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcyB9KSgpIHx8IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKVxuKTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHN0cikge1xuXHRyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnKCkqXS9nLCBmdW5jdGlvbiAoYykge1xuXHRcdHJldHVybiAnJScgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG5cdH0pO1xufTtcbiIsInZhciBuZXh0VGljayA9IHJlcXVpcmUoJ3Byb2Nlc3MvYnJvd3Nlci5qcycpLm5leHRUaWNrO1xudmFyIGFwcGx5ID0gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5O1xudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIGltbWVkaWF0ZUlkcyA9IHt9O1xudmFyIG5leHRJbW1lZGlhdGVJZCA9IDA7XG5cbi8vIERPTSBBUElzLCBmb3IgY29tcGxldGVuZXNzXG5cbmV4cG9ydHMuc2V0VGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRUaW1lb3V0LCB3aW5kb3csIGFyZ3VtZW50cyksIGNsZWFyVGltZW91dCk7XG59O1xuZXhwb3J0cy5zZXRJbnRlcnZhbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRJbnRlcnZhbCwgd2luZG93LCBhcmd1bWVudHMpLCBjbGVhckludGVydmFsKTtcbn07XG5leHBvcnRzLmNsZWFyVGltZW91dCA9XG5leHBvcnRzLmNsZWFySW50ZXJ2YWwgPSBmdW5jdGlvbih0aW1lb3V0KSB7IHRpbWVvdXQuY2xvc2UoKTsgfTtcblxuZnVuY3Rpb24gVGltZW91dChpZCwgY2xlYXJGbikge1xuICB0aGlzLl9pZCA9IGlkO1xuICB0aGlzLl9jbGVhckZuID0gY2xlYXJGbjtcbn1cblRpbWVvdXQucHJvdG90eXBlLnVucmVmID0gVGltZW91dC5wcm90b3R5cGUucmVmID0gZnVuY3Rpb24oKSB7fTtcblRpbWVvdXQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX2NsZWFyRm4uY2FsbCh3aW5kb3csIHRoaXMuX2lkKTtcbn07XG5cbi8vIERvZXMgbm90IHN0YXJ0IHRoZSB0aW1lLCBqdXN0IHNldHMgdXAgdGhlIG1lbWJlcnMgbmVlZGVkLlxuZXhwb3J0cy5lbnJvbGwgPSBmdW5jdGlvbihpdGVtLCBtc2Vjcykge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG4gIGl0ZW0uX2lkbGVUaW1lb3V0ID0gbXNlY3M7XG59O1xuXG5leHBvcnRzLnVuZW5yb2xsID0gZnVuY3Rpb24oaXRlbSkge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG4gIGl0ZW0uX2lkbGVUaW1lb3V0ID0gLTE7XG59O1xuXG5leHBvcnRzLl91bnJlZkFjdGl2ZSA9IGV4cG9ydHMuYWN0aXZlID0gZnVuY3Rpb24oaXRlbSkge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG5cbiAgdmFyIG1zZWNzID0gaXRlbS5faWRsZVRpbWVvdXQ7XG4gIGlmIChtc2VjcyA+PSAwKSB7XG4gICAgaXRlbS5faWRsZVRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gb25UaW1lb3V0KCkge1xuICAgICAgaWYgKGl0ZW0uX29uVGltZW91dClcbiAgICAgICAgaXRlbS5fb25UaW1lb3V0KCk7XG4gICAgfSwgbXNlY3MpO1xuICB9XG59O1xuXG4vLyBUaGF0J3Mgbm90IGhvdyBub2RlLmpzIGltcGxlbWVudHMgaXQgYnV0IHRoZSBleHBvc2VkIGFwaSBpcyB0aGUgc2FtZS5cbmV4cG9ydHMuc2V0SW1tZWRpYXRlID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gXCJmdW5jdGlvblwiID8gc2V0SW1tZWRpYXRlIDogZnVuY3Rpb24oZm4pIHtcbiAgdmFyIGlkID0gbmV4dEltbWVkaWF0ZUlkKys7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBmYWxzZSA6IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcblxuICBpbW1lZGlhdGVJZHNbaWRdID0gdHJ1ZTtcblxuICBuZXh0VGljayhmdW5jdGlvbiBvbk5leHRUaWNrKCkge1xuICAgIGlmIChpbW1lZGlhdGVJZHNbaWRdKSB7XG4gICAgICAvLyBmbi5jYWxsKCkgaXMgZmFzdGVyIHNvIHdlIG9wdGltaXplIGZvciB0aGUgY29tbW9uIHVzZS1jYXNlXG4gICAgICAvLyBAc2VlIGh0dHA6Ly9qc3BlcmYuY29tL2NhbGwtYXBwbHktc2VndVxuICAgICAgaWYgKGFyZ3MpIHtcbiAgICAgICAgZm4uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmbi5jYWxsKG51bGwpO1xuICAgICAgfVxuICAgICAgLy8gUHJldmVudCBpZHMgZnJvbSBsZWFraW5nXG4gICAgICBleHBvcnRzLmNsZWFySW1tZWRpYXRlKGlkKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBpZDtcbn07XG5cbmV4cG9ydHMuY2xlYXJJbW1lZGlhdGUgPSB0eXBlb2YgY2xlYXJJbW1lZGlhdGUgPT09IFwiZnVuY3Rpb25cIiA/IGNsZWFySW1tZWRpYXRlIDogZnVuY3Rpb24oaWQpIHtcbiAgZGVsZXRlIGltbWVkaWF0ZUlkc1tpZF07XG59OyIsIiFmdW5jdGlvbihlLHQpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPXQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLHQpOlwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHNbXCJ2dWUtanMtbW9kYWxcIl09dCgpOmVbXCJ2dWUtanMtbW9kYWxcIl09dCgpfSh3aW5kb3csZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIG89e307ZnVuY3Rpb24gaShlKXtpZihvW2VdKXJldHVybiBvW2VdLmV4cG9ydHM7dmFyIHQ9b1tlXT17aTplLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIG5bZV0uY2FsbCh0LmV4cG9ydHMsdCx0LmV4cG9ydHMsaSksdC5sPSEwLHQuZXhwb3J0c31yZXR1cm4gaS5tPW4saS5jPW8saS5kPWZ1bmN0aW9uKGUsdCxuKXtpLm8oZSx0KXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7ZW51bWVyYWJsZTohMCxnZXQ6bn0pfSxpLnI9ZnVuY3Rpb24oZSl7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOlwiTW9kdWxlXCJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0saS50PWZ1bmN0aW9uKHQsZSl7aWYoMSZlJiYodD1pKHQpKSw4JmUpcmV0dXJuIHQ7aWYoNCZlJiZcIm9iamVjdFwiPT10eXBlb2YgdCYmdCYmdC5fX2VzTW9kdWxlKXJldHVybiB0O3ZhciBuPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoaS5yKG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KSwyJmUmJlwic3RyaW5nXCIhPXR5cGVvZiB0KWZvcih2YXIgbyBpbiB0KWkuZChuLG8sZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19LmJpbmQobnVsbCxvKSk7cmV0dXJuIG59LGkubj1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gaS5kKHQsXCJhXCIsdCksdH0saS5vPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfSxpLnA9XCIvZGlzdC9cIixpKGkucz0xMSl9KFtmdW5jdGlvbihlLHQsbil7dmFyIG89big2KTtcInN0cmluZ1wiPT10eXBlb2YgbyYmKG89W1tlLmksbyxcIlwiXV0pLG8ubG9jYWxzJiYoZS5leHBvcnRzPW8ubG9jYWxzKTsoMCxuKDQpLmRlZmF1bHQpKFwiMjdkODM3OTZcIixvLCExLHt9KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBvPW4oOCk7XCJzdHJpbmdcIj09dHlwZW9mIG8mJihvPVtbZS5pLG8sXCJcIl1dKSxvLmxvY2FscyYmKGUuZXhwb3J0cz1vLmxvY2Fscyk7KDAsbig0KS5kZWZhdWx0KShcIjBlNzgzNDk0XCIsbywhMSx7fSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgbz1uKDEwKTtcInN0cmluZ1wiPT10eXBlb2YgbyYmKG89W1tlLmksbyxcIlwiXV0pLG8ubG9jYWxzJiYoZS5leHBvcnRzPW8ubG9jYWxzKTsoMCxuKDQpLmRlZmF1bHQpKFwiMTc3NTdmNjBcIixvLCExLHt9KX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24obil7dmFyIGE9W107cmV0dXJuIGEudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzFdfHxcIlwiLG89ZVszXTtpZighbylyZXR1cm4gbjtpZih0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBidG9hKXt2YXIgaT0oYT1vLFwiLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LFwiK2J0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGEpKSkpK1wiICovXCIpLHI9by5zb3VyY2VzLm1hcChmdW5jdGlvbihlKXtyZXR1cm5cIi8qIyBzb3VyY2VVUkw9XCIrby5zb3VyY2VSb290K2UrXCIgKi9cIn0pO3JldHVybltuXS5jb25jYXQocikuY29uY2F0KFtpXSkuam9pbihcIlxcblwiKX12YXIgYTtyZXR1cm5bbl0uam9pbihcIlxcblwiKX0oZSxuKTtyZXR1cm4gZVsyXT9cIkBtZWRpYSBcIitlWzJdK1wie1wiK3QrXCJ9XCI6dH0pLmpvaW4oXCJcIil9LGEuaT1mdW5jdGlvbihlLHQpe1wic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1bW251bGwsZSxcIlwiXV0pO2Zvcih2YXIgbj17fSxvPTA7bzx0aGlzLmxlbmd0aDtvKyspe3ZhciBpPXRoaXNbb11bMF07XCJudW1iZXJcIj09dHlwZW9mIGkmJihuW2ldPSEwKX1mb3Iobz0wO288ZS5sZW5ndGg7bysrKXt2YXIgcj1lW29dO1wibnVtYmVyXCI9PXR5cGVvZiByWzBdJiZuW3JbMF1dfHwodCYmIXJbMl0/clsyXT10OnQmJihyWzJdPVwiKFwiK3JbMl0rXCIpIGFuZCAoXCIrdCtcIilcIiksYS5wdXNoKHIpKX19LGF9fSxmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbChlLHQpe2Zvcih2YXIgbj1bXSxvPXt9LGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIHI9dFtpXSxhPXJbMF0scz17aWQ6ZStcIjpcIitpLGNzczpyWzFdLG1lZGlhOnJbMl0sc291cmNlTWFwOnJbM119O29bYV0/b1thXS5wYXJ0cy5wdXNoKHMpOm4ucHVzaChvW2FdPXtpZDphLHBhcnRzOltzXX0pfXJldHVybiBufW4ucih0KSxuLmQodCxcImRlZmF1bHRcIixmdW5jdGlvbigpe3JldHVybiBwfSk7dmFyIG89XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50O2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBERUJVRyYmREVCVUcmJiFvKXRocm93IG5ldyBFcnJvcihcInZ1ZS1zdHlsZS1sb2FkZXIgY2Fubm90IGJlIHVzZWQgaW4gYSBub24tYnJvd3NlciBlbnZpcm9ubWVudC4gVXNlIHsgdGFyZ2V0OiAnbm9kZScgfSBpbiB5b3VyIFdlYnBhY2sgY29uZmlnIHRvIGluZGljYXRlIGEgc2VydmVyLXJlbmRlcmluZyBlbnZpcm9ubWVudC5cIik7dmFyIGQ9e30saT1vJiYoZG9jdW1lbnQuaGVhZHx8ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdKSxyPW51bGwsYT0wLHU9ITEscz1mdW5jdGlvbigpe30sYz1udWxsLGg9XCJkYXRhLXZ1ZS1zc3ItaWRcIixmPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBuYXZpZ2F0b3ImJi9tc2llIFs2LTldXFxiLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSk7ZnVuY3Rpb24gcChhLGUsdCxuKXt1PXQsYz1ufHx7fTt2YXIgcz1sKGEsZSk7cmV0dXJuIHYocyksZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MDtuPHMubGVuZ3RoO24rKyl7dmFyIG89c1tuXTsoaT1kW28uaWRdKS5yZWZzLS0sdC5wdXNoKGkpfWU/dihzPWwoYSxlKSk6cz1bXTtmb3Iobj0wO248dC5sZW5ndGg7bisrKXt2YXIgaTtpZigwPT09KGk9dFtuXSkucmVmcyl7Zm9yKHZhciByPTA7cjxpLnBhcnRzLmxlbmd0aDtyKyspaS5wYXJ0c1tyXSgpO2RlbGV0ZSBkW2kuaWRdfX19fWZ1bmN0aW9uIHYoZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciBuPWVbdF0sbz1kW24uaWRdO2lmKG8pe28ucmVmcysrO2Zvcih2YXIgaT0wO2k8by5wYXJ0cy5sZW5ndGg7aSsrKW8ucGFydHNbaV0obi5wYXJ0c1tpXSk7Zm9yKDtpPG4ucGFydHMubGVuZ3RoO2krKylvLnBhcnRzLnB1c2goZyhuLnBhcnRzW2ldKSk7by5wYXJ0cy5sZW5ndGg+bi5wYXJ0cy5sZW5ndGgmJihvLnBhcnRzLmxlbmd0aD1uLnBhcnRzLmxlbmd0aCl9ZWxzZXt2YXIgcj1bXTtmb3IoaT0wO2k8bi5wYXJ0cy5sZW5ndGg7aSsrKXIucHVzaChnKG4ucGFydHNbaV0pKTtkW24uaWRdPXtpZDpuLmlkLHJlZnM6MSxwYXJ0czpyfX19fWZ1bmN0aW9uIG0oKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7cmV0dXJuIGUudHlwZT1cInRleHQvY3NzXCIsaS5hcHBlbmRDaGlsZChlKSxlfWZ1bmN0aW9uIGcodCl7dmFyIG4sbyxlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJzdHlsZVtcIitoKyd+PVwiJyt0LmlkKydcIl0nKTtpZihlKXtpZih1KXJldHVybiBzO2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKX1pZihmKXt2YXIgaT1hKys7ZT1yfHwocj1tKCkpLG49dy5iaW5kKG51bGwsZSxpLCExKSxvPXcuYmluZChudWxsLGUsaSwhMCl9ZWxzZSBlPW0oKSxuPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5jc3Msbz10Lm1lZGlhLGk9dC5zb3VyY2VNYXA7byYmZS5zZXRBdHRyaWJ1dGUoXCJtZWRpYVwiLG8pO2Muc3NySWQmJmUuc2V0QXR0cmlidXRlKGgsdC5pZCk7aSYmKG4rPVwiXFxuLyojIHNvdXJjZVVSTD1cIitpLnNvdXJjZXNbMF0rXCIgKi9cIixuKz1cIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIrYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoaSkpKSkrXCIgKi9cIik7aWYoZS5zdHlsZVNoZWV0KWUuc3R5bGVTaGVldC5jc3NUZXh0PW47ZWxzZXtmb3IoO2UuZmlyc3RDaGlsZDspZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpO2UuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobikpfX0uYmluZChudWxsLGUpLG89ZnVuY3Rpb24oKXtlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSl9O3JldHVybiBuKHQpLGZ1bmN0aW9uKGUpe2lmKGUpe2lmKGUuY3NzPT09dC5jc3MmJmUubWVkaWE9PT10Lm1lZGlhJiZlLnNvdXJjZU1hcD09PXQuc291cmNlTWFwKXJldHVybjtuKHQ9ZSl9ZWxzZSBvKCl9fXZhciBiLHk9KGI9W10sZnVuY3Rpb24oZSx0KXtyZXR1cm4gYltlXT10LGIuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCJcXG5cIil9KTtmdW5jdGlvbiB3KGUsdCxuLG8pe3ZhciBpPW4/XCJcIjpvLmNzcztpZihlLnN0eWxlU2hlZXQpZS5zdHlsZVNoZWV0LmNzc1RleHQ9eSh0LGkpO2Vsc2V7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoaSksYT1lLmNoaWxkTm9kZXM7YVt0XSYmZS5yZW1vdmVDaGlsZChhW3RdKSxhLmxlbmd0aD9lLmluc2VydEJlZm9yZShyLGFbdF0pOmUuYXBwZW5kQ2hpbGQocil9fX0sZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO3ZhciBvPW4oMCk7bi5uKG8pLmF9LGZ1bmN0aW9uKGUsdCxuKXsoZS5leHBvcnRzPW4oMykoITEpKS5wdXNoKFtlLmksXCJcXG4udnVlLW1vZGFsLXJlc2l6ZXIge1xcclxcbiAgZGlzcGxheTogYmxvY2s7XFxyXFxuICBvdmVyZmxvdzogaGlkZGVuO1xcclxcbiAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgd2lkdGg6IDEycHg7XFxyXFxuICBoZWlnaHQ6IDEycHg7XFxyXFxuICByaWdodDogMDtcXHJcXG4gIGJvdHRvbTogMDtcXHJcXG4gIHotaW5kZXg6IDk5OTk5OTk7XFxyXFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXHJcXG4gIGN1cnNvcjogc2UtcmVzaXplO1xcbn1cXG4udnVlLW1vZGFsLXJlc2l6ZXI6OmFmdGVyIHtcXHJcXG4gIGRpc3BsYXk6IGJsb2NrO1xcclxcbiAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgY29udGVudDogJyc7XFxyXFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXHJcXG4gIGxlZnQ6IDA7XFxyXFxuICB0b3A6IDA7XFxyXFxuICB3aWR0aDogMDtcXHJcXG4gIGhlaWdodDogMDtcXHJcXG4gIGJvcmRlci1ib3R0b206IDEwcHggc29saWQgI2RkZDtcXHJcXG4gIGJvcmRlci1sZWZ0OiAxMHB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG4udnVlLW1vZGFsLXJlc2l6ZXIuY2xpY2tlZDo6YWZ0ZXIge1xcclxcbiAgYm9yZGVyLWJvdHRvbTogMTBweCBzb2xpZCAjMzY5YmU5O1xcbn1cXHJcXG5cIixcIlwiXSl9LGZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjt2YXIgbz1uKDEpO24ubihvKS5hfSxmdW5jdGlvbihlLHQsbil7KGUuZXhwb3J0cz1uKDMpKCExKSkucHVzaChbZS5pLFwiXFxuLnYtLW1vZGFsLWJsb2NrLXNjcm9sbCB7XFxyXFxuICBvdmVyZmxvdzogaGlkZGVuO1xcclxcbiAgd2lkdGg6IDEwMHZ3O1xcbn1cXG4udi0tbW9kYWwtb3ZlcmxheSB7XFxyXFxuICBwb3NpdGlvbjogZml4ZWQ7XFxyXFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcclxcbiAgbGVmdDogMDtcXHJcXG4gIHRvcDogMDtcXHJcXG4gIHdpZHRoOiAxMDAlO1xcclxcbiAgaGVpZ2h0OiAxMDB2aDtcXHJcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTtcXHJcXG4gIHotaW5kZXg6IDk5OTtcXHJcXG4gIG9wYWNpdHk6IDE7XFxufVxcbi52LS1tb2RhbC1vdmVybGF5LnNjcm9sbGFibGUge1xcclxcbiAgaGVpZ2h0OiAxMDAlO1xcclxcbiAgbWluLWhlaWdodDogMTAwdmg7XFxyXFxuICBvdmVyZmxvdy15OiBhdXRvO1xcclxcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xcbn1cXG4udi0tbW9kYWwtb3ZlcmxheSAudi0tbW9kYWwtYmFja2dyb3VuZC1jbGljayB7XFxyXFxuICB3aWR0aDogMTAwJTtcXHJcXG4gIG1pbi1oZWlnaHQ6IDEwMCU7XFxyXFxuICBoZWlnaHQ6IGF1dG87XFxufVxcbi52LS1tb2RhbC1vdmVybGF5IC52LS1tb2RhbC1ib3gge1xcclxcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcclxcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcbi52LS1tb2RhbC1vdmVybGF5LnNjcm9sbGFibGUgLnYtLW1vZGFsLWJveCB7XFxyXFxuICBtYXJnaW4tYm90dG9tOiAycHg7XFxufVxcbi52LS1tb2RhbCB7XFxyXFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcXHJcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxyXFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxyXFxuICBib3gtc2hhZG93OiAwIDIwcHggNjBweCAtMnB4IHJnYmEoMjcsIDMzLCA1OCwgMC40KTtcXHJcXG4gIHBhZGRpbmc6IDA7XFxufVxcbi52LS1tb2RhbC52LS1tb2RhbC1mdWxsc2NyZWVuIHtcXHJcXG4gIHdpZHRoOiAxMDB2dztcXHJcXG4gIGhlaWdodDogMTAwdmg7XFxyXFxuICBtYXJnaW46IDA7XFxyXFxuICBsZWZ0OiAwO1xcclxcbiAgdG9wOiAwO1xcbn1cXG4udi0tbW9kYWwtdG9wLXJpZ2h0IHtcXHJcXG4gIGRpc3BsYXk6IGJsb2NrO1xcclxcbiAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgcmlnaHQ6IDA7XFxyXFxuICB0b3A6IDA7XFxufVxcbi5vdmVybGF5LWZhZGUtZW50ZXItYWN0aXZlLFxcclxcbi5vdmVybGF5LWZhZGUtbGVhdmUtYWN0aXZlIHtcXHJcXG4gIHRyYW5zaXRpb246IGFsbCAwLjJzO1xcbn1cXG4ub3ZlcmxheS1mYWRlLWVudGVyLFxcclxcbi5vdmVybGF5LWZhZGUtbGVhdmUtYWN0aXZlIHtcXHJcXG4gIG9wYWNpdHk6IDA7XFxufVxcbi5uaWNlLW1vZGFsLWZhZGUtZW50ZXItYWN0aXZlLFxcclxcbi5uaWNlLW1vZGFsLWZhZGUtbGVhdmUtYWN0aXZlIHtcXHJcXG4gIHRyYW5zaXRpb246IGFsbCAwLjRzO1xcbn1cXG4ubmljZS1tb2RhbC1mYWRlLWVudGVyLFxcclxcbi5uaWNlLW1vZGFsLWZhZGUtbGVhdmUtYWN0aXZlIHtcXHJcXG4gIG9wYWNpdHk6IDA7XFxyXFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwcHgpO1xcbn1cXHJcXG5cIixcIlwiXSl9LGZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjt2YXIgbz1uKDIpO24ubihvKS5hfSxmdW5jdGlvbihlLHQsbil7KGUuZXhwb3J0cz1uKDMpKCExKSkucHVzaChbZS5pLFwiXFxuLnZ1ZS1kaWFsb2cgZGl2IHtcXHJcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcbi52dWUtZGlhbG9nIC5kaWFsb2ctZmxleCB7XFxyXFxuICB3aWR0aDogMTAwJTtcXHJcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuLnZ1ZS1kaWFsb2cgLmRpYWxvZy1jb250ZW50IHtcXHJcXG4gIGZsZXg6IDEgMCBhdXRvO1xcclxcbiAgd2lkdGg6IDEwMCU7XFxyXFxuICBwYWRkaW5nOiAxNXB4O1xcclxcbiAgZm9udC1zaXplOiAxNHB4O1xcbn1cXG4udnVlLWRpYWxvZyAuZGlhbG9nLWMtdGl0bGUge1xcclxcbiAgZm9udC13ZWlnaHQ6IDYwMDtcXHJcXG4gIHBhZGRpbmctYm90dG9tOiAxNXB4O1xcbn1cXG4udnVlLWRpYWxvZyAuZGlhbG9nLWMtdGV4dCB7XFxufVxcbi52dWUtZGlhbG9nIC52dWUtZGlhbG9nLWJ1dHRvbnMge1xcclxcbiAgZGlzcGxheTogZmxleDtcXHJcXG4gIGZsZXg6IDAgMSBhdXRvO1xcclxcbiAgd2lkdGg6IDEwMCU7XFxyXFxuICBib3JkZXItdG9wOiAxcHggc29saWQgI2VlZTtcXG59XFxuLnZ1ZS1kaWFsb2cgLnZ1ZS1kaWFsb2ctYnV0dG9ucy1ub25lIHtcXHJcXG4gIHdpZHRoOiAxMDAlO1xcclxcbiAgcGFkZGluZy1ib3R0b206IDE1cHg7XFxufVxcbi52dWUtZGlhbG9nLWJ1dHRvbiB7XFxyXFxuICBmb250LXNpemU6IDEycHggIWltcG9ydGFudDtcXHJcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcclxcbiAgcGFkZGluZzogMDtcXHJcXG4gIG1hcmdpbjogMDtcXHJcXG4gIGJvcmRlcjogMDtcXHJcXG4gIGN1cnNvcjogcG9pbnRlcjtcXHJcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxyXFxuICBsaW5lLWhlaWdodDogNDBweDtcXHJcXG4gIGhlaWdodDogNDBweDtcXHJcXG4gIGNvbG9yOiBpbmhlcml0O1xcclxcbiAgZm9udDogaW5oZXJpdDtcXHJcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcbi52dWUtZGlhbG9nLWJ1dHRvbjpob3ZlciB7XFxyXFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDEpO1xcbn1cXG4udnVlLWRpYWxvZy1idXR0b246YWN0aXZlIHtcXHJcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4wMjUpO1xcbn1cXG4udnVlLWRpYWxvZy1idXR0b246bm90KDpmaXJzdC1vZi10eXBlKSB7XFxyXFxuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNlZWU7XFxufVxcclxcblwiLFwiXCJdKX0sZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO24ucih0KTt2YXIgbz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10LiRjcmVhdGVFbGVtZW50LG49dC5fc2VsZi5fY3x8ZTtyZXR1cm4gbihcInRyYW5zaXRpb25cIix7YXR0cnM6e25hbWU6dC5vdmVybGF5VHJhbnNpdGlvbn19LFt0LnZpc2liaWxpdHkub3ZlcmxheT9uKFwiZGl2XCIse3JlZjpcIm92ZXJsYXlcIixjbGFzczp0Lm92ZXJsYXlDbGFzcyxhdHRyczp7XCJhcmlhLWV4cGFuZGVkXCI6dC52aXNpYmlsaXR5Lm92ZXJsYXkudG9TdHJpbmcoKSxcImRhdGEtbW9kYWxcIjp0Lm5hbWV9fSxbbihcImRpdlwiLHtzdGF0aWNDbGFzczpcInYtLW1vZGFsLWJhY2tncm91bmQtY2xpY2tcIixvbjp7bW91c2Vkb3duOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRhcmdldCE9PWUuY3VycmVudFRhcmdldD9udWxsOnQuaGFuZGxlQmFja2dyb3VuZENsaWNrKGUpfSx0b3VjaHN0YXJ0OmZ1bmN0aW9uKGUpe3JldHVybiBlLnRhcmdldCE9PWUuY3VycmVudFRhcmdldD9udWxsOnQuaGFuZGxlQmFja2dyb3VuZENsaWNrKGUpfX19LFtuKFwiZGl2XCIse3N0YXRpY0NsYXNzOlwidi0tbW9kYWwtdG9wLXJpZ2h0XCJ9LFt0Ll90KFwidG9wLXJpZ2h0XCIpXSwyKSx0Ll92KFwiIFwiKSxuKFwidHJhbnNpdGlvblwiLHthdHRyczp7bmFtZTp0LnRyYW5zaXRpb259LG9uOntcImJlZm9yZS1lbnRlclwiOnQuYmVmb3JlVHJhbnNpdGlvbkVudGVyLFwiYWZ0ZXItZW50ZXJcIjp0LmFmdGVyVHJhbnNpdGlvbkVudGVyLFwiYWZ0ZXItbGVhdmVcIjp0LmFmdGVyVHJhbnNpdGlvbkxlYXZlfX0sW3QudmlzaWJpbGl0eS5tb2RhbD9uKFwiZGl2XCIse3JlZjpcIm1vZGFsXCIsY2xhc3M6dC5tb2RhbENsYXNzLHN0eWxlOnQubW9kYWxTdHlsZX0sW3QuX3QoXCJkZWZhdWx0XCIpLHQuX3YoXCIgXCIpLHQucmVzaXphYmxlJiYhdC5pc0F1dG9IZWlnaHQ/bihcInJlc2l6ZXJcIix7YXR0cnM6e1wibWluLXdpZHRoXCI6dC5taW5XaWR0aCxcIm1pbi1oZWlnaHRcIjp0Lm1pbkhlaWdodH0sb246e3Jlc2l6ZTp0LmhhbmRsZU1vZGFsUmVzaXplfX0pOnQuX2UoKV0sMik6dC5fZSgpXSldLDEpXSk6dC5fZSgpXSl9LGk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRjcmVhdGVFbGVtZW50O3JldHVybih0aGlzLl9zZWxmLl9jfHxlKShcImRpdlwiLHtjbGFzczp0aGlzLmNsYXNzTmFtZX0pfTtpLl93aXRoU3RyaXBwZWQ9by5fd2l0aFN0cmlwcGVkPSEwO3ZhciBzPWZ1bmN0aW9uKCl7dmFyIGU9MDxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjA7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuKGUrKykudG9TdHJpbmcoKX19KCksdT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG48ZT9lOnQ8bj90Om59LHI9ZnVuY3Rpb24oKXt2YXIgZT0wPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307cmV0dXJuIGZ1bmN0aW9uKGkpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e30sdD1PYmplY3Qua2V5cyhyKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYodD10LmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpLmVudW1lcmFibGV9KSkpLHQuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdCxuLG87dD1pLG89cltuPWVdLG4gaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHt2YWx1ZTpvLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtuXT1vfSl9cmV0dXJuIGl9KHtpZDpzKCksdGltZXN0YW1wOkRhdGUubm93KCksY2FuY2VsZWQ6ITF9LGUpfSxhPXtuYW1lOlwiVnVlSnNNb2RhbFJlc2l6ZXJcIixwcm9wczp7bWluSGVpZ2h0Ont0eXBlOk51bWJlcixkZWZhdWx0OjB9LG1pbldpZHRoOnt0eXBlOk51bWJlcixkZWZhdWx0OjB9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2NsaWNrZWQ6ITEsc2l6ZTp7fX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt0aGlzLiRlbC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsdGhpcy5zdGFydCwhMSl9LGNvbXB1dGVkOntjbGFzc05hbWU6ZnVuY3Rpb24oKXtyZXR1cm57XCJ2dWUtbW9kYWwtcmVzaXplclwiOiEwLGNsaWNrZWQ6dGhpcy5jbGlja2VkfX19LG1ldGhvZHM6e3N0YXJ0OmZ1bmN0aW9uKGUpe3RoaXMuY2xpY2tlZD0hMCx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHRoaXMubW91c2Vtb3ZlLCExKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIix0aGlzLnN0b3AsITEpLGUuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5jbGlja2VkPSExLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsdGhpcy5tb3VzZW1vdmUsITEpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLHRoaXMuc3RvcCwhMSksdGhpcy4kZW1pdChcInJlc2l6ZS1zdG9wXCIse2VsZW1lbnQ6dGhpcy4kZWwucGFyZW50RWxlbWVudCxzaXplOnRoaXMuc2l6ZX0pfSxtb3VzZW1vdmU6ZnVuY3Rpb24oZSl7dGhpcy5yZXNpemUoZSl9LHJlc2l6ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLiRlbC5wYXJlbnRFbGVtZW50O2lmKHQpe3ZhciBuPWUuY2xpZW50WC10Lm9mZnNldExlZnQsbz1lLmNsaWVudFktdC5vZmZzZXRUb3A7bj11KHRoaXMubWluV2lkdGgsd2luZG93LmlubmVyV2lkdGgsbiksbz11KHRoaXMubWluSGVpZ2h0LHdpbmRvdy5pbm5lckhlaWdodCxvKSx0aGlzLnNpemU9e3dpZHRoOm4saGVpZ2h0Om99LHQuc3R5bGUud2lkdGg9bitcInB4XCIsdC5zdHlsZS5oZWlnaHQ9bytcInB4XCIsdGhpcy4kZW1pdChcInJlc2l6ZVwiLHtlbGVtZW50OnQsc2l6ZTp0aGlzLnNpemV9KX19fX07big1KTtmdW5jdGlvbiBsKGUsdCxuLG8saSxyLGEscyl7dmFyIGwsZD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2Uub3B0aW9uczplO2lmKHQmJihkLnJlbmRlcj10LGQuc3RhdGljUmVuZGVyRm5zPW4sZC5fY29tcGlsZWQ9ITApLG8mJihkLmZ1bmN0aW9uYWw9ITApLHImJihkLl9zY29wZUlkPVwiZGF0YS12LVwiK3IpLGE/KGw9ZnVuY3Rpb24oZSl7KGU9ZXx8dGhpcy4kdm5vZGUmJnRoaXMuJHZub2RlLnNzckNvbnRleHR8fHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC4kdm5vZGUmJnRoaXMucGFyZW50LiR2bm9kZS5zc3JDb250ZXh0KXx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX198fChlPV9fVlVFX1NTUl9DT05URVhUX18pLGkmJmkuY2FsbCh0aGlzLGUpLGUmJmUuX3JlZ2lzdGVyZWRDb21wb25lbnRzJiZlLl9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQoYSl9LGQuX3NzclJlZ2lzdGVyPWwpOmkmJihsPXM/ZnVuY3Rpb24oKXtpLmNhbGwodGhpcyx0aGlzLiRyb290LiRvcHRpb25zLnNoYWRvd1Jvb3QpfTppKSxsKWlmKGQuZnVuY3Rpb25hbCl7ZC5faW5qZWN0U3R5bGVzPWw7dmFyIHU9ZC5yZW5kZXI7ZC5yZW5kZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbC5jYWxsKHQpLHUoZSx0KX19ZWxzZXt2YXIgYz1kLmJlZm9yZUNyZWF0ZTtkLmJlZm9yZUNyZWF0ZT1jP1tdLmNvbmNhdChjLGwpOltsXX1yZXR1cm57ZXhwb3J0czplLG9wdGlvbnM6ZH19dmFyIGQ9bChhLGksW10sITEsbnVsbCxudWxsLG51bGwpO2Qub3B0aW9ucy5fX2ZpbGU9XCJzcmMvUmVzaXplci52dWVcIjt2YXIgYz1kLmV4cG9ydHM7ZnVuY3Rpb24gaChlKXtyZXR1cm4oaD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9cInN5bWJvbFwiOnR5cGVvZiBlfSkoZSl9dmFyIGY9XCJbLStdP1swLTldKi4/WzAtOV0rXCIscD1be25hbWU6XCJweFwiLHJlZ2V4cDpuZXcgUmVnRXhwKFwiXlwiLmNvbmNhdChmLFwicHgkXCIpKX0se25hbWU6XCIlXCIscmVnZXhwOm5ldyBSZWdFeHAoXCJeXCIuY29uY2F0KGYsXCIlJFwiKSl9LHtuYW1lOlwicHhcIixyZWdleHA6bmV3IFJlZ0V4cChcIl5cIi5jb25jYXQoZixcIiRcIikpfV0sdj1mdW5jdGlvbihlKXtzd2l0Y2goaChlKSl7Y2FzZVwibnVtYmVyXCI6cmV0dXJue3R5cGU6XCJweFwiLHZhbHVlOmV9O2Nhc2VcInN0cmluZ1wiOnJldHVybiBmdW5jdGlvbihlKXtpZihcImF1dG9cIj09PWUpcmV0dXJue3R5cGU6ZSx2YWx1ZTowfTtmb3IodmFyIHQ9MDt0PHAubGVuZ3RoO3QrKyl7dmFyIG49cFt0XTtpZihuLnJlZ2V4cC50ZXN0KGUpKXJldHVybnt0eXBlOm4ubmFtZSx2YWx1ZTpwYXJzZUZsb2F0KGUpfX1yZXR1cm57dHlwZTpcIlwiLHZhbHVlOmV9fShlKTtkZWZhdWx0OnJldHVybnt0eXBlOlwiXCIsdmFsdWU6ZX19fSxtPWZ1bmN0aW9uKGUpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXJldHVybiAwPD1lO3ZhciB0PXYoZSk7cmV0dXJuKFwiJVwiPT09dC50eXBlfHxcInB4XCI9PT10LnR5cGUpJiYwPHQudmFsdWV9O3ZhciBnPXtuYW1lOlwiVnVlSnNNb2RhbFwiLHByb3BzOntuYW1lOntyZXF1aXJlZDohMCx0eXBlOlN0cmluZ30sZGVsYXk6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MH0scmVzaXphYmxlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sYWRhcHRpdmU6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxkcmFnZ2FibGU6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nXSxkZWZhdWx0OiExfSxzY3JvbGxhYmxlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0scmVzZXQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxvdmVybGF5VHJhbnNpdGlvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcIm92ZXJsYXktZmFkZVwifSx0cmFuc2l0aW9uOnt0eXBlOlN0cmluZ30sY2xpY2tUb0Nsb3NlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sY2xhc3Nlczp7dHlwZTpbU3RyaW5nLEFycmF5XSxkZWZhdWx0Olwidi0tbW9kYWxcIn0sbWluV2lkdGg6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MCx2YWxpZGF0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuIDA8PWV9fSxtaW5IZWlnaHQ6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MCx2YWxpZGF0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuIDA8PWV9fSxtYXhXaWR0aDp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxLzB9LG1heEhlaWdodDp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxLzB9LHdpZHRoOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjYwMCx2YWxpZGF0b3I6bX0saGVpZ2h0Ont0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OjMwMCx2YWxpZGF0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuXCJhdXRvXCI9PT1lfHxtKGUpfX0scGl2b3RYOnt0eXBlOk51bWJlcixkZWZhdWx0Oi41LHZhbGlkYXRvcjpmdW5jdGlvbihlKXtyZXR1cm4gMDw9ZSYmZTw9MX19LHBpdm90WTp7dHlwZTpOdW1iZXIsZGVmYXVsdDouNSx2YWxpZGF0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuIDA8PWUmJmU8PTF9fX0sY29tcG9uZW50czp7UmVzaXplcjpjfSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3Zpc2libGU6ITEsdmlzaWJpbGl0eTp7bW9kYWw6ITEsb3ZlcmxheTohMX0sc2hpZnQ6e2xlZnQ6MCx0b3A6MH0sbW9kYWw6e3dpZHRoOjAsd2lkdGhUeXBlOlwicHhcIixoZWlnaHQ6MCxoZWlnaHRUeXBlOlwicHhcIixyZW5kZXJlZEhlaWdodDowfSx3aW5kb3c6e3dpZHRoOjAsaGVpZ2h0OjB9LG11dGF0aW9uT2JzZXJ2ZXI6bnVsbH19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLnNldEluaXRpYWxTaXplKCl9LGJlZm9yZU1vdW50OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih6LmV2ZW50LiRvbihcInRvZ2dsZVwiLHRoaXMuaGFuZGxlVG9nZ2xlRXZlbnQpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdGhpcy5oYW5kbGVXaW5kb3dSZXNpemUpLHRoaXMuaGFuZGxlV2luZG93UmVzaXplKCksdGhpcy5zY3JvbGxhYmxlJiYhdGhpcy5pc0F1dG9IZWlnaHQmJmNvbnNvbGUud2FybignTW9kYWwgXCInLmNvbmNhdCh0aGlzLm5hbWUsJ1wiIGhhcyBzY3JvbGxhYmxlIGZsYWcgc2V0IHRvIHRydWUgJykrJ2J1dCBoZWlnaHQgaXMgbm90IFwiYXV0b1wiICgnLmNvbmNhdCh0aGlzLmhlaWdodCxcIilcIikpLHRoaXMuaXNBdXRvSGVpZ2h0KXt2YXIgZT1mdW5jdGlvbigpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cpZm9yKHZhciBlPVtcIlwiLFwiV2ViS2l0XCIsXCJNb3pcIixcIk9cIixcIk1zXCJdLHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIG49ZVt0XStcIk11dGF0aW9uT2JzZXJ2ZXJcIjtpZihuIGluIHdpbmRvdylyZXR1cm4gd2luZG93W25dfXJldHVybiExfSgpO2UmJih0aGlzLm11dGF0aW9uT2JzZXJ2ZXI9bmV3IGUoZnVuY3Rpb24oZSl7dC51cGRhdGVSZW5kZXJlZEhlaWdodCgpfSkpfXRoaXMuY2xpY2tUb0Nsb3NlJiZ3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsdGhpcy5oYW5kbGVFc2NhcGVLZXlVcCl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt6LmV2ZW50LiRvZmYoXCJ0b2dnbGVcIix0aGlzLmhhbmRsZVRvZ2dsZUV2ZW50KSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHRoaXMuaGFuZGxlV2luZG93UmVzaXplKSx0aGlzLmNsaWNrVG9DbG9zZSYmd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLHRoaXMuaGFuZGxlRXNjYXBlS2V5VXApLHRoaXMuc2Nyb2xsYWJsZSYmZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKFwidi0tbW9kYWwtYmxvY2stc2Nyb2xsXCIpfSxjb21wdXRlZDp7aXNBdXRvSGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuXCJhdXRvXCI9PT10aGlzLm1vZGFsLmhlaWdodFR5cGV9LHBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy53aW5kb3csdD10aGlzLnNoaWZ0LG49dGhpcy5waXZvdFgsbz10aGlzLnBpdm90WSxpPXRoaXMudHJ1ZU1vZGFsV2lkdGgscj10aGlzLnRydWVNb2RhbEhlaWdodCxhPWUud2lkdGgtaSxzPWUuaGVpZ2h0LXIsbD10LmxlZnQrbiphLGQ9dC50b3ArbypzO3JldHVybntsZWZ0OnBhcnNlSW50KHUoMCxhLGwpKSx0b3A6cGFyc2VJbnQodSgwLHMsZCkpfX0sdHJ1ZU1vZGFsV2lkdGg6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLndpbmRvdyx0PXRoaXMubW9kYWwsbj10aGlzLmFkYXB0aXZlLG89dGhpcy5taW5XaWR0aCxpPXRoaXMubWF4V2lkdGgscj1cIiVcIj09PXQud2lkdGhUeXBlP2Uud2lkdGgvMTAwKnQud2lkdGg6dC53aWR0aCxhPU1hdGgubWluKGUud2lkdGgsaSk7cmV0dXJuIG4/dShvLGEscik6cn0sdHJ1ZU1vZGFsSGVpZ2h0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy53aW5kb3csdD10aGlzLm1vZGFsLG49dGhpcy5pc0F1dG9IZWlnaHQsbz10aGlzLmFkYXB0aXZlLGk9dGhpcy5tYXhIZWlnaHQscj1cIiVcIj09PXQuaGVpZ2h0VHlwZT9lLmhlaWdodC8xMDAqdC5oZWlnaHQ6dC5oZWlnaHQ7aWYobilyZXR1cm4gdGhpcy5tb2RhbC5yZW5kZXJlZEhlaWdodDt2YXIgYT1NYXRoLm1pbihlLmhlaWdodCxpKTtyZXR1cm4gbz91KHRoaXMubWluSGVpZ2h0LGEscik6cn0sb3ZlcmxheUNsYXNzOmZ1bmN0aW9uKCl7cmV0dXJue1widi0tbW9kYWwtb3ZlcmxheVwiOiEwLHNjcm9sbGFibGU6dGhpcy5zY3JvbGxhYmxlJiZ0aGlzLmlzQXV0b0hlaWdodH19LG1vZGFsQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm5bXCJ2LS1tb2RhbC1ib3hcIix0aGlzLmNsYXNzZXNdfSxtb2RhbFN0eWxlOmZ1bmN0aW9uKCl7cmV0dXJue3RvcDp0aGlzLnBvc2l0aW9uLnRvcCtcInB4XCIsbGVmdDp0aGlzLnBvc2l0aW9uLmxlZnQrXCJweFwiLHdpZHRoOnRoaXMudHJ1ZU1vZGFsV2lkdGgrXCJweFwiLGhlaWdodDp0aGlzLmlzQXV0b0hlaWdodD9cImF1dG9cIjp0aGlzLnRydWVNb2RhbEhlaWdodCtcInB4XCJ9fX0sd2F0Y2g6e3Zpc2libGU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztlPyh0aGlzLnZpc2liaWxpdHkub3ZlcmxheT0hMCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC52aXNpYmlsaXR5Lm1vZGFsPSEwLHQuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dC5hZGREcmFnZ2FibGVMaXN0ZW5lcnMoKSx0LmNhbGxBZnRlckV2ZW50KCEwKX0pfSx0aGlzLmRlbGF5KSk6KHRoaXMudmlzaWJpbGl0eS5tb2RhbD0hMSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC52aXNpYmlsaXR5Lm92ZXJsYXk9ITEsdC4kbmV4dFRpY2soZnVuY3Rpb24oKXt0LnJlbW92ZURyYWdnYWJsZUxpc3RlbmVycygpLHQuY2FsbEFmdGVyRXZlbnQoITEpfSl9LHRoaXMuZGVsYXkpKX19LG1ldGhvZHM6e2hhbmRsZVRvZ2dsZUV2ZW50OmZ1bmN0aW9uKGUsdCxuKXtpZih0aGlzLm5hbWU9PT1lKXt2YXIgbz12b2lkIDA9PT10PyF0aGlzLnZpc2libGU6dDt0aGlzLnRvZ2dsZShvLG4pfX0sc2V0SW5pdGlhbFNpemU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm1vZGFsLHQ9dih0aGlzLndpZHRoKSxuPXYodGhpcy5oZWlnaHQpO2Uud2lkdGg9dC52YWx1ZSxlLndpZHRoVHlwZT10LnR5cGUsZS5oZWlnaHQ9bi52YWx1ZSxlLmhlaWdodFR5cGU9bi50eXBlfSxoYW5kbGVFc2NhcGVLZXlVcDpmdW5jdGlvbihlKXsyNz09PWUud2hpY2gmJnRoaXMudmlzaWJsZSYmdGhpcy4kbW9kYWwuaGlkZSh0aGlzLm5hbWUpfSxoYW5kbGVXaW5kb3dSZXNpemU6ZnVuY3Rpb24oKXt0aGlzLndpbmRvdy53aWR0aD13aW5kb3cuaW5uZXJXaWR0aCx0aGlzLndpbmRvdy5oZWlnaHQ9d2luZG93LmlubmVySGVpZ2h0LHRoaXMuZW5zdXJlU2hpZnRJbldpbmRvd0JvdW5kcygpfSxjcmVhdGVNb2RhbEV2ZW50OmZ1bmN0aW9uKCl7dmFyIGU9MDxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3JldHVybiByKGZ1bmN0aW9uKGkpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e30sdD1PYmplY3Qua2V5cyhyKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYodD10LmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpLmVudW1lcmFibGV9KSkpLHQuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdCxuLG87dD1pLG89cltuPWVdLG4gaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHt2YWx1ZTpvLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtuXT1vfSl9cmV0dXJuIGl9KHtuYW1lOnRoaXMubmFtZSxyZWY6dGhpcy4kcmVmcy5tb2RhbH0sZSkpfSxoYW5kbGVNb2RhbFJlc2l6ZTpmdW5jdGlvbihlKXt0aGlzLm1vZGFsLndpZHRoVHlwZT1cInB4XCIsdGhpcy5tb2RhbC53aWR0aD1lLnNpemUud2lkdGgsdGhpcy5tb2RhbC5oZWlnaHRUeXBlPVwicHhcIix0aGlzLm1vZGFsLmhlaWdodD1lLnNpemUuaGVpZ2h0O3ZhciB0PXRoaXMubW9kYWwuc2l6ZTt0aGlzLiRlbWl0KFwicmVzaXplXCIsdGhpcy5jcmVhdGVNb2RhbEV2ZW50KHtzaXplOnR9KSl9LHRvZ2dsZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucmVzZXQsbz10aGlzLnNjcm9sbGFibGUsaT10aGlzLnZpc2libGU7aWYoaSE9PWUpe3ZhciByPWk/XCJiZWZvcmUtY2xvc2VcIjpcImJlZm9yZS1vcGVuXCI7XCJiZWZvcmUtb3BlblwiPT09cj8oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5hY3RpdmVFbGVtZW50JiZcIkJPRFlcIiE9PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQudGFnTmFtZSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKSxuJiYodGhpcy5zZXRJbml0aWFsU2l6ZSgpLHRoaXMuc2hpZnQubGVmdD0wLHRoaXMuc2hpZnQudG9wPTApLG8mJmRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcInYtLW1vZGFsLWJsb2NrLXNjcm9sbFwiKSk6byYmZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKFwidi0tbW9kYWwtYmxvY2stc2Nyb2xsXCIpO3ZhciBhPSExLHM9dGhpcy5jcmVhdGVNb2RhbEV2ZW50KHtzdG9wOmZ1bmN0aW9uKCl7YT0hMH0sc3RhdGU6ZSxwYXJhbXM6dH0pO3RoaXMuJGVtaXQocixzKSxhfHwodGhpcy52aXNpYmxlPWUpfX0sZ2V0RHJhZ2dhYmxlRWxlbWVudDpmdW5jdGlvbigpe3ZhciBlPVwic3RyaW5nXCIhPXR5cGVvZiB0aGlzLmRyYWdnYWJsZT9cIi52LS1tb2RhbC1ib3hcIjp0aGlzLmRyYWdnYWJsZTtyZXR1cm4gZT90aGlzLiRyZWZzLm92ZXJsYXkucXVlcnlTZWxlY3RvcihlKTpudWxsfSxoYW5kbGVCYWNrZ3JvdW5kQ2xpY2s6ZnVuY3Rpb24oKXt0aGlzLmNsaWNrVG9DbG9zZSYmdGhpcy50b2dnbGUoITEpfSxjYWxsQWZ0ZXJFdmVudDpmdW5jdGlvbihlKXtlP3RoaXMuY29ubmVjdE9ic2VydmVyKCk6dGhpcy5kaXNjb25uZWN0T2JzZXJ2ZXIoKTt2YXIgdD1lP1wib3BlbmVkXCI6XCJjbG9zZWRcIixuPXRoaXMuY3JlYXRlTW9kYWxFdmVudCh7c3RhdGU6ZX0pO3RoaXMuJGVtaXQodCxuKX0sYWRkRHJhZ2dhYmxlTGlzdGVuZXJzOmZ1bmN0aW9uKCl7dmFyIHI9dGhpcztpZih0aGlzLmRyYWdnYWJsZSl7dmFyIGU9dGhpcy5nZXREcmFnZ2FibGVFbGVtZW50KCk7aWYoZSl7dmFyIGE9MCxzPTAsbD0wLGQ9MCx1PWZ1bmN0aW9uKGUpe3JldHVybiBlLnRvdWNoZXMmJjA8ZS50b3VjaGVzLmxlbmd0aD9lLnRvdWNoZXNbMF06ZX0sdD1mdW5jdGlvbihlKXt2YXIgdD1lLnRhcmdldDtpZighdHx8XCJJTlBVVFwiIT09dC5ub2RlTmFtZSl7dmFyIG49dShlKSxvPW4uY2xpZW50WCxpPW4uY2xpZW50WTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsYyksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLGMpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsaCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsaCksYT1vLHM9aSxsPXIuc2hpZnQubGVmdCxkPXIuc2hpZnQudG9wfX0sYz1mdW5jdGlvbihlKXt2YXIgdD11KGUpLG49dC5jbGllbnRYLG89dC5jbGllbnRZO3Iuc2hpZnQubGVmdD1sK24tYSxyLnNoaWZ0LnRvcD1kK28tcyxlLnByZXZlbnREZWZhdWx0KCl9LGg9ZnVuY3Rpb24gZSh0KXtyLmVuc3VyZVNoaWZ0SW5XaW5kb3dCb3VuZHMoKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsYyksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLGMpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsZSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsZSksdC5wcmV2ZW50RGVmYXVsdCgpfTtlLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIix0KSxlLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsdCl9fX0scmVtb3ZlRHJhZ2dhYmxlTGlzdGVuZXJzOmZ1bmN0aW9uKCl7fSx1cGRhdGVSZW5kZXJlZEhlaWdodDpmdW5jdGlvbigpe3RoaXMuJHJlZnMubW9kYWwmJih0aGlzLm1vZGFsLnJlbmRlcmVkSGVpZ2h0PXRoaXMuJHJlZnMubW9kYWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KX0sY29ubmVjdE9ic2VydmVyOmZ1bmN0aW9uKCl7dGhpcy5tdXRhdGlvbk9ic2VydmVyJiZ0aGlzLm11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLiRyZWZzLm92ZXJsYXkse2NoaWxkTGlzdDohMCxhdHRyaWJ1dGVzOiEwLHN1YnRyZWU6ITB9KX0sZGlzY29ubmVjdE9ic2VydmVyOmZ1bmN0aW9uKCl7dGhpcy5tdXRhdGlvbk9ic2VydmVyJiZ0aGlzLm11dGF0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpfSxiZWZvcmVUcmFuc2l0aW9uRW50ZXI6ZnVuY3Rpb24oKXt0aGlzLmNvbm5lY3RPYnNlcnZlcigpfSxhZnRlclRyYW5zaXRpb25FbnRlcjpmdW5jdGlvbigpe30sYWZ0ZXJUcmFuc2l0aW9uTGVhdmU6ZnVuY3Rpb24oKXt9LGVuc3VyZVNoaWZ0SW5XaW5kb3dCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLndpbmRvdyx0PXRoaXMuc2hpZnQsbj10aGlzLnBpdm90WCxvPXRoaXMucGl2b3RZLGk9dGhpcy50cnVlTW9kYWxXaWR0aCxyPXRoaXMudHJ1ZU1vZGFsSGVpZ2h0LGE9ZS53aWR0aC1pLHM9ZS5oZWlnaHQtcixsPXQubGVmdCtuKmEsZD10LnRvcCtvKnM7dGhpcy5zaGlmdC5sZWZ0LT1sLXUoMCxhLGwpLHRoaXMuc2hpZnQudG9wLT1kLXUoMCxzLGQpfX19LGI9KG4oNyksbChnLG8sW10sITEsbnVsbCxudWxsLG51bGwpKTtiLm9wdGlvbnMuX19maWxlPVwic3JjL01vZGFsLnZ1ZVwiO3ZhciB5PWIuZXhwb3J0cyx3PWZ1bmN0aW9uKCl7dmFyIG49dGhpcyxlPW4uJGNyZWF0ZUVsZW1lbnQsbz1uLl9zZWxmLl9jfHxlO3JldHVybiBvKFwibW9kYWxcIix7YXR0cnM6e25hbWU6XCJkaWFsb2dcIixoZWlnaHQ6XCJhdXRvXCIsY2xhc3NlczpbXCJ2LS1tb2RhbFwiLFwidnVlLWRpYWxvZ1wiLHRoaXMucGFyYW1zLmNsYXNzXSx3aWR0aDpuLndpZHRoLFwicGl2b3QteVwiOi4zLGFkYXB0aXZlOiEwLGNsaWNrVG9DbG9zZTpuLmNsaWNrVG9DbG9zZSx0cmFuc2l0aW9uOm4udHJhbnNpdGlvbn0sb246e1wiYmVmb3JlLW9wZW5cIjpuLmJlZm9yZU9wZW5lZCxcImJlZm9yZS1jbG9zZVwiOm4uYmVmb3JlQ2xvc2VkLG9wZW5lZDpmdW5jdGlvbihlKXtuLiRlbWl0KFwib3BlbmVkXCIsZSl9LGNsb3NlZDpmdW5jdGlvbihlKXtuLiRlbWl0KFwiY2xvc2VkXCIsZSl9fX0sW28oXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJkaWFsb2ctY29udGVudFwifSxbbi5wYXJhbXMudGl0bGU/byhcImRpdlwiLHtzdGF0aWNDbGFzczpcImRpYWxvZy1jLXRpdGxlXCIsZG9tUHJvcHM6e2lubmVySFRNTDpuLl9zKG4ucGFyYW1zLnRpdGxlfHxcIlwiKX19KTpuLl9lKCksbi5fdihcIiBcIiksbi5wYXJhbXMuY29tcG9uZW50P28obi5wYXJhbXMuY29tcG9uZW50LG4uX2Ioe3RhZzpcImNvbXBvbmVudFwifSxcImNvbXBvbmVudFwiLG4ucGFyYW1zLnByb3BzLCExKSk6byhcImRpdlwiLHtzdGF0aWNDbGFzczpcImRpYWxvZy1jLXRleHRcIixkb21Qcm9wczp7aW5uZXJIVE1MOm4uX3Mobi5wYXJhbXMudGV4dHx8XCJcIil9fSldLDEpLG4uX3YoXCIgXCIpLG4uYnV0dG9ucz9vKFwiZGl2XCIse3N0YXRpY0NsYXNzOlwidnVlLWRpYWxvZy1idXR0b25zXCJ9LG4uX2wobi5idXR0b25zLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8oXCJidXR0b25cIix7a2V5OnQsY2xhc3M6ZS5jbGFzc3x8XCJ2dWUtZGlhbG9nLWJ1dHRvblwiLHN0eWxlOm4uYnV0dG9uU3R5bGUsYXR0cnM6e3R5cGU6XCJidXR0b25cIn0sZG9tUHJvcHM6e2lubmVySFRNTDpuLl9zKGUudGl0bGUpfSxvbjp7Y2xpY2s6ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKSxuLmNsaWNrKHQsZSl9fX0sW24uX3YoXCJcXG4gICAgICBcIituLl9zKGUudGl0bGUpK1wiXFxuICAgIFwiKV0pfSkpOm8oXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJ2dWUtZGlhbG9nLWJ1dHRvbnMtbm9uZVwifSldKX07dy5fd2l0aFN0cmlwcGVkPSEwO3ZhciB4PXtuYW1lOlwiVnVlSnNEaWFsb2dcIixwcm9wczp7d2lkdGg6e3R5cGU6W051bWJlcixTdHJpbmddLGRlZmF1bHQ6NDAwfSxjbGlja1RvQ2xvc2U6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSx0cmFuc2l0aW9uOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiZmFkZVwifX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntwYXJhbXM6e30sZGVmYXVsdEJ1dHRvbnM6W3t0aXRsZTpcIkNMT1NFXCJ9XX19LGNvbXB1dGVkOntidXR0b25zOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyYW1zLmJ1dHRvbnN8fHRoaXMuZGVmYXVsdEJ1dHRvbnN9LGJ1dHRvblN0eWxlOmZ1bmN0aW9uKCl7cmV0dXJue2ZsZXg6XCIxIDEgXCIuY29uY2F0KDEwMC90aGlzLmJ1dHRvbnMubGVuZ3RoLFwiJVwiKX19fSxtZXRob2RzOntiZWZvcmVPcGVuZWQ6ZnVuY3Rpb24oZSl7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLHRoaXMub25LZXlVcCksdGhpcy5wYXJhbXM9ZS5wYXJhbXN8fHt9LHRoaXMuJGVtaXQoXCJiZWZvcmUtb3BlbmVkXCIsZSl9LGJlZm9yZUNsb3NlZDpmdW5jdGlvbihlKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsdGhpcy5vbktleVVwKSx0aGlzLnBhcmFtcz17fSx0aGlzLiRlbWl0KFwiYmVmb3JlLWNsb3NlZFwiLGUpfSxjbGljazpmdW5jdGlvbihlLHQpe3ZhciBuPTI8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpcImNsaWNrXCIsbz10aGlzLmJ1dHRvbnNbZV07byYmXCJmdW5jdGlvblwiPT10eXBlb2Ygby5oYW5kbGVyP28uaGFuZGxlcihlLHQse3NvdXJjZTpufSk6dGhpcy4kbW9kYWwuaGlkZShcImRpYWxvZ1wiKX0sb25LZXlVcDpmdW5jdGlvbihlKXtpZigxMz09PWUud2hpY2gmJjA8dGhpcy5idXR0b25zLmxlbmd0aCl7dmFyIHQ9MT09PXRoaXMuYnV0dG9ucy5sZW5ndGg/MDp0aGlzLmJ1dHRvbnMuZmluZEluZGV4KGZ1bmN0aW9uKGUpe3JldHVybiBlLmRlZmF1bHR9KTstMSE9PXQmJnRoaXMuY2xpY2sodCxlLFwia2V5cHJlc3NcIil9fX19LF89KG4oOSksbCh4LHcsW10sITEsbnVsbCxudWxsLG51bGwpKTtfLm9wdGlvbnMuX19maWxlPVwic3JjL0RpYWxvZy52dWVcIjt2YXIgRT1fLmV4cG9ydHMsUz1mdW5jdGlvbigpe3ZhciBuPXRoaXMsZT1uLiRjcmVhdGVFbGVtZW50LG89bi5fc2VsZi5fY3x8ZTtyZXR1cm4gbyhcImRpdlwiLHthdHRyczp7aWQ6XCJtb2RhbHMtY29udGFpbmVyXCJ9fSxuLl9sKG4ubW9kYWxzLGZ1bmN0aW9uKHQpe3JldHVybiBvKFwibW9kYWxcIixuLl9nKG4uX2Ioe2tleTp0LmlkLG9uOntjbG9zZWQ6ZnVuY3Rpb24oZSl7bi5yZW1vdmUodC5pZCl9fX0sXCJtb2RhbFwiLHQubW9kYWxBdHRycywhMSksdC5tb2RhbExpc3RlbmVycyksW28odC5jb21wb25lbnQsbi5fZyhuLl9iKHt0YWc6XCJjb21wb25lbnRcIixvbjp7Y2xvc2U6ZnVuY3Rpb24oZSl7bi4kbW9kYWwuaGlkZSh0Lm1vZGFsQXR0cnMubmFtZSl9fX0sXCJjb21wb25lbnRcIix0LmNvbXBvbmVudEF0dHJzLCExKSxuLiRsaXN0ZW5lcnMpKV0sMSl9KSl9O1MuX3dpdGhTdHJpcHBlZD0hMDt2YXIgTz1sKHtkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue21vZGFsczpbXX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLiRyb290Ll9keW5hbWljQ29udGFpbmVyPXRoaXN9LG1ldGhvZHM6e2FkZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LG89Mjxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LGk9Mzxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9LHI9cygpLGE9by5uYW1lfHxcIl9keW5hbWljX21vZGFsX1wiK3I7dGhpcy5tb2RhbHMucHVzaCh7aWQ6cixtb2RhbEF0dHJzOmZ1bmN0aW9uKGkpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e30sdD1PYmplY3Qua2V5cyhyKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYodD10LmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpLmVudW1lcmFibGV9KSkpLHQuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdCxuLG87dD1pLG89cltuPWVdLG4gaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHt2YWx1ZTpvLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtuXT1vfSl9cmV0dXJuIGl9KHt9LG8se25hbWU6YX0pLG1vZGFsTGlzdGVuZXJzOmksY29tcG9uZW50OmUsY29tcG9uZW50QXR0cnM6bn0pLHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dC4kbW9kYWwuc2hvdyhhKX0pfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5tb2RhbHMuZmluZEluZGV4KGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkPT09dH0pOy0xIT09ZSYmdGhpcy5tb2RhbHMuc3BsaWNlKGUsMSl9fX0sUyxbXSwhMSxudWxsLG51bGwsbnVsbCk7Ty5vcHRpb25zLl9fZmlsZT1cInNyYy9Nb2RhbHNDb250YWluZXIudnVlXCI7dmFyIGs9Ty5leHBvcnRzO2Z1bmN0aW9uIEMoZSl7cmV0dXJuKEM9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0pKGUpfW4uZCh0LFwiZ2V0TW9kYWxzQ29udGFpbmVyXCIsZnVuY3Rpb24oKXtyZXR1cm4gVH0pO3ZhciBUPWZ1bmN0aW9uKGUsdCxuKXtpZighbi5fZHluYW1pY0NvbnRhaW5lciYmdC5pbmplY3RNb2RhbHNDb250YWluZXIpe3ZhciBvPShpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpKSxpKTtuZXcgZSh7cGFyZW50Om4scmVuZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlKGspfX0pLiRtb3VudChvKX12YXIgaTtyZXR1cm4gbi5fZHluYW1pY0NvbnRhaW5lcn0sJD17aW5zdGFsbDpmdW5jdGlvbihhKXt2YXIgcz0xPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307aWYoIXRoaXMuaW5zdGFsbGVkKXt0aGlzLmluc3RhbGxlZD0hMCx0aGlzLmV2ZW50PW5ldyBhLHRoaXMucm9vdEluc3RhbmNlPW51bGw7dmFyIGU9cy5jb21wb25lbnROYW1lfHxcIk1vZGFsXCIsbD1zLmR5bmFtaWNEZWZhdWx0c3x8e30saT1mdW5jdGlvbihlLHQsbixvKXt2YXIgaT1uJiZuLnJvb3Q/bi5yb290OiQucm9vdEluc3RhbmNlLHI9VChhLHMsaSk7cj9yLmFkZChlLGZ1bmN0aW9uKGkpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciByPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e30sdD1PYmplY3Qua2V5cyhyKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYodD10LmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpLmVudW1lcmFibGV9KSkpLHQuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdCxuLG87dD1pLG89cltuPWVdLG4gaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHt2YWx1ZTpvLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtuXT1vfSl9cmV0dXJuIGl9KHt9LGwsdCksbixvKTpjb25zb2xlLndhcm4oXCJbdnVlLWpzLW1vZGFsXSBJbiBvcmRlciB0byByZW5kZXIgZHluYW1pYyBtb2RhbHMsIGEgPG1vZGFscy1jb250YWluZXI+IGNvbXBvbmVudCBtdXN0IGJlIHByZXNlbnQgb24gdGhlIHBhZ2UuXCIpfTthLnByb3RvdHlwZS4kbW9kYWw9e3Nob3c6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkoMTx0P3QtMTowKSxvPTE7bzx0O28rKyluW28tMV09YXJndW1lbnRzW29dO3N3aXRjaChDKGUpKXtjYXNlXCJzdHJpbmdcIjpyZXR1cm4gZnVuY3Rpb24oZSx0KXskLmV2ZW50LiRlbWl0KFwidG9nZ2xlXCIsZSwhMCx0KX0uYXBwbHkodm9pZCAwLFtlXS5jb25jYXQobikpO2Nhc2VcIm9iamVjdFwiOnJldHVybiBzLmR5bmFtaWM/aS5hcHBseSh2b2lkIDAsW2VdLmNvbmNhdChuKSk6Y29uc29sZS53YXJuKFwiW3Z1ZS1qcy1tb2RhbF0gJG1vZGFsKCkgcmVjZWl2ZWQgb2JqZWN0IGFzIGEgZmlyc3QgYXJndW1lbnQsIGJ1dCBkeW5hbWljIG1vZGFscyBhcmUgc3dpdGNoZWQgb2ZmLiBodHRwczovL2dpdGh1Yi5jb20vZXV2bC92dWUtanMtbW9kYWwvI2R5bmFtaWMtbW9kYWxzXCIpfX0saGlkZTpmdW5jdGlvbihlLHQpeyQuZXZlbnQuJGVtaXQoXCJ0b2dnbGVcIixlLCExLHQpfSx0b2dnbGU6ZnVuY3Rpb24oZSx0KXskLmV2ZW50LiRlbWl0KFwidG9nZ2xlXCIsZSx2b2lkIDAsdCl9fSxhLmNvbXBvbmVudChlLHkpLHMuZGlhbG9nJiZhLmNvbXBvbmVudChcIlZEaWFsb2dcIixFKSxzLmR5bmFtaWMmJihhLmNvbXBvbmVudChcIk1vZGFsc0NvbnRhaW5lclwiLGspLGEubWl4aW4oe2JlZm9yZU1vdW50OmZ1bmN0aW9uKCl7bnVsbD09PSQucm9vdEluc3RhbmNlJiYoJC5yb290SW5zdGFuY2U9dGhpcy4kcm9vdCl9fSkpfX19LHo9dC5kZWZhdWx0PSR9XSl9KTsiLCIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJ2dWVcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1widnVlXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInZ1ZS1ub3RpZmljYXRpb25cIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJ2dWVcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInZ1ZS1ub3RpZmljYXRpb25cIl0gPSBmYWN0b3J5KHJvb3RbXCJ2dWVcIl0pO1xufSkodGhpcywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8yMF9fKSB7XG5yZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pID0gZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4vKioqKioqLyBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4vKioqKioqLyBcdFx0XHRcdGdldDogZ2V0dGVyXG4vKioqKioqLyBcdFx0XHR9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL2Rpc3QvXCI7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMik7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIChbXG4vKiAwICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbi8vIHRoaXMgbW9kdWxlIGlzIGEgcnVudGltZSB1dGlsaXR5IGZvciBjbGVhbmVyIGNvbXBvbmVudCBtb2R1bGUgb3V0cHV0IGFuZCB3aWxsXG4vLyBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgd2VicGFjayB1c2VyIGJ1bmRsZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudCAoXG4gIHJhd1NjcmlwdEV4cG9ydHMsXG4gIGNvbXBpbGVkVGVtcGxhdGUsXG4gIHNjb3BlSWQsXG4gIGNzc01vZHVsZXNcbikge1xuICB2YXIgZXNNb2R1bGVcbiAgdmFyIHNjcmlwdEV4cG9ydHMgPSByYXdTY3JpcHRFeHBvcnRzID0gcmF3U2NyaXB0RXhwb3J0cyB8fCB7fVxuXG4gIC8vIEVTNiBtb2R1bGVzIGludGVyb3BcbiAgdmFyIHR5cGUgPSB0eXBlb2YgcmF3U2NyaXB0RXhwb3J0cy5kZWZhdWx0XG4gIGlmICh0eXBlID09PSAnb2JqZWN0JyB8fCB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZXNNb2R1bGUgPSByYXdTY3JpcHRFeHBvcnRzXG4gICAgc2NyaXB0RXhwb3J0cyA9IHJhd1NjcmlwdEV4cG9ydHMuZGVmYXVsdFxuICB9XG5cbiAgLy8gVnVlLmV4dGVuZCBjb25zdHJ1Y3RvciBleHBvcnQgaW50ZXJvcFxuICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBzY3JpcHRFeHBvcnRzID09PSAnZnVuY3Rpb24nXG4gICAgPyBzY3JpcHRFeHBvcnRzLm9wdGlvbnNcbiAgICA6IHNjcmlwdEV4cG9ydHNcblxuICAvLyByZW5kZXIgZnVuY3Rpb25zXG4gIGlmIChjb21waWxlZFRlbXBsYXRlKSB7XG4gICAgb3B0aW9ucy5yZW5kZXIgPSBjb21waWxlZFRlbXBsYXRlLnJlbmRlclxuICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gY29tcGlsZWRUZW1wbGF0ZS5zdGF0aWNSZW5kZXJGbnNcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9IHNjb3BlSWRcbiAgfVxuXG4gIC8vIGluamVjdCBjc3NNb2R1bGVzXG4gIGlmIChjc3NNb2R1bGVzKSB7XG4gICAgdmFyIGNvbXB1dGVkID0gT2JqZWN0LmNyZWF0ZShvcHRpb25zLmNvbXB1dGVkIHx8IG51bGwpXG4gICAgT2JqZWN0LmtleXMoY3NzTW9kdWxlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB2YXIgbW9kdWxlID0gY3NzTW9kdWxlc1trZXldXG4gICAgICBjb21wdXRlZFtrZXldID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbW9kdWxlIH1cbiAgICB9KVxuICAgIG9wdGlvbnMuY29tcHV0ZWQgPSBjb21wdXRlZFxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBlc01vZHVsZTogZXNNb2R1bGUsXG4gICAgZXhwb3J0czogc2NyaXB0RXhwb3J0cyxcbiAgICBvcHRpb25zOiBvcHRpb25zXG4gIH1cbn1cblxuXG4vKioqLyB9KSxcbi8qIDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGV2ZW50czsgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Z1ZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Z1ZV9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Z1ZV9fKTtcblxuXG52YXIgZXZlbnRzID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF92dWVfX19kZWZhdWx0LmEoeyBuYW1lOiAndnVlLW5vdGlmaWNhdGlvbicgfSk7XG5cbi8qKiovIH0pLFxuLyogMiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3dlYnBhY2tfZXhwb3J0c19fLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX05vdGlmaWNhdGlvbnNfdnVlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTm90aWZpY2F0aW9uc192dWVfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTm90aWZpY2F0aW9uc192dWVfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19ldmVudHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cblxuXG5cbnZhciBOb3RpZnkgPSB7XG4gIGluc3RhbGw6IGZ1bmN0aW9uIGluc3RhbGwoVnVlKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gICAgaWYgKHRoaXMuaW5zdGFsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pbnN0YWxsZWQgPSB0cnVlO1xuICAgIHRoaXMucGFyYW1zID0gYXJncztcblxuICAgIFZ1ZS5jb21wb25lbnQoYXJncy5jb21wb25lbnROYW1lIHx8ICdub3RpZmljYXRpb25zJywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19Ob3RpZmljYXRpb25zX3Z1ZV9fX2RlZmF1bHQuYSk7XG5cbiAgICB2YXIgbm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KHBhcmFtcykge1xuICAgICAgaWYgKHR5cGVvZiBwYXJhbXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHBhcmFtcyA9IHsgdGl0bGU6ICcnLCB0ZXh0OiBwYXJhbXMgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKCh0eXBlb2YgcGFyYW1zID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihwYXJhbXMpKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19ldmVudHNfX1tcImFcIiAvKiBldmVudHMgKi9dLiRlbWl0KCdhZGQnLCBwYXJhbXMpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBub3RpZnkuY2xvc2UgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXZlbnRzX19bXCJhXCIgLyogZXZlbnRzICovXS4kZW1pdCgnY2xvc2UnLCBpZCk7XG4gICAgfTtcblxuICAgIHZhciBuYW1lID0gYXJncy5uYW1lIHx8ICdub3RpZnknO1xuXG4gICAgVnVlLnByb3RvdHlwZVsnJCcgKyBuYW1lXSA9IG5vdGlmeTtcbiAgICBWdWVbbmFtZV0gPSBub3RpZnk7XG4gIH1cbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoTm90aWZ5KTtcblxuLyoqKi8gfSksXG4vKiAzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblxuLyogc3R5bGVzICovXG5fX3dlYnBhY2tfcmVxdWlyZV9fKDE3KVxuXG52YXIgQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKShcbiAgLyogc2NyaXB0ICovXG4gIF9fd2VicGFja19yZXF1aXJlX18oNSksXG4gIC8qIHRlbXBsYXRlICovXG4gIF9fd2VicGFja19yZXF1aXJlX18oMTUpLFxuICAvKiBzY29wZUlkICovXG4gIG51bGwsXG4gIC8qIGNzc01vZHVsZXMgKi9cbiAgbnVsbFxuKVxuXG5tb2R1bGUuZXhwb3J0cyA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuLyoqKi8gfSksXG4vKiA0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19leHBvcnRzX18sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoe1xuICBuYW1lOiAnQ3NzR3JvdXAnLFxuICBwcm9wczogWyduYW1lJ11cbn0pO1xuXG4vKioqLyB9KSxcbi8qIDUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pbmRleF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2V2ZW50c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3V0aWxfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19kZWZhdWx0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1ZlbG9jaXR5R3JvdXBfdnVlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1ZlbG9jaXR5R3JvdXBfdnVlX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1ZlbG9jaXR5R3JvdXBfdnVlX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fQ3NzR3JvdXBfdnVlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX0Nzc0dyb3VwX3Z1ZV9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19Dc3NHcm91cF92dWVfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19wYXJzZXJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5cblxuXG5cblxuXG5cblxudmFyIFNUQVRFID0ge1xuICBJRExFOiAwLFxuICBERVNUUk9ZRUQ6IDJcbn07XG5cbnZhciBDb21wb25lbnQgPSB7XG4gIG5hbWU6ICdOb3RpZmljYXRpb25zJyxcbiAgY29tcG9uZW50czoge1xuICAgIFZlbG9jaXR5R3JvdXA6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fVmVsb2NpdHlHcm91cF92dWVfX19kZWZhdWx0LmEsXG4gICAgQ3NzR3JvdXA6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fQ3NzR3JvdXBfdnVlX19fZGVmYXVsdC5hXG4gIH0sXG4gIHByb3BzOiB7XG4gICAgZ3JvdXA6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcblxuICAgIHdpZHRoOiB7XG4gICAgICB0eXBlOiBbTnVtYmVyLCBTdHJpbmddLFxuICAgICAgZGVmYXVsdDogMzAwXG4gICAgfSxcblxuICAgIHJldmVyc2U6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG5cbiAgICBwb3NpdGlvbjoge1xuICAgICAgdHlwZTogW1N0cmluZywgQXJyYXldLFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2RlZmF1bHRzX19bXCJhXCIgLyogZGVmYXVsdCAqL10ucG9zaXRpb247XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsYXNzZXM6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICd2dWUtbm90aWZpY2F0aW9uJ1xuICAgIH0sXG5cbiAgICBhbmltYXRpb25UeXBlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnY3NzJyxcbiAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gdmFsaWRhdG9yKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gJ2NzcycgfHwgdmFsdWUgPT09ICd2ZWxvY2l0eSc7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFuaW1hdGlvbjoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2RlZmF1bHRzX19bXCJhXCIgLyogZGVmYXVsdCAqL10udmVsb2NpdHlBbmltYXRpb247XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFuaW1hdGlvbk5hbWU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZGVmYXVsdHNfX1tcImFcIiAvKiBkZWZhdWx0ICovXS5jc3NBbmltYXRpb25cbiAgICB9LFxuXG4gICAgc3BlZWQ6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDMwMFxuICAgIH0sXG5cbiAgICBjb29sZG93bjoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMFxuICAgIH0sXG5cbiAgICBkdXJhdGlvbjoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMzAwMFxuICAgIH0sXG5cbiAgICBkZWxheToge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMFxuICAgIH0sXG5cbiAgICBtYXg6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IEluZmluaXR5XG4gICAgfSxcblxuICAgIGlnbm9yZUR1cGxpY2F0ZXM6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG5cbiAgICBjbG9zZU9uQ2xpY2s6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfVxuICB9LFxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBsaXN0OiBbXSxcbiAgICAgIHZlbG9jaXR5OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2luZGV4X19bXCJkZWZhdWx0XCJdLnBhcmFtcy52ZWxvY2l0eVxuICAgIH07XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19ldmVudHNfX1tcImFcIiAvKiBldmVudHMgKi9dLiRvbignYWRkJywgdGhpcy5hZGRJdGVtKTtcbiAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2V2ZW50c19fW1wiYVwiIC8qIGV2ZW50cyAqL10uJG9uKCdjbG9zZScsIHRoaXMuY2xvc2VJdGVtKTtcbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGFjdHVhbFdpZHRoOiBmdW5jdGlvbiBhY3R1YWxXaWR0aCgpIHtcbiAgICAgIHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fLmkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19wYXJzZXJfX1tcImFcIiAvKiBkZWZhdWx0ICovXSkodGhpcy53aWR0aCk7XG4gICAgfSxcbiAgICBpc1ZBOiBmdW5jdGlvbiBpc1ZBKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYW5pbWF0aW9uVHlwZSA9PT0gJ3ZlbG9jaXR5JztcbiAgICB9LFxuICAgIGNvbXBvbmVudE5hbWU6IGZ1bmN0aW9uIGNvbXBvbmVudE5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1ZBID8gJ1ZlbG9jaXR5R3JvdXAnIDogJ0Nzc0dyb3VwJztcbiAgICB9LFxuICAgIHN0eWxlczogZnVuY3Rpb24gc3R5bGVzKCkge1xuICAgICAgdmFyIF9saXN0VG9EaXJlY3Rpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsX19bXCJhXCIgLyogbGlzdFRvRGlyZWN0aW9uICovXSkodGhpcy5wb3NpdGlvbiksXG4gICAgICAgICAgeCA9IF9saXN0VG9EaXJlY3Rpb24ueCxcbiAgICAgICAgICB5ID0gX2xpc3RUb0RpcmVjdGlvbi55O1xuXG4gICAgICB2YXIgd2lkdGggPSB0aGlzLmFjdHVhbFdpZHRoLnZhbHVlO1xuICAgICAgdmFyIHN1ZmZpeCA9IHRoaXMuYWN0dWFsV2lkdGgudHlwZTtcblxuICAgICAgdmFyIHN0eWxlcyA9IF9kZWZpbmVQcm9wZXJ0eSh7XG4gICAgICAgIHdpZHRoOiB3aWR0aCArIHN1ZmZpeFxuICAgICAgfSwgeSwgJzBweCcpO1xuXG4gICAgICBpZiAoeCA9PT0gJ2NlbnRlcicpIHtcbiAgICAgICAgc3R5bGVzWydsZWZ0J10gPSAnY2FsYyg1MCUgLSAnICsgd2lkdGggLyAyICsgc3VmZml4ICsgJyknO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGVzW3hdID0gJzBweCc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgfSxcbiAgICBhY3RpdmU6IGZ1bmN0aW9uIGFjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmxpc3QuZmlsdGVyKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIHJldHVybiB2LnN0YXRlICE9PSBTVEFURS5ERVNUUk9ZRUQ7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGJvdFRvVG9wOiBmdW5jdGlvbiBib3RUb1RvcCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0eWxlcy5oYXNPd25Qcm9wZXJ0eSgnYm90dG9tJyk7XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgZGVzdHJveUlmTmVjZXNzYXJ5OiBmdW5jdGlvbiBkZXN0cm95SWZOZWNlc3NhcnkoaXRlbSkge1xuICAgICAgaWYgKHRoaXMuY2xvc2VPbkNsaWNrKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveShpdGVtKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFkZEl0ZW06IGZ1bmN0aW9uIGFkZEl0ZW0oZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGV2ZW50Lmdyb3VwID0gZXZlbnQuZ3JvdXAgfHwgJyc7XG5cbiAgICAgIGlmICh0aGlzLmdyb3VwICE9PSBldmVudC5ncm91cCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5jbGVhbiB8fCBldmVudC5jbGVhcikge1xuICAgICAgICB0aGlzLmRlc3Ryb3lBbGwoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZHVyYXRpb24gPSB0eXBlb2YgZXZlbnQuZHVyYXRpb24gPT09ICdudW1iZXInID8gZXZlbnQuZHVyYXRpb24gOiB0aGlzLmR1cmF0aW9uO1xuXG4gICAgICB2YXIgc3BlZWQgPSB0eXBlb2YgZXZlbnQuc3BlZWQgPT09ICdudW1iZXInID8gZXZlbnQuc3BlZWQgOiB0aGlzLnNwZWVkO1xuXG4gICAgICB2YXIgaWdub3JlRHVwbGljYXRlcyA9IHR5cGVvZiBldmVudC5pZ25vcmVEdXBsaWNhdGVzID09PSAnYm9vbGVhbicgPyBldmVudC5pZ25vcmVEdXBsaWNhdGVzIDogdGhpcy5pZ25vcmVEdXBsaWNhdGVzO1xuXG4gICAgICB2YXIgdGl0bGUgPSBldmVudC50aXRsZSxcbiAgICAgICAgICB0ZXh0ID0gZXZlbnQudGV4dCxcbiAgICAgICAgICB0eXBlID0gZXZlbnQudHlwZSxcbiAgICAgICAgICBkYXRhID0gZXZlbnQuZGF0YSxcbiAgICAgICAgICBpZCA9IGV2ZW50LmlkO1xuXG5cbiAgICAgIHZhciBpdGVtID0ge1xuICAgICAgICBpZDogaWQgfHwgX193ZWJwYWNrX3JlcXVpcmVfXy5pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fdXRpbF9fW1wiYlwiIC8qIElkICovXSkoKSxcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICBzdGF0ZTogU1RBVEUuSURMRSxcbiAgICAgICAgc3BlZWQ6IHNwZWVkLFxuICAgICAgICBsZW5ndGg6IGR1cmF0aW9uICsgMiAqIHNwZWVkLFxuICAgICAgICBkYXRhOiBkYXRhXG4gICAgICB9O1xuXG4gICAgICBpZiAoZHVyYXRpb24gPj0gMCkge1xuICAgICAgICBpdGVtLnRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMuZGVzdHJveShpdGVtKTtcbiAgICAgICAgfSwgaXRlbS5sZW5ndGgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGlyZWN0aW9uID0gdGhpcy5yZXZlcnNlID8gIXRoaXMuYm90VG9Ub3AgOiB0aGlzLmJvdFRvVG9wO1xuXG4gICAgICB2YXIgaW5kZXhUb0Rlc3Ryb3kgPSAtMTtcblxuICAgICAgdmFyIGlzRHVwbGljYXRlID0gdGhpcy5hY3RpdmUuc29tZShmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbS50aXRsZSA9PT0gZXZlbnQudGl0bGUgJiYgaXRlbS50ZXh0ID09PSBldmVudC50ZXh0O1xuICAgICAgfSk7XG5cbiAgICAgIHZhciBjYW5BZGQgPSBpZ25vcmVEdXBsaWNhdGVzID8gIWlzRHVwbGljYXRlIDogdHJ1ZTtcblxuICAgICAgaWYgKCFjYW5BZGQpIHJldHVybjtcblxuICAgICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgICB0aGlzLmxpc3QucHVzaChpdGVtKTtcblxuICAgICAgICBpZiAodGhpcy5hY3RpdmUubGVuZ3RoID4gdGhpcy5tYXgpIHtcbiAgICAgICAgICBpbmRleFRvRGVzdHJveSA9IDA7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGlzdC51bnNoaWZ0KGl0ZW0pO1xuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZS5sZW5ndGggPiB0aGlzLm1heCkge1xuICAgICAgICAgIGluZGV4VG9EZXN0cm95ID0gdGhpcy5hY3RpdmUubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaW5kZXhUb0Rlc3Ryb3kgIT09IC0xKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveSh0aGlzLmFjdGl2ZVtpbmRleFRvRGVzdHJveV0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2xvc2VJdGVtOiBmdW5jdGlvbiBjbG9zZUl0ZW0oaWQpIHtcbiAgICAgIHRoaXMuZGVzdHJveUJ5SWQoaWQpO1xuICAgIH0sXG4gICAgbm90aWZ5Q2xhc3M6IGZ1bmN0aW9uIG5vdGlmeUNsYXNzKGl0ZW0pIHtcbiAgICAgIHJldHVybiBbJ3Z1ZS1ub3RpZmljYXRpb24tdGVtcGxhdGUnLCB0aGlzLmNsYXNzZXMsIGl0ZW0udHlwZV07XG4gICAgfSxcbiAgICBub3RpZnlXcmFwcGVyU3R5bGU6IGZ1bmN0aW9uIG5vdGlmeVdyYXBwZXJTdHlsZShpdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1ZBID8gbnVsbCA6IHsgdHJhbnNpdGlvbjogJ2FsbCAnICsgaXRlbS5zcGVlZCArICdtcycgfTtcbiAgICB9LFxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koaXRlbSkge1xuICAgICAgY2xlYXJUaW1lb3V0KGl0ZW0udGltZXIpO1xuICAgICAgaXRlbS5zdGF0ZSA9IFNUQVRFLkRFU1RST1lFRDtcblxuICAgICAgaWYgKCF0aGlzLmlzVkEpIHtcbiAgICAgICAgdGhpcy5jbGVhbigpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGVzdHJveUJ5SWQ6IGZ1bmN0aW9uIGRlc3Ryb3lCeUlkKGlkKSB7XG4gICAgICB2YXIgaXRlbSA9IHRoaXMubGlzdC5maW5kKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIHJldHVybiB2LmlkID09PSBpZDtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaXRlbSkge1xuICAgICAgICB0aGlzLmRlc3Ryb3koaXRlbSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkZXN0cm95QWxsOiBmdW5jdGlvbiBkZXN0cm95QWxsKCkge1xuICAgICAgdGhpcy5hY3RpdmUuZm9yRWFjaCh0aGlzLmRlc3Ryb3kpO1xuICAgIH0sXG4gICAgZ2V0QW5pbWF0aW9uOiBmdW5jdGlvbiBnZXRBbmltYXRpb24oaW5kZXgsIGVsKSB7XG4gICAgICB2YXIgYW5pbWF0aW9uID0gdGhpcy5hbmltYXRpb25baW5kZXhdO1xuXG4gICAgICByZXR1cm4gdHlwZW9mIGFuaW1hdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IGFuaW1hdGlvbi5jYWxsKHRoaXMsIGVsKSA6IGFuaW1hdGlvbjtcbiAgICB9LFxuICAgIGVudGVyOiBmdW5jdGlvbiBlbnRlcihfcmVmKSB7XG4gICAgICB2YXIgZWwgPSBfcmVmLmVsLFxuICAgICAgICAgIGNvbXBsZXRlID0gX3JlZi5jb21wbGV0ZTtcblxuICAgICAgdmFyIGFuaW1hdGlvbiA9IHRoaXMuZ2V0QW5pbWF0aW9uKCdlbnRlcicsIGVsKTtcblxuICAgICAgdGhpcy52ZWxvY2l0eShlbCwgYW5pbWF0aW9uLCB7XG4gICAgICAgIGR1cmF0aW9uOiB0aGlzLnNwZWVkLFxuICAgICAgICBjb21wbGV0ZTogY29tcGxldGVcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgbGVhdmU6IGZ1bmN0aW9uIGxlYXZlKF9yZWYyKSB7XG4gICAgICB2YXIgZWwgPSBfcmVmMi5lbCxcbiAgICAgICAgICBjb21wbGV0ZSA9IF9yZWYyLmNvbXBsZXRlO1xuXG4gICAgICB2YXIgYW5pbWF0aW9uID0gdGhpcy5nZXRBbmltYXRpb24oJ2xlYXZlJywgZWwpO1xuXG4gICAgICB0aGlzLnZlbG9jaXR5KGVsLCBhbmltYXRpb24sIHtcbiAgICAgICAgZHVyYXRpb246IHRoaXMuc3BlZWQsXG4gICAgICAgIGNvbXBsZXRlOiBjb21wbGV0ZVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBjbGVhbjogZnVuY3Rpb24gY2xlYW4oKSB7XG4gICAgICB0aGlzLmxpc3QgPSB0aGlzLmxpc3QuZmlsdGVyKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIHJldHVybiB2LnN0YXRlICE9PSBTVEFURS5ERVNUUk9ZRUQ7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoQ29tcG9uZW50KTtcblxuLyoqKi8gfSksXG4vKiA2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19leHBvcnRzX18sIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoe1xuICBuYW1lOiAnVmVsb2NpdHlHcm91cCcsXG4gIG1ldGhvZHM6IHtcbiAgICBlbnRlcjogZnVuY3Rpb24gZW50ZXIoZWwsIGNvbXBsZXRlKSB7XG4gICAgICB0aGlzLiRlbWl0KCdlbnRlcicsIHsgZWw6IGVsLCBjb21wbGV0ZTogY29tcGxldGUgfSk7XG4gICAgfSxcbiAgICBsZWF2ZTogZnVuY3Rpb24gbGVhdmUoZWwsIGNvbXBsZXRlKSB7XG4gICAgICB0aGlzLiRlbWl0KCdsZWF2ZScsIHsgZWw6IGVsLCBjb21wbGV0ZTogY29tcGxldGUgfSk7XG4gICAgfSxcbiAgICBhZnRlckxlYXZlOiBmdW5jdGlvbiBhZnRlckxlYXZlKCkge1xuICAgICAgdGhpcy4kZW1pdCgnYWZ0ZXJMZWF2ZScpO1xuICAgIH1cbiAgfVxufSk7XG5cbi8qKiovIH0pLFxuLyogNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcImFcIl0gPSAoe1xuICBwb3NpdGlvbjogWyd0b3AnLCAncmlnaHQnXSxcbiAgY3NzQW5pbWF0aW9uOiAndm4tZmFkZScsXG4gIHZlbG9jaXR5QW5pbWF0aW9uOiB7XG4gICAgZW50ZXI6IGZ1bmN0aW9uIGVudGVyKGVsKSB7XG4gICAgICB2YXIgaGVpZ2h0ID0gZWwuY2xpZW50SGVpZ2h0O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBoZWlnaHQ6IFtoZWlnaHQsIDBdLFxuICAgICAgICBvcGFjaXR5OiBbMSwgMF1cbiAgICAgIH07XG4gICAgfSxcbiAgICBsZWF2ZToge1xuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgb3BhY2l0eTogWzAsIDFdXG4gICAgfVxuICB9XG59KTtcblxuLyoqKi8gfSksXG4vKiA4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHBhcnNlICovXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbnZhciBmbG9hdFJlZ2V4cCA9ICdbLStdP1swLTldKi4/WzAtOV0rJztcblxudmFyIHR5cGVzID0gW3tcbiAgbmFtZTogJ3B4JyxcbiAgcmVnZXhwOiBuZXcgUmVnRXhwKCdeJyArIGZsb2F0UmVnZXhwICsgJ3B4JCcpXG59LCB7XG4gIG5hbWU6ICclJyxcbiAgcmVnZXhwOiBuZXcgUmVnRXhwKCdeJyArIGZsb2F0UmVnZXhwICsgJyUkJylcbn0sIHtcbiAgbmFtZTogJ3B4JyxcbiAgcmVnZXhwOiBuZXcgUmVnRXhwKCdeJyArIGZsb2F0UmVnZXhwICsgJyQnKVxufV07XG5cbnZhciBnZXRUeXBlID0gZnVuY3Rpb24gZ2V0VHlwZSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09ICdhdXRvJykge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiB2YWx1ZSxcbiAgICAgIHZhbHVlOiAwXG4gICAgfTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdHlwZSA9IHR5cGVzW2ldO1xuICAgIGlmICh0eXBlLnJlZ2V4cC50ZXN0KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogdHlwZS5uYW1lLFxuICAgICAgICB2YWx1ZTogcGFyc2VGbG9hdCh2YWx1ZSlcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnJyxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG5cbnZhciBwYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKHZhbHVlKSB7XG4gIHN3aXRjaCAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZih2YWx1ZSkpIHtcbiAgICBjYXNlICdudW1iZXInOlxuICAgICAgcmV0dXJuIHsgdHlwZTogJ3B4JywgdmFsdWU6IHZhbHVlIH07XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIHJldHVybiBnZXRUeXBlKHZhbHVlKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHsgdHlwZTogJycsIHZhbHVlOiB2YWx1ZSB9O1xuICB9XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKHBhcnNlKTtcblxuLyoqKi8gfSksXG4vKiA5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImJcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBJZDsgfSk7XG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgc3BsaXQgKi9cbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbGlzdFRvRGlyZWN0aW9uOyB9KTtcbnZhciBkaXJlY3Rpb25zID0ge1xuICB4OiBbJ2xlZnQnLCAnY2VudGVyJywgJ3JpZ2h0J10sXG4gIHk6IFsndG9wJywgJ2JvdHRvbSddXG59O1xuXG52YXIgSWQgPSBmdW5jdGlvbiAoaSkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpKys7XG4gIH07XG59KDApO1xuXG52YXIgc3BsaXQgPSBmdW5jdGlvbiBzcGxpdCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZS5zcGxpdCgvXFxzKy9naSkuZmlsdGVyKGZ1bmN0aW9uICh2KSB7XG4gICAgcmV0dXJuIHY7XG4gIH0pO1xufTtcblxudmFyIGxpc3RUb0RpcmVjdGlvbiA9IGZ1bmN0aW9uIGxpc3RUb0RpcmVjdGlvbih2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gc3BsaXQodmFsdWUpO1xuICB9XG5cbiAgdmFyIHggPSBudWxsO1xuICB2YXIgeSA9IG51bGw7XG5cbiAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbiAodikge1xuICAgIGlmIChkaXJlY3Rpb25zLnkuaW5kZXhPZih2KSAhPT0gLTEpIHtcbiAgICAgIHkgPSB2O1xuICAgIH1cbiAgICBpZiAoZGlyZWN0aW9ucy54LmluZGV4T2YodikgIT09IC0xKSB7XG4gICAgICB4ID0gdjtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7IHg6IHgsIHk6IHkgfTtcbn07XG5cbi8qKiovIH0pLFxuLyogMTAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSkoKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmksIFwiLnZ1ZS1ub3RpZmljYXRpb24tZ3JvdXB7ZGlzcGxheTpibG9jaztwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjUwMDB9LnZ1ZS1ub3RpZmljYXRpb24td3JhcHBlcntkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRlbjt3aWR0aDoxMDAlO21hcmdpbjowO3BhZGRpbmc6MH0ubm90aWZpY2F0aW9uLXRpdGxle2ZvbnQtd2VpZ2h0OjYwMH0udnVlLW5vdGlmaWNhdGlvbi10ZW1wbGF0ZXtiYWNrZ3JvdW5kOiNmZmZ9LnZ1ZS1ub3RpZmljYXRpb24sLnZ1ZS1ub3RpZmljYXRpb24tdGVtcGxhdGV7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7dGV4dC1hbGlnbjpsZWZ0fS52dWUtbm90aWZpY2F0aW9ue2ZvbnQtc2l6ZToxMnB4O3BhZGRpbmc6MTBweDttYXJnaW46MCA1cHggNXB4O2NvbG9yOiNmZmY7YmFja2dyb3VuZDojNDRhNGZjO2JvcmRlci1sZWZ0OjVweCBzb2xpZCAjMTg3ZmU3fS52dWUtbm90aWZpY2F0aW9uLndhcm57YmFja2dyb3VuZDojZmZiNjQ4O2JvcmRlci1sZWZ0LWNvbG9yOiNmNDhhMDZ9LnZ1ZS1ub3RpZmljYXRpb24uZXJyb3J7YmFja2dyb3VuZDojZTU0ZDQyO2JvcmRlci1sZWZ0LWNvbG9yOiNiODJlMjR9LnZ1ZS1ub3RpZmljYXRpb24uc3VjY2Vzc3tiYWNrZ3JvdW5kOiM2OGNkODY7Ym9yZGVyLWxlZnQtY29sb3I6IzQyYTg1Zn0udm4tZmFkZS1lbnRlci1hY3RpdmUsLnZuLWZhZGUtbGVhdmUtYWN0aXZlLC52bi1mYWRlLW1vdmV7dHJhbnNpdGlvbjphbGwgLjVzfS52bi1mYWRlLWVudGVyLC52bi1mYWRlLWxlYXZlLXRve29wYWNpdHk6MH1cIiwgXCJcIl0pO1xuXG4vLyBleHBvcnRzXG5cblxuLyoqKi8gfSksXG4vKiAxMSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG4vKlxyXG5cdE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXHJcblx0QXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxyXG4qL1xyXG4vLyBjc3MgYmFzZSBjb2RlLCBpbmplY3RlZCBieSB0aGUgY3NzLWxvYWRlclxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xyXG5cdHZhciBsaXN0ID0gW107XHJcblxyXG5cdC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcclxuXHRsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XHJcblx0XHR2YXIgcmVzdWx0ID0gW107XHJcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHR2YXIgaXRlbSA9IHRoaXNbaV07XHJcblx0XHRcdGlmKGl0ZW1bMl0pIHtcclxuXHRcdFx0XHRyZXN1bHQucHVzaChcIkBtZWRpYSBcIiArIGl0ZW1bMl0gKyBcIntcIiArIGl0ZW1bMV0gKyBcIn1cIik7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbVsxXSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiByZXN1bHQuam9pbihcIlwiKTtcclxuXHR9O1xyXG5cclxuXHQvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxyXG5cdGxpc3QuaSA9IGZ1bmN0aW9uKG1vZHVsZXMsIG1lZGlhUXVlcnkpIHtcclxuXHRcdGlmKHR5cGVvZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKVxyXG5cdFx0XHRtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCBcIlwiXV07XHJcblx0XHR2YXIgYWxyZWFkeUltcG9ydGVkTW9kdWxlcyA9IHt9O1xyXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0dmFyIGlkID0gdGhpc1tpXVswXTtcclxuXHRcdFx0aWYodHlwZW9mIGlkID09PSBcIm51bWJlclwiKVxyXG5cdFx0XHRcdGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGZvcihpID0gMDsgaSA8IG1vZHVsZXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0dmFyIGl0ZW0gPSBtb2R1bGVzW2ldO1xyXG5cdFx0XHQvLyBza2lwIGFscmVhZHkgaW1wb3J0ZWQgbW9kdWxlXHJcblx0XHRcdC8vIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgbm90IDEwMCUgcGVyZmVjdCBmb3Igd2VpcmQgbWVkaWEgcXVlcnkgY29tYmluYXRpb25zXHJcblx0XHRcdC8vICB3aGVuIGEgbW9kdWxlIGlzIGltcG9ydGVkIG11bHRpcGxlIHRpbWVzIHdpdGggZGlmZmVyZW50IG1lZGlhIHF1ZXJpZXMuXHJcblx0XHRcdC8vICBJIGhvcGUgdGhpcyB3aWxsIG5ldmVyIG9jY3VyIChIZXkgdGhpcyB3YXkgd2UgaGF2ZSBzbWFsbGVyIGJ1bmRsZXMpXHJcblx0XHRcdGlmKHR5cGVvZiBpdGVtWzBdICE9PSBcIm51bWJlclwiIHx8ICFhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XHJcblx0XHRcdFx0aWYobWVkaWFRdWVyeSAmJiAhaXRlbVsyXSkge1xyXG5cdFx0XHRcdFx0aXRlbVsyXSA9IG1lZGlhUXVlcnk7XHJcblx0XHRcdFx0fSBlbHNlIGlmKG1lZGlhUXVlcnkpIHtcclxuXHRcdFx0XHRcdGl0ZW1bMl0gPSBcIihcIiArIGl0ZW1bMl0gKyBcIikgYW5kIChcIiArIG1lZGlhUXVlcnkgKyBcIilcIjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0bGlzdC5wdXNoKGl0ZW0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fTtcclxuXHRyZXR1cm4gbGlzdDtcclxufTtcclxuXG5cbi8qKiovIH0pLFxuLyogMTIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oMCkoXG4gIC8qIHNjcmlwdCAqL1xuICBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpLFxuICAvKiB0ZW1wbGF0ZSAqL1xuICBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KSxcbiAgLyogc2NvcGVJZCAqL1xuICBudWxsLFxuICAvKiBjc3NNb2R1bGVzICovXG4gIG51bGxcbilcblxubW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0pLFxuLyogMTMgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oMCkoXG4gIC8qIHNjcmlwdCAqL1xuICBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpLFxuICAvKiB0ZW1wbGF0ZSAqL1xuICBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KSxcbiAgLyogc2NvcGVJZCAqL1xuICBudWxsLFxuICAvKiBjc3NNb2R1bGVzICovXG4gIG51bGxcbilcblxubW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0pLFxuLyogMTQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcbiAgcmV0dXJuIF9jKCd0cmFuc2l0aW9uLWdyb3VwJywge1xuICAgIGF0dHJzOiB7XG4gICAgICBcImNzc1wiOiBmYWxzZVxuICAgIH0sXG4gICAgb246IHtcbiAgICAgIFwiZW50ZXJcIjogX3ZtLmVudGVyLFxuICAgICAgXCJsZWF2ZVwiOiBfdm0ubGVhdmUsXG4gICAgICBcImFmdGVyLWxlYXZlXCI6IF92bS5hZnRlckxlYXZlXG4gICAgfVxuICB9LCBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sIDIpXG59LHN0YXRpY1JlbmRlckZuczogW119XG5cbi8qKiovIH0pLFxuLyogMTUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcbiAgcmV0dXJuIF9jKCdkaXYnLCB7XG4gICAgc3RhdGljQ2xhc3M6IFwidnVlLW5vdGlmaWNhdGlvbi1ncm91cFwiLFxuICAgIHN0eWxlOiAoX3ZtLnN0eWxlcylcbiAgfSwgW19jKF92bS5jb21wb25lbnROYW1lLCB7XG4gICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgIGF0dHJzOiB7XG4gICAgICBcIm5hbWVcIjogX3ZtLmFuaW1hdGlvbk5hbWVcbiAgICB9LFxuICAgIG9uOiB7XG4gICAgICBcImVudGVyXCI6IF92bS5lbnRlcixcbiAgICAgIFwibGVhdmVcIjogX3ZtLmxlYXZlLFxuICAgICAgXCJhZnRlci1sZWF2ZVwiOiBfdm0uY2xlYW5cbiAgICB9XG4gIH0sIF92bS5fbCgoX3ZtLmFjdGl2ZSksIGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICByZXR1cm4gX2MoJ2RpdicsIHtcbiAgICAgIGtleTogaXRlbS5pZCxcbiAgICAgIHN0YXRpY0NsYXNzOiBcInZ1ZS1ub3RpZmljYXRpb24td3JhcHBlclwiLFxuICAgICAgc3R5bGU6IChfdm0ubm90aWZ5V3JhcHBlclN0eWxlKGl0ZW0pKSxcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIFwiZGF0YS1pZFwiOiBpdGVtLmlkXG4gICAgICB9XG4gICAgfSwgW192bS5fdChcImJvZHlcIiwgW19jKCdkaXYnLCB7XG4gICAgICBjbGFzczogX3ZtLm5vdGlmeUNsYXNzKGl0ZW0pLFxuICAgICAgb246IHtcbiAgICAgICAgXCJjbGlja1wiOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gX3ZtLmRlc3Ryb3lJZk5lY2Vzc2FyeShpdGVtKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgWyhpdGVtLnRpdGxlKSA/IF9jKCdkaXYnLCB7XG4gICAgICBzdGF0aWNDbGFzczogXCJub3RpZmljYXRpb24tdGl0bGVcIixcbiAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgIFwiaW5uZXJIVE1MXCI6IF92bS5fcyhpdGVtLnRpdGxlKVxuICAgICAgfVxuICAgIH0pIDogX3ZtLl9lKCksIF92bS5fdihcIiBcIiksIF9jKCdkaXYnLCB7XG4gICAgICBzdGF0aWNDbGFzczogXCJub3RpZmljYXRpb24tY29udGVudFwiLFxuICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgXCJpbm5lckhUTUxcIjogX3ZtLl9zKGl0ZW0udGV4dClcbiAgICAgIH1cbiAgICB9KV0pXSwge1xuICAgICAgXCJpdGVtXCI6IGl0ZW0sXG4gICAgICBcImNsb3NlXCI6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF92bS5kZXN0cm95KGl0ZW0pOyB9XG4gICAgfSldLCAyKVxuICB9KSwgMCldLCAxKVxufSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9KSxcbi8qIDE2ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG4gIHJldHVybiBfYygndHJhbnNpdGlvbi1ncm91cCcsIHtcbiAgICBhdHRyczoge1xuICAgICAgXCJuYW1lXCI6IF92bS5uYW1lXG4gICAgfVxuICB9LCBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sIDIpXG59LHN0YXRpY1JlbmRlckZuczogW119XG5cbi8qKiovIH0pLFxuLyogMTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLy8gc3R5bGUtbG9hZGVyOiBBZGRzIHNvbWUgY3NzIHRvIHRoZSBET00gYnkgYWRkaW5nIGEgPHN0eWxlPiB0YWdcblxuLy8gbG9hZCB0aGUgc3R5bGVzXG52YXIgY29udGVudCA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaSwgY29udGVudCwgJyddXTtcbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuLy8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIERPTVxudmFyIHVwZGF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpKFwiMjkwMWFlYWVcIiwgY29udGVudCwgdHJ1ZSk7XG5cbi8qKiovIH0pLFxuLyogMTggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuICBNb2RpZmllZCBieSBFdmFuIFlvdSBAeXl4OTkwODAzXG4qL1xuXG52YXIgaGFzRG9jdW1lbnQgPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnXG5cbmlmICh0eXBlb2YgREVCVUcgIT09ICd1bmRlZmluZWQnICYmIERFQlVHKSB7XG4gIGlmICghaGFzRG9jdW1lbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ3Z1ZS1zdHlsZS1sb2FkZXIgY2Fubm90IGJlIHVzZWQgaW4gYSBub24tYnJvd3NlciBlbnZpcm9ubWVudC4gJyArXG4gICAgXCJVc2UgeyB0YXJnZXQ6ICdub2RlJyB9IGluIHlvdXIgV2VicGFjayBjb25maWcgdG8gaW5kaWNhdGUgYSBzZXJ2ZXItcmVuZGVyaW5nIGVudmlyb25tZW50LlwiXG4gICkgfVxufVxuXG52YXIgbGlzdFRvU3R5bGVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSlcblxuLypcbnR5cGUgU3R5bGVPYmplY3QgPSB7XG4gIGlkOiBudW1iZXI7XG4gIHBhcnRzOiBBcnJheTxTdHlsZU9iamVjdFBhcnQ+XG59XG5cbnR5cGUgU3R5bGVPYmplY3RQYXJ0ID0ge1xuICBjc3M6IHN0cmluZztcbiAgbWVkaWE6IHN0cmluZztcbiAgc291cmNlTWFwOiA/c3RyaW5nXG59XG4qL1xuXG52YXIgc3R5bGVzSW5Eb20gPSB7LypcbiAgW2lkOiBudW1iZXJdOiB7XG4gICAgaWQ6IG51bWJlcixcbiAgICByZWZzOiBudW1iZXIsXG4gICAgcGFydHM6IEFycmF5PChvYmo/OiBTdHlsZU9iamVjdFBhcnQpID0+IHZvaWQ+XG4gIH1cbiovfVxuXG52YXIgaGVhZCA9IGhhc0RvY3VtZW50ICYmIChkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0pXG52YXIgc2luZ2xldG9uRWxlbWVudCA9IG51bGxcbnZhciBzaW5nbGV0b25Db3VudGVyID0gMFxudmFyIGlzUHJvZHVjdGlvbiA9IGZhbHNlXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHt9XG5cbi8vIEZvcmNlIHNpbmdsZS10YWcgc29sdXRpb24gb24gSUU2LTksIHdoaWNoIGhhcyBhIGhhcmQgbGltaXQgb24gdGhlICMgb2YgPHN0eWxlPlxuLy8gdGFncyBpdCB3aWxsIGFsbG93IG9uIGEgcGFnZVxudmFyIGlzT2xkSUUgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAvbXNpZSBbNi05XVxcYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkpXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHBhcmVudElkLCBsaXN0LCBfaXNQcm9kdWN0aW9uKSB7XG4gIGlzUHJvZHVjdGlvbiA9IF9pc1Byb2R1Y3Rpb25cblxuICB2YXIgc3R5bGVzID0gbGlzdFRvU3R5bGVzKHBhcmVudElkLCBsaXN0KVxuICBhZGRTdHlsZXNUb0RvbShzdHlsZXMpXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZSAobmV3TGlzdCkge1xuICAgIHZhciBtYXlSZW1vdmUgPSBbXVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IHN0eWxlc1tpXVxuICAgICAgdmFyIGRvbVN0eWxlID0gc3R5bGVzSW5Eb21baXRlbS5pZF1cbiAgICAgIGRvbVN0eWxlLnJlZnMtLVxuICAgICAgbWF5UmVtb3ZlLnB1c2goZG9tU3R5bGUpXG4gICAgfVxuICAgIGlmIChuZXdMaXN0KSB7XG4gICAgICBzdHlsZXMgPSBsaXN0VG9TdHlsZXMocGFyZW50SWQsIG5ld0xpc3QpXG4gICAgICBhZGRTdHlsZXNUb0RvbShzdHlsZXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlcyA9IFtdXG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF5UmVtb3ZlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZG9tU3R5bGUgPSBtYXlSZW1vdmVbaV1cbiAgICAgIGlmIChkb21TdHlsZS5yZWZzID09PSAwKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZG9tU3R5bGUucGFydHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBkb21TdHlsZS5wYXJ0c1tqXSgpXG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHN0eWxlc0luRG9tW2RvbVN0eWxlLmlkXVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRTdHlsZXNUb0RvbSAoc3R5bGVzIC8qIEFycmF5PFN0eWxlT2JqZWN0PiAqLykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gc3R5bGVzW2ldXG4gICAgdmFyIGRvbVN0eWxlID0gc3R5bGVzSW5Eb21baXRlbS5pZF1cbiAgICBpZiAoZG9tU3R5bGUpIHtcbiAgICAgIGRvbVN0eWxlLnJlZnMrK1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBkb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICBkb21TdHlsZS5wYXJ0c1tqXShpdGVtLnBhcnRzW2pdKVxuICAgICAgfVxuICAgICAgZm9yICg7IGogPCBpdGVtLnBhcnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGRvbVN0eWxlLnBhcnRzLnB1c2goYWRkU3R5bGUoaXRlbS5wYXJ0c1tqXSkpXG4gICAgICB9XG4gICAgICBpZiAoZG9tU3R5bGUucGFydHMubGVuZ3RoID4gaXRlbS5wYXJ0cy5sZW5ndGgpIHtcbiAgICAgICAgZG9tU3R5bGUucGFydHMubGVuZ3RoID0gaXRlbS5wYXJ0cy5sZW5ndGhcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHBhcnRzID0gW11cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICBwYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0pKVxuICAgICAgfVxuICAgICAgc3R5bGVzSW5Eb21baXRlbS5pZF0gPSB7IGlkOiBpdGVtLmlkLCByZWZzOiAxLCBwYXJ0czogcGFydHMgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHlsZUVsZW1lbnQgKCkge1xuICB2YXIgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKVxuICBzdHlsZUVsZW1lbnQudHlwZSA9ICd0ZXh0L2NzcydcbiAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpXG4gIHJldHVybiBzdHlsZUVsZW1lbnRcbn1cblxuZnVuY3Rpb24gYWRkU3R5bGUgKG9iaiAvKiBTdHlsZU9iamVjdFBhcnQgKi8pIHtcbiAgdmFyIHVwZGF0ZSwgcmVtb3ZlXG4gIHZhciBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzdHlsZVtkYXRhLXZ1ZS1zc3ItaWR+PVwiJyArIG9iai5pZCArICdcIl0nKVxuXG4gIGlmIChzdHlsZUVsZW1lbnQpIHtcbiAgICBpZiAoaXNQcm9kdWN0aW9uKSB7XG4gICAgICAvLyBoYXMgU1NSIHN0eWxlcyBhbmQgaW4gcHJvZHVjdGlvbiBtb2RlLlxuICAgICAgLy8gc2ltcGx5IGRvIG5vdGhpbmcuXG4gICAgICByZXR1cm4gbm9vcFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBoYXMgU1NSIHN0eWxlcyBidXQgaW4gZGV2IG1vZGUuXG4gICAgICAvLyBmb3Igc29tZSByZWFzb24gQ2hyb21lIGNhbid0IGhhbmRsZSBzb3VyY2UgbWFwIGluIHNlcnZlci1yZW5kZXJlZFxuICAgICAgLy8gc3R5bGUgdGFncyAtIHNvdXJjZSBtYXBzIGluIDxzdHlsZT4gb25seSB3b3JrcyBpZiB0aGUgc3R5bGUgdGFnIGlzXG4gICAgICAvLyBjcmVhdGVkIGFuZCBpbnNlcnRlZCBkeW5hbWljYWxseS4gU28gd2UgcmVtb3ZlIHRoZSBzZXJ2ZXIgcmVuZGVyZWRcbiAgICAgIC8vIHN0eWxlcyBhbmQgaW5qZWN0IG5ldyBvbmVzLlxuICAgICAgc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50KVxuICAgIH1cbiAgfVxuXG4gIGlmIChpc09sZElFKSB7XG4gICAgLy8gdXNlIHNpbmdsZXRvbiBtb2RlIGZvciBJRTkuXG4gICAgdmFyIHN0eWxlSW5kZXggPSBzaW5nbGV0b25Db3VudGVyKytcbiAgICBzdHlsZUVsZW1lbnQgPSBzaW5nbGV0b25FbGVtZW50IHx8IChzaW5nbGV0b25FbGVtZW50ID0gY3JlYXRlU3R5bGVFbGVtZW50KCkpXG4gICAgdXBkYXRlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlRWxlbWVudCwgc3R5bGVJbmRleCwgZmFsc2UpXG4gICAgcmVtb3ZlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlRWxlbWVudCwgc3R5bGVJbmRleCwgdHJ1ZSlcbiAgfSBlbHNlIHtcbiAgICAvLyB1c2UgbXVsdGktc3R5bGUtdGFnIG1vZGUgaW4gYWxsIG90aGVyIGNhc2VzXG4gICAgc3R5bGVFbGVtZW50ID0gY3JlYXRlU3R5bGVFbGVtZW50KClcbiAgICB1cGRhdGUgPSBhcHBseVRvVGFnLmJpbmQobnVsbCwgc3R5bGVFbGVtZW50KVxuICAgIHJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudClcbiAgICB9XG4gIH1cblxuICB1cGRhdGUob2JqKVxuXG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGVTdHlsZSAobmV3T2JqIC8qIFN0eWxlT2JqZWN0UGFydCAqLykge1xuICAgIGlmIChuZXdPYmopIHtcbiAgICAgIGlmIChuZXdPYmouY3NzID09PSBvYmouY3NzICYmXG4gICAgICAgICAgbmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiZcbiAgICAgICAgICBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdXBkYXRlKG9iaiA9IG5ld09iailcbiAgICB9IGVsc2Uge1xuICAgICAgcmVtb3ZlKClcbiAgICB9XG4gIH1cbn1cblxudmFyIHJlcGxhY2VUZXh0ID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRleHRTdG9yZSA9IFtdXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChpbmRleCwgcmVwbGFjZW1lbnQpIHtcbiAgICB0ZXh0U3RvcmVbaW5kZXhdID0gcmVwbGFjZW1lbnRcbiAgICByZXR1cm4gdGV4dFN0b3JlLmZpbHRlcihCb29sZWFuKS5qb2luKCdcXG4nKVxuICB9XG59KSgpXG5cbmZ1bmN0aW9uIGFwcGx5VG9TaW5nbGV0b25UYWcgKHN0eWxlRWxlbWVudCwgaW5kZXgsIHJlbW92ZSwgb2JqKSB7XG4gIHZhciBjc3MgPSByZW1vdmUgPyAnJyA6IG9iai5jc3NcblxuICBpZiAoc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0gcmVwbGFjZVRleHQoaW5kZXgsIGNzcylcbiAgfSBlbHNlIHtcbiAgICB2YXIgY3NzTm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcylcbiAgICB2YXIgY2hpbGROb2RlcyA9IHN0eWxlRWxlbWVudC5jaGlsZE5vZGVzXG4gICAgaWYgKGNoaWxkTm9kZXNbaW5kZXhdKSBzdHlsZUVsZW1lbnQucmVtb3ZlQ2hpbGQoY2hpbGROb2Rlc1tpbmRleF0pXG4gICAgaWYgKGNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICBzdHlsZUVsZW1lbnQuaW5zZXJ0QmVmb3JlKGNzc05vZGUsIGNoaWxkTm9kZXNbaW5kZXhdKVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoY3NzTm9kZSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlUb1RhZyAoc3R5bGVFbGVtZW50LCBvYmopIHtcbiAgdmFyIGNzcyA9IG9iai5jc3NcbiAgdmFyIG1lZGlhID0gb2JqLm1lZGlhXG4gIHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwXG5cbiAgaWYgKG1lZGlhKSB7XG4gICAgc3R5bGVFbGVtZW50LnNldEF0dHJpYnV0ZSgnbWVkaWEnLCBtZWRpYSlcbiAgfVxuXG4gIGlmIChzb3VyY2VNYXApIHtcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5jaHJvbWUuY29tL2RldnRvb2xzL2RvY3MvamF2YXNjcmlwdC1kZWJ1Z2dpbmdcbiAgICAvLyB0aGlzIG1ha2VzIHNvdXJjZSBtYXBzIGluc2lkZSBzdHlsZSB0YWdzIHdvcmsgcHJvcGVybHkgaW4gQ2hyb21lXG4gICAgY3NzICs9ICdcXG4vKiMgc291cmNlVVJMPScgKyBzb3VyY2VNYXAuc291cmNlc1swXSArICcgKi8nXG4gICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjY2MDM4NzVcbiAgICBjc3MgKz0gJ1xcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsJyArIGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSkgKyAnICovJ1xuICB9XG5cbiAgaWYgKHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzc1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgc3R5bGVFbGVtZW50LnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKVxuICAgIH1cbiAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSlcbiAgfVxufVxuXG5cbi8qKiovIH0pLFxuLyogMTkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuLyoqXG4gKiBUcmFuc2xhdGVzIHRoZSBsaXN0IGZvcm1hdCBwcm9kdWNlZCBieSBjc3MtbG9hZGVyIGludG8gc29tZXRoaW5nXG4gKiBlYXNpZXIgdG8gbWFuaXB1bGF0ZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBsaXN0VG9TdHlsZXMgKHBhcmVudElkLCBsaXN0KSB7XG4gIHZhciBzdHlsZXMgPSBbXVxuICB2YXIgbmV3U3R5bGVzID0ge31cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSBsaXN0W2ldXG4gICAgdmFyIGlkID0gaXRlbVswXVxuICAgIHZhciBjc3MgPSBpdGVtWzFdXG4gICAgdmFyIG1lZGlhID0gaXRlbVsyXVxuICAgIHZhciBzb3VyY2VNYXAgPSBpdGVtWzNdXG4gICAgdmFyIHBhcnQgPSB7XG4gICAgICBpZDogcGFyZW50SWQgKyAnOicgKyBpLFxuICAgICAgY3NzOiBjc3MsXG4gICAgICBtZWRpYTogbWVkaWEsXG4gICAgICBzb3VyY2VNYXA6IHNvdXJjZU1hcFxuICAgIH1cbiAgICBpZiAoIW5ld1N0eWxlc1tpZF0pIHtcbiAgICAgIHN0eWxlcy5wdXNoKG5ld1N0eWxlc1tpZF0gPSB7IGlkOiBpZCwgcGFydHM6IFtwYXJ0XSB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdTdHlsZXNbaWRdLnBhcnRzLnB1c2gocGFydClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0eWxlc1xufVxuXG5cbi8qKiovIH0pLFxuLyogMjAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzIwX187XG5cbi8qKiovIH0pXG4vKioqKioqLyBdKTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xyXG5cclxudmFyIF9jb25maWcgPSByZXF1aXJlKCcuL2NvbmZpZycpO1xyXG5cclxudmFyIF9jb25maWcyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY29uZmlnKTtcclxuXHJcbnZhciBfbWVyZ2UgPSByZXF1aXJlKCdtZXJnZScpO1xyXG5cclxudmFyIF9tZXJnZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9tZXJnZSk7XHJcblxyXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxyXG5cclxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cclxuXHJcbnZhciB0ZW1wbGF0ZSA9IHJlcXVpcmUoJy4vdGVtcGxhdGUuanMnKTtcclxudmFyIGJ1cyA9IHJlcXVpcmUoJy4vYnVzJyk7XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgcmVuZGVyOiB0ZW1wbGF0ZS5jYWxsKHVuZGVmaW5lZCksXHJcbiAgcHJvcHM6IHtcclxuICAgIGZvcjoge1xyXG4gICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHJlY29yZHM6IHtcclxuICAgICAgdHlwZTogTnVtYmVyLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHBlclBhZ2U6IHtcclxuICAgICAgdHlwZTogTnVtYmVyLFxyXG4gICAgICBkZWZhdWx0OiAyNVxyXG4gICAgfSxcclxuICAgIHZ1ZXg6IHtcclxuICAgICAgdHlwZTogQm9vbGVhblxyXG4gICAgfSxcclxuICAgIG9wdGlvbnM6IHtcclxuICAgICAgdHlwZTogT2JqZWN0XHJcbiAgICB9XHJcbiAgfSxcclxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xyXG5cclxuICAgIGlmICghdGhpcy52dWV4KSByZXR1cm47XHJcblxyXG4gICAgaWYgKCF0aGlzLmZvcikge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Z1ZS1wYWdpbmF0aW9uLTI6IFRoZSBcImZvclwiIHByb3AgaXMgcmVxdWlyZWQgd2hlbiB1c2luZyB2dWV4Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIG5hbWUgPSB0aGlzLmZvcjtcclxuXHJcbiAgICBpZiAodGhpcy4kc3RvcmUuc3RhdGVbbmFtZV0pIHJldHVybjtcclxuXHJcbiAgICB0aGlzLiRzdG9yZS5yZWdpc3Rlck1vZHVsZSh0aGlzLmZvciwge1xyXG4gICAgICBzdGF0ZToge1xyXG4gICAgICAgIHBhZ2U6IDFcclxuICAgICAgfSxcclxuICAgICAgbXV0YXRpb25zOiBfZGVmaW5lUHJvcGVydHkoe30sIG5hbWUgKyAnL1BBR0lOQVRFJywgZnVuY3Rpb24gdW5kZWZpbmVkKHN0YXRlLCBwYWdlKSB7XHJcbiAgICAgICAgc3RhdGUucGFnZSA9IHBhZ2U7XHJcbiAgICAgIH0pXHJcbiAgICB9KTtcclxuICB9LFxyXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBQYWdlOiAxLFxyXG4gICAgICBmaXJzdFBhZ2U6IDFcclxuICAgIH07XHJcbiAgfSxcclxuICBjb21wdXRlZDoge1xyXG4gICAgb3B0czogZnVuY3Rpb24gb3B0cygpIHtcclxuICAgICAgcmV0dXJuICgwLCBfbWVyZ2UyLmRlZmF1bHQpKCgwLCBfY29uZmlnMi5kZWZhdWx0KSgpLCB0aGlzLm9wdGlvbnMpO1xyXG4gICAgfSxcclxuICAgIFRoZW1lOiBmdW5jdGlvbiBUaGVtZSgpIHtcclxuXHJcbiAgICAgIGlmIChfdHlwZW9mKHRoaXMub3B0cy50aGVtZSkgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0cy50aGVtZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHRoZW1lcyA9IHtcclxuICAgICAgICBib290c3RyYXAzOiByZXF1aXJlKCcuL3RoZW1lcy9ib290c3RyYXAzJyksXHJcbiAgICAgICAgYm9vdHN0cmFwNDogcmVxdWlyZSgnLi90aGVtZXMvYm9vdHN0cmFwNCcpLFxyXG4gICAgICAgIGJ1bG1hOiByZXF1aXJlKCcuL3RoZW1lcy9idWxtYScpXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAoX3R5cGVvZih0aGVtZXNbdGhpcy5vcHRzLnRoZW1lXSkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRocm93ICd2dWUtcGFnaW5hdGlvbi0yOiB0aGUgdGhlbWUgJyArIHRoaXMub3B0cy50aGVtZSArICcgZG9lcyBub3QgZXhpc3QnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdGhlbWVzW3RoaXMub3B0cy50aGVtZV07XHJcbiAgICB9LFxyXG4gICAgcGFnZTogZnVuY3Rpb24gcGFnZSgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudnVleCA/IHRoaXMuJHN0b3JlLnN0YXRlW3RoaXMuZm9yXS5wYWdlIDogdGhpcy5QYWdlO1xyXG4gICAgfSxcclxuXHJcbiAgICBwYWdlczogZnVuY3Rpb24gcGFnZXMoKSB7XHJcbiAgICAgIGlmICghdGhpcy5yZWNvcmRzKSByZXR1cm4gW107XHJcblxyXG4gICAgICByZXR1cm4gcmFuZ2UodGhpcy5wYWdpbmF0aW9uU3RhcnQsIHRoaXMucGFnZXNJbkN1cnJlbnRDaHVuayk7XHJcbiAgICB9LFxyXG4gICAgdG90YWxQYWdlczogZnVuY3Rpb24gdG90YWxQYWdlcygpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucmVjb3JkcyA/IE1hdGguY2VpbCh0aGlzLnJlY29yZHMgLyB0aGlzLnBlclBhZ2UpIDogMTtcclxuICAgIH0sXHJcbiAgICB0b3RhbENodW5rczogZnVuY3Rpb24gdG90YWxDaHVua3MoKSB7XHJcbiAgICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy50b3RhbFBhZ2VzIC8gdGhpcy5vcHRzLmNodW5rKTtcclxuICAgIH0sXHJcbiAgICBjdXJyZW50Q2h1bms6IGZ1bmN0aW9uIGN1cnJlbnRDaHVuaygpIHtcclxuICAgICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLnBhZ2UgLyB0aGlzLm9wdHMuY2h1bmspO1xyXG4gICAgfSxcclxuICAgIHBhZ2luYXRpb25TdGFydDogZnVuY3Rpb24gcGFnaW5hdGlvblN0YXJ0KCkge1xyXG5cclxuICAgICAgaWYgKHRoaXMub3B0cy5jaHVua3NOYXZpZ2F0aW9uID09PSAnc2Nyb2xsJykge1xyXG4gICAgICAgIHZhciBwYWdlID0gIHRoaXMuUGFnZSAtIHRoaXMub3B0cy5jaHVuayArIDE7XHJcbiAgICAgICAgcmV0dXJuIHBhZ2UgPiAwID8gcGFnZSA6IDE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiAodGhpcy5jdXJyZW50Q2h1bmsgLSAxKSAqIHRoaXMub3B0cy5jaHVuayArIDE7XHJcbiAgICB9LFxyXG4gICAgcGFnZXNJbkN1cnJlbnRDaHVuazogZnVuY3Rpb24gcGFnZXNJbkN1cnJlbnRDaHVuaygpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdGlvblN0YXJ0ICsgdGhpcy5vcHRzLmNodW5rIDw9IHRoaXMudG90YWxQYWdlcyA/IHRoaXMub3B0cy5jaHVuayA6IHRoaXMudG90YWxQYWdlcyAtIHRoaXMucGFnaW5hdGlvblN0YXJ0ICsgMTtcclxuICAgIH0sXHJcbiAgICBjb3VudDogZnVuY3Rpb24gY291bnQoKSB7XHJcblxyXG4gICAgICBpZiAoL3twYWdlfS8udGVzdCh0aGlzLm9wdHMudGV4dHMuY291bnQpKSB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRvdGFsUGFnZXMgPD0gMSkgcmV0dXJuICcnO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5vcHRzLnRleHRzLmNvdW50LnJlcGxhY2UoJ3twYWdlfScsIHRoaXMucGFnZSkucmVwbGFjZSgne3BhZ2VzfScsIHRoaXMudG90YWxQYWdlcyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciBwYXJ0cyA9IHRoaXMub3B0cy50ZXh0cy5jb3VudC5zcGxpdCgnfCcpO1xyXG4gICAgICB2YXIgZnJvbSA9ICh0aGlzLnBhZ2UgLSAxKSAqIHRoaXMucGVyUGFnZSArIDE7XHJcbiAgICAgIHZhciB0byA9IHRoaXMucGFnZSA9PSB0aGlzLnRvdGFsUGFnZXMgPyB0aGlzLnJlY29yZHMgOiBmcm9tICsgdGhpcy5wZXJQYWdlIC0gMTtcclxuICAgICAgdmFyIGkgPSBNYXRoLm1pbih0aGlzLnJlY29yZHMgPT0gMSA/IDIgOiB0aGlzLnRvdGFsUGFnZXMgPT0gMSA/IDEgOiAwLCBwYXJ0cy5sZW5ndGggLSAxKTtcclxuXHJcbiAgICAgIHJldHVybiBwYXJ0c1tpXS5yZXBsYWNlKCd7Y291bnR9JywgdGhpcy5mb3JtYXROdW1iZXIodGhpcy5yZWNvcmRzKSkucmVwbGFjZSgne2Zyb219JywgdGhpcy5mb3JtYXROdW1iZXIoZnJvbSkpLnJlcGxhY2UoJ3t0b30nLCB0aGlzLmZvcm1hdE51bWJlcih0bykpO1xyXG4gICAgfVxyXG4gIH0sXHJcbiAgbWV0aG9kczoge1xyXG4gICAgc2V0UGFnZTogZnVuY3Rpb24gc2V0UGFnZShwYWdlKSB7XHJcbiAgICAgIGlmICh0aGlzLmFsbG93ZWRQYWdlKHBhZ2UpKSB7XHJcbiAgICAgICAgdGhpcy5wYWdpbmF0ZShwYWdlKTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHBhZ2luYXRlOiBmdW5jdGlvbiBwYWdpbmF0ZShwYWdlKSB7XHJcbiAgICAgIGlmICh0aGlzLnZ1ZXgpIHtcclxuICAgICAgICB0aGlzLiRzdG9yZS5jb21taXQodGhpcy5mb3IgKyAnL1BBR0lOQVRFJywgcGFnZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5QYWdlID0gcGFnZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy4kZW1pdCgncGFnaW5hdGUnLCBwYWdlKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmZvcikge1xyXG4gICAgICAgIGJ1cy4kZW1pdCgndnVlLXBhZ2luYXRpb246OicgKyB0aGlzLmZvciwgcGFnZSk7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgbmV4dDogZnVuY3Rpb24gbmV4dCgpIHtcclxuICAgICAgdmFyIHBhZ2UgPSB0aGlzLnBhZ2UgKyAxO1xyXG4gICAgICBpZiAodGhpcy5vcHRzLmNodW5rc05hdmlnYXRpb24gPT09ICdzY3JvbGwnICYmIHRoaXMuYWxsb3dlZFBhZ2UocGFnZSkgJiYgIXRoaXMuaW5EaXNwbGF5KHBhZ2UpKSB7XHJcbiAgICAgICAgdGhpcy5maXJzdFBhZ2UrKztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5zZXRQYWdlKHBhZ2UpO1xyXG4gICAgfSxcclxuICAgIHByZXY6IGZ1bmN0aW9uIHByZXYoKSB7XHJcbiAgICAgIHZhciBwYWdlID0gdGhpcy5wYWdlIC0gMTtcclxuXHJcbiAgICAgIGlmICh0aGlzLm9wdHMuY2h1bmtzTmF2aWdhdGlvbiA9PT0gJ3Njcm9sbCcgJiYgdGhpcy5hbGxvd2VkUGFnZShwYWdlKSAmJiAhdGhpcy5pbkRpc3BsYXkocGFnZSkpIHtcclxuICAgICAgICB0aGlzLmZpcnN0UGFnZS0tO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5zZXRQYWdlKHBhZ2UpO1xyXG4gICAgfSxcclxuICAgIGluRGlzcGxheTogZnVuY3Rpb24gaW5EaXNwbGF5KHBhZ2UpIHtcclxuXHJcbiAgICAgIHZhciBzdGFydCA9IHRoaXMuZmlyc3RQYWdlO1xyXG4gICAgICB2YXIgZW5kID0gc3RhcnQgKyB0aGlzLm9wdHMuY2h1bmsgLSAxO1xyXG5cclxuICAgICAgcmV0dXJuIHBhZ2UgPj0gc3RhcnQgJiYgcGFnZSA8PSBlbmQ7XHJcbiAgICB9LFxyXG5cclxuICAgIG5leHRDaHVuazogZnVuY3Rpb24gbmV4dENodW5rKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZXRDaHVuaygxKTtcclxuICAgIH0sXHJcbiAgICBwcmV2Q2h1bms6IGZ1bmN0aW9uIHByZXZDaHVuaygpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2V0Q2h1bmsoLTEpO1xyXG4gICAgfSxcclxuICAgIHNldENodW5rOiBmdW5jdGlvbiBzZXRDaHVuayhkaXJlY3Rpb24pIHtcclxuICAgICAgdGhpcy5zZXRQYWdlKCh0aGlzLmN1cnJlbnRDaHVuayAtIDEgKyBkaXJlY3Rpb24pICogdGhpcy5vcHRzLmNodW5rICsgMSk7XHJcbiAgICB9LFxyXG4gICAgYWxsb3dlZFBhZ2U6IGZ1bmN0aW9uIGFsbG93ZWRQYWdlKHBhZ2UpIHtcclxuICAgICAgcmV0dXJuIHBhZ2UgPj0gMSAmJiBwYWdlIDw9IHRoaXMudG90YWxQYWdlcztcclxuICAgIH0sXHJcbiAgICBhbGxvd2VkQ2h1bms6IGZ1bmN0aW9uIGFsbG93ZWRDaHVuayhkaXJlY3Rpb24pIHtcclxuICAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSAxICYmIHRoaXMuY3VycmVudENodW5rIDwgdGhpcy50b3RhbENodW5rcyB8fCBkaXJlY3Rpb24gPT0gLTEgJiYgdGhpcy5jdXJyZW50Q2h1bmsgPiAxO1xyXG4gICAgfSxcclxuICAgIGFsbG93ZWRQYWdlQ2xhc3M6IGZ1bmN0aW9uIGFsbG93ZWRQYWdlQ2xhc3MoZGlyZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmFsbG93ZWRQYWdlKGRpcmVjdGlvbikgPyAnJyA6IHRoaXMuVGhlbWUuZGlzYWJsZWQ7XHJcbiAgICB9LFxyXG4gICAgYWxsb3dlZENodW5rQ2xhc3M6IGZ1bmN0aW9uIGFsbG93ZWRDaHVua0NsYXNzKGRpcmVjdGlvbikge1xyXG4gICAgICByZXR1cm4gdGhpcy5hbGxvd2VkQ2h1bmsoZGlyZWN0aW9uKSA/ICcnIDogdGhpcy5UaGVtZS5kaXNhYmxlZDtcclxuICAgIH0sXHJcbiAgICBhY3RpdmVDbGFzczogZnVuY3Rpb24gYWN0aXZlQ2xhc3MocGFnZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wYWdlID09IHBhZ2UgPyB0aGlzLlRoZW1lLmFjdGl2ZSA6ICcnO1xyXG4gICAgfSxcclxuICAgIGZvcm1hdE51bWJlcjogZnVuY3Rpb24gZm9ybWF0TnVtYmVyKG51bSkge1xyXG5cclxuICAgICAgaWYgKCF0aGlzLm9wdHMuZm9ybWF0KSByZXR1cm4gbnVtO1xyXG5cclxuICAgICAgcmV0dXJuIG51bS50b1N0cmluZygpLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csIFwiLFwiKTtcclxuICAgIH1cclxuICB9LFxyXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XHJcbiAgICBidXMuJG9mZigpO1xyXG4gICAgYnVzLiRkZXN0cm95KCk7XHJcbiAgfVxyXG59O1xyXG5cclxuZnVuY3Rpb24gcmFuZ2Uoc3RhcnQsIGNvdW50KSB7XHJcbiAgcmV0dXJuIEFycmF5LmFwcGx5KDAsIEFycmF5KGNvdW50KSkubWFwKGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCkge1xyXG4gICAgcmV0dXJuIGluZGV4ICsgc3RhcnQ7XHJcbiAgfSk7XHJcbn1cclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIF92dWUgPSByZXF1aXJlKCd2dWUnKTtcclxuXHJcbnZhciBfdnVlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Z1ZSk7XHJcblxyXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxyXG5cclxudmFyIGJ1cyA9IG5ldyBfdnVlMi5kZWZhdWx0KCk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGJ1czsiLCIndXNlIHN0cmljdCc7XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcclxuICAgIHZhbHVlOiB0cnVlXHJcbn0pO1xyXG5cclxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBmb3JtYXQ6IHRydWUsXHJcbiAgICAgICAgY2h1bms6IDEwLFxyXG4gICAgICAgIGNodW5rc05hdmlnYXRpb246ICdmaXhlZCcsXHJcbiAgICAgICAgZWRnZU5hdmlnYXRpb246IGZhbHNlLFxyXG4gICAgICAgIHRoZW1lOiAnYm9vdHN0cmFwMycsXHJcbiAgICAgICAgdGV4dHM6IHtcclxuICAgICAgICAgICAgY291bnQ6ICdTaG93aW5nIHtmcm9tfSB0byB7dG99IG9mIHtjb3VudH0gcmVjb3Jkc3x7Y291bnR9IHJlY29yZHN8T25lIHJlY29yZCcsXHJcbiAgICAgICAgICAgIGZpcnN0OiAnRmlyc3QnLFxyXG4gICAgICAgICAgICBsYXN0OiAnTGFzdCdcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59OyIsIid1c2Ugc3RyaWN0JztcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICByZXR1cm4gZnVuY3Rpb24gKGgpIHtcclxuXHJcbiAgICB2YXIgdGhlbWUgPSB0aGlzLlRoZW1lO1xyXG4gICAgdmFyIHByZXZDaHVuayA9ICcnO1xyXG4gICAgdmFyIG5leHRDaHVuayA9ICcnO1xyXG4gICAgdmFyIGZpcnN0UGFnZSA9ICcnO1xyXG4gICAgdmFyIGxhc3RQYWdlID0gJyc7XHJcbiAgICB2YXIgaXRlbXMgPSB0aGlzLnBhZ2VzLm1hcChmdW5jdGlvbiAocGFnZSkge1xyXG5cclxuICAgICAgcmV0dXJuIGgoXHJcbiAgICAgICAgJ2xpJyxcclxuICAgICAgICB7ICdjbGFzcyc6ICdWdWVQYWdpbmF0aW9uX19wYWdpbmF0aW9uLWl0ZW0gJyArIHRoZW1lLml0ZW0gKyAnICcgKyB0aGlzLmFjdGl2ZUNsYXNzKHBhZ2UpLFxyXG4gICAgICAgICAgb246IHtcclxuICAgICAgICAgICAgJ2NsaWNrJzogdGhpcy5zZXRQYWdlLmJpbmQodGhpcywgcGFnZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFtoKFxyXG4gICAgICAgICAgJ2EnLFxyXG4gICAgICAgICAgeyAnY2xhc3MnOiB0aGVtZS5saW5rICsgJyAnICsgdGhpcy5hY3RpdmVDbGFzcyhwYWdlKSxcclxuICAgICAgICAgICAgYXR0cnM6IHsgaHJlZjogJ2phdmFzY3JpcHQ6dm9pZCgwKScsXHJcbiAgICAgICAgICAgICAgcm9sZTogJ2J1dHRvbicgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFtwYWdlXVxyXG4gICAgICAgICldXHJcbiAgICAgICk7XHJcbiAgICB9LmJpbmQodGhpcykpO1xyXG5cclxuICAgIGlmICh0aGlzLm9wdHMuZWRnZU5hdmlnYXRpb24gJiYgdGhpcy50b3RhbENodW5rcyA+IDEpIHtcclxuICAgICAgZmlyc3RQYWdlID0gaChcclxuICAgICAgICAnbGknLFxyXG4gICAgICAgIHsgJ2NsYXNzJzogJ1Z1ZVBhZ2luYXRpb25fX3BhZ2luYXRpb24taXRlbSAnICsgdGhlbWUuaXRlbSArICcgJyArICh0aGlzLnBhZ2UgPT09IDEgPyB0aGVtZS5kaXNhYmxlZCA6ICcnKSArICcgVnVlUGFnaW5hdGlvbl9fcGFnaW5hdGlvbi1pdGVtLXByZXYtY2h1bmsnLFxyXG4gICAgICAgICAgb246IHtcclxuICAgICAgICAgICAgJ2NsaWNrJzogdGhpcy5zZXRQYWdlLmJpbmQodGhpcywgMSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFtoKFxyXG4gICAgICAgICAgJ2EnLFxyXG4gICAgICAgICAgeyAnY2xhc3MnOiB0aGVtZS5saW5rLFxyXG4gICAgICAgICAgICBhdHRyczogeyBocmVmOiAnamF2YXNjcmlwdDp2b2lkKDApOycsXHJcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMucGFnZSA9PT0gMSB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgW3RoaXMub3B0cy50ZXh0cy5maXJzdF1cclxuICAgICAgICApXVxyXG4gICAgICApO1xyXG5cclxuICAgICAgbGFzdFBhZ2UgPSBoKFxyXG4gICAgICAgICdsaScsXHJcbiAgICAgICAgeyAnY2xhc3MnOiAnVnVlUGFnaW5hdGlvbl9fcGFnaW5hdGlvbi1pdGVtICcgKyB0aGVtZS5pdGVtICsgJyAnICsgKHRoaXMucGFnZSA9PT0gdGhpcy50b3RhbFBhZ2VzID8gdGhlbWUuZGlzYWJsZWQgOiAnJykgKyAnIFZ1ZVBhZ2luYXRpb25fX3BhZ2luYXRpb24taXRlbS1wcmV2LWNodW5rJyxcclxuICAgICAgICAgIG9uOiB7XHJcbiAgICAgICAgICAgICdjbGljayc6IHRoaXMuc2V0UGFnZS5iaW5kKHRoaXMsIHRoaXMudG90YWxQYWdlcylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIFtoKFxyXG4gICAgICAgICAgJ2EnLFxyXG4gICAgICAgICAgeyAnY2xhc3MnOiB0aGVtZS5saW5rLFxyXG4gICAgICAgICAgICBhdHRyczogeyBocmVmOiAnamF2YXNjcmlwdDp2b2lkKDApOycsXHJcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMucGFnZSA9PT0gdGhpcy50b3RhbFBhZ2VzIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBbdGhpcy5vcHRzLnRleHRzLmxhc3RdXHJcbiAgICAgICAgKV1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5vcHRzLmNodW5rc05hdmlnYXRpb24gPT09ICdmaXhlZCcpIHtcclxuXHJcbiAgICAgIHByZXZDaHVuayA9IGgoXHJcbiAgICAgICAgJ2xpJyxcclxuICAgICAgICB7ICdjbGFzcyc6ICdWdWVQYWdpbmF0aW9uX19wYWdpbmF0aW9uLWl0ZW0gJyArIHRoZW1lLml0ZW0gKyAnICcgKyB0aGVtZS5wcmV2ICsgJyBWdWVQYWdpbmF0aW9uX19wYWdpbmF0aW9uLWl0ZW0tcHJldi1jaHVuayAnICsgdGhpcy5hbGxvd2VkQ2h1bmtDbGFzcygtMSksXHJcbiAgICAgICAgICBvbjoge1xyXG4gICAgICAgICAgICAnY2xpY2snOiB0aGlzLnNldENodW5rLmJpbmQodGhpcywgLTEpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBbaChcclxuICAgICAgICAgICdhJyxcclxuICAgICAgICAgIHsgJ2NsYXNzJzogdGhlbWUubGluayxcclxuICAgICAgICAgICAgYXR0cnM6IHsgaHJlZjogJ2phdmFzY3JpcHQ6dm9pZCgwKTsnLFxyXG4gICAgICAgICAgICAgIGRpc2FibGVkOiAhIXRoaXMuYWxsb3dlZENodW5rQ2xhc3MoLTEpIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBbJzw8J11cclxuICAgICAgICApXVxyXG4gICAgICApO1xyXG5cclxuICAgICAgbmV4dENodW5rID0gaChcclxuICAgICAgICAnbGknLFxyXG4gICAgICAgIHsgJ2NsYXNzJzogJ1Z1ZVBhZ2luYXRpb25fX3BhZ2luYXRpb24taXRlbSAnICsgdGhlbWUuaXRlbSArICcgJyArIHRoZW1lLm5leHQgKyAnIFZ1ZVBhZ2luYXRpb25fX3BhZ2luYXRpb24taXRlbS1uZXh0LWNodW5rICcgKyB0aGlzLmFsbG93ZWRDaHVua0NsYXNzKDEpLFxyXG4gICAgICAgICAgb246IHtcclxuICAgICAgICAgICAgJ2NsaWNrJzogdGhpcy5zZXRDaHVuay5iaW5kKHRoaXMsIDEpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBbaChcclxuICAgICAgICAgICdhJyxcclxuICAgICAgICAgIHsgJ2NsYXNzJzogdGhlbWUubGluayxcclxuICAgICAgICAgICAgYXR0cnM6IHsgaHJlZjogJ2phdmFzY3JpcHQ6dm9pZCgwKTsnLFxyXG4gICAgICAgICAgICAgIGRpc2FibGVkOiAhIXRoaXMuYWxsb3dlZENodW5rQ2xhc3MoMSkgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFsnPj4nXVxyXG4gICAgICAgICldXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGgoXHJcbiAgICAgICdkaXYnLFxyXG4gICAgICB7ICdjbGFzcyc6ICdWdWVQYWdpbmF0aW9uICcgKyB0aGVtZS53cmFwcGVyIH0sXHJcbiAgICAgIFtoKFxyXG4gICAgICAgICduYXYnLFxyXG4gICAgICAgIHsgJ2NsYXNzJzogJycgKyB0aGVtZS5uYXYgfSxcclxuICAgICAgICBbaChcclxuICAgICAgICAgICd1bCcsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFt7XHJcbiAgICAgICAgICAgICAgbmFtZTogJ3Nob3cnLFxyXG4gICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnRvdGFsUGFnZXMgPiAxXHJcbiAgICAgICAgICAgIH1dLFxyXG5cclxuICAgICAgICAgICAgJ2NsYXNzJzogdGhlbWUubGlzdCArICcgVnVlUGFnaW5hdGlvbl9fcGFnaW5hdGlvbicgfSxcclxuICAgICAgICAgIFtmaXJzdFBhZ2UsIHByZXZDaHVuaywgaChcclxuICAgICAgICAgICAgJ2xpJyxcclxuICAgICAgICAgICAgeyAnY2xhc3MnOiAnVnVlUGFnaW5hdGlvbl9fcGFnaW5hdGlvbi1pdGVtICcgKyB0aGVtZS5pdGVtICsgJyAnICsgdGhlbWUucHJldiArICcgVnVlUGFnaW5hdGlvbl9fcGFnaW5hdGlvbi1pdGVtLXByZXYtcGFnZSAnICsgdGhpcy5hbGxvd2VkUGFnZUNsYXNzKHRoaXMucGFnZSAtIDEpLFxyXG4gICAgICAgICAgICAgIG9uOiB7XHJcbiAgICAgICAgICAgICAgICAnY2xpY2snOiB0aGlzLnByZXYuYmluZCh0aGlzKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgW2goXHJcbiAgICAgICAgICAgICAgJ2EnLFxyXG4gICAgICAgICAgICAgIHsgJ2NsYXNzJzogdGhlbWUubGluayxcclxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGhyZWY6ICdqYXZhc2NyaXB0OnZvaWQoMCk7JyxcclxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6ICEhdGhpcy5hbGxvd2VkUGFnZUNsYXNzKHRoaXMucGFnZSAtIDEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBbJzwnXVxyXG4gICAgICAgICAgICApXVxyXG4gICAgICAgICAgKSwgaXRlbXMsIGgoXHJcbiAgICAgICAgICAgICdsaScsXHJcbiAgICAgICAgICAgIHsgJ2NsYXNzJzogJ1Z1ZVBhZ2luYXRpb25fX3BhZ2luYXRpb24taXRlbSAnICsgdGhlbWUuaXRlbSArICcgJyArIHRoZW1lLm5leHQgKyAnIFZ1ZVBhZ2luYXRpb25fX3BhZ2luYXRpb24taXRlbS1uZXh0LXBhZ2UgJyArIHRoaXMuYWxsb3dlZFBhZ2VDbGFzcyh0aGlzLnBhZ2UgKyAxKSxcclxuICAgICAgICAgICAgICBvbjoge1xyXG4gICAgICAgICAgICAgICAgJ2NsaWNrJzogdGhpcy5uZXh0LmJpbmQodGhpcylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFtoKFxyXG4gICAgICAgICAgICAgICdhJyxcclxuICAgICAgICAgICAgICB7ICdjbGFzcyc6IHRoZW1lLmxpbmssXHJcbiAgICAgICAgICAgICAgICBhdHRyczogeyBocmVmOiAnamF2YXNjcmlwdDp2b2lkKDApOycsXHJcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhIXRoaXMuYWxsb3dlZFBhZ2VDbGFzcyh0aGlzLnBhZ2UgKyAxKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgWyc+J11cclxuICAgICAgICAgICAgKV1cclxuICAgICAgICAgICksIG5leHRDaHVuaywgbGFzdFBhZ2VdXHJcbiAgICAgICAgKSwgaChcclxuICAgICAgICAgICdwJyxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZGlyZWN0aXZlczogW3tcclxuICAgICAgICAgICAgICBuYW1lOiAnc2hvdycsXHJcbiAgICAgICAgICAgICAgdmFsdWU6IHBhcnNlSW50KHRoaXMucmVjb3JkcylcclxuICAgICAgICAgICAgfV0sXHJcblxyXG4gICAgICAgICAgICAnY2xhc3MnOiAnVnVlUGFnaW5hdGlvbl9fY291bnQgJyArIHRoZW1lLmNvdW50IH0sXHJcbiAgICAgICAgICBbdGhpcy5jb3VudF1cclxuICAgICAgICApXVxyXG4gICAgICApXVxyXG4gICAgKTtcclxuICB9O1xyXG59OyIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgbmF2OiAnJyxcbiAgICBjb3VudDogJycsXG4gICAgd3JhcHBlcjogJycsXG4gICAgbGlzdDogJ3BhZ2luYXRpb24nLFxuICAgIGl0ZW06ICdwYWdlLWl0ZW0nLFxuICAgIGxpbms6ICdwYWdlLWxpbmsnLFxuICAgIG5leHQ6ICcnLFxuICAgIHByZXY6ICcnLFxuICAgIGFjdGl2ZTogJ2FjdGl2ZScsXG4gICAgZGlzYWJsZWQ6ICdkaXNhYmxlZCdcbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBuYXY6ICcnLFxuICAgIGNvdW50OiAnJyxcbiAgICB3cmFwcGVyOiAnJyxcbiAgICBsaXN0OiAncGFnaW5hdGlvbicsXG4gICAgaXRlbTogJ3BhZ2UtaXRlbScsXG4gICAgbGluazogJ3BhZ2UtbGluaycsXG4gICAgbmV4dDogJycsXG4gICAgcHJldjogJycsXG4gICAgYWN0aXZlOiAnYWN0aXZlJyxcbiAgICBkaXNhYmxlZDogJ2Rpc2FibGVkJ1xufTsiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIG5hdjogJycsXG4gICAgY291bnQ6ICcnLFxuICAgIHdyYXBwZXI6ICdwYWdpbmF0aW9uJyxcbiAgICBsaXN0OiAncGFnaW5hdGlvbi1saXN0JyxcbiAgICBpdGVtOiAnJyxcbiAgICBsaW5rOiAncGFnaW5hdGlvbi1saW5rJyxcbiAgICBuZXh0OiAnJyxcbiAgICBwcmV2OiAnJyxcbiAgICBhY3RpdmU6ICdpcy1jdXJyZW50JyxcbiAgICBkaXNhYmxlZDogJycgLy8gdXNlcyB0aGUgZGlzYWJsZWQgSFRNTCBhdHRpcmJ1dGVcbn07IiwidmFyIFBhZ2luYXRpb24gPSByZXF1aXJlKCcuL2NvbXBpbGVkL1BhZ2luYXRpb24nKTtcclxudmFyIFBhZ2luYXRpb25FdmVudCA9IHJlcXVpcmUoJy4vY29tcGlsZWQvYnVzJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuICBQYWdpbmF0aW9uOlBhZ2luYXRpb24sXHJcbiAgUGFnaW5hdGlvbkV2ZW50OlBhZ2luYXRpb25FdmVudFxyXG59XHJcbiIsIi8qIVxuICAqIHZ1ZS1yb3V0ZXIgdjMuMS4zXG4gICogKGMpIDIwMTkgRXZhbiBZb3VcbiAgKiBAbGljZW5zZSBNSVRcbiAgKi9cbid1c2Ugc3RyaWN0JztcblxuLyogICovXG5cbmZ1bmN0aW9uIGFzc2VydCAoY29uZGl0aW9uLCBtZXNzYWdlKSB7XG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKChcIlt2dWUtcm91dGVyXSBcIiArIG1lc3NhZ2UpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm4gKGNvbmRpdGlvbiwgbWVzc2FnZSkge1xuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJyAmJiAhY29uZGl0aW9uKSB7XG4gICAgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGUud2FybigoXCJbdnVlLXJvdXRlcl0gXCIgKyBtZXNzYWdlKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNFcnJvciAoZXJyKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZXJyKS5pbmRleE9mKCdFcnJvcicpID4gLTFcbn1cblxuZnVuY3Rpb24gaXNFeHRlbmRlZEVycm9yIChjb25zdHJ1Y3RvciwgZXJyKSB7XG4gIHJldHVybiAoXG4gICAgZXJyIGluc3RhbmNlb2YgY29uc3RydWN0b3IgfHxcbiAgICAvLyBfbmFtZSBpcyB0byBzdXBwb3J0IElFOSB0b29cbiAgICAoZXJyICYmIChlcnIubmFtZSA9PT0gY29uc3RydWN0b3IubmFtZSB8fCBlcnIuX25hbWUgPT09IGNvbnN0cnVjdG9yLl9uYW1lKSlcbiAgKVxufVxuXG5mdW5jdGlvbiBleHRlbmQgKGEsIGIpIHtcbiAgZm9yICh2YXIga2V5IGluIGIpIHtcbiAgICBhW2tleV0gPSBiW2tleV07XG4gIH1cbiAgcmV0dXJuIGFcbn1cblxudmFyIFZpZXcgPSB7XG4gIG5hbWU6ICdSb3V0ZXJWaWV3JyxcbiAgZnVuY3Rpb25hbDogdHJ1ZSxcbiAgcHJvcHM6IHtcbiAgICBuYW1lOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnZGVmYXVsdCdcbiAgICB9XG4gIH0sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyIChfLCByZWYpIHtcbiAgICB2YXIgcHJvcHMgPSByZWYucHJvcHM7XG4gICAgdmFyIGNoaWxkcmVuID0gcmVmLmNoaWxkcmVuO1xuICAgIHZhciBwYXJlbnQgPSByZWYucGFyZW50O1xuICAgIHZhciBkYXRhID0gcmVmLmRhdGE7XG5cbiAgICAvLyB1c2VkIGJ5IGRldnRvb2xzIHRvIGRpc3BsYXkgYSByb3V0ZXItdmlldyBiYWRnZVxuICAgIGRhdGEucm91dGVyVmlldyA9IHRydWU7XG5cbiAgICAvLyBkaXJlY3RseSB1c2UgcGFyZW50IGNvbnRleHQncyBjcmVhdGVFbGVtZW50KCkgZnVuY3Rpb25cbiAgICAvLyBzbyB0aGF0IGNvbXBvbmVudHMgcmVuZGVyZWQgYnkgcm91dGVyLXZpZXcgY2FuIHJlc29sdmUgbmFtZWQgc2xvdHNcbiAgICB2YXIgaCA9IHBhcmVudC4kY3JlYXRlRWxlbWVudDtcbiAgICB2YXIgbmFtZSA9IHByb3BzLm5hbWU7XG4gICAgdmFyIHJvdXRlID0gcGFyZW50LiRyb3V0ZTtcbiAgICB2YXIgY2FjaGUgPSBwYXJlbnQuX3JvdXRlclZpZXdDYWNoZSB8fCAocGFyZW50Ll9yb3V0ZXJWaWV3Q2FjaGUgPSB7fSk7XG5cbiAgICAvLyBkZXRlcm1pbmUgY3VycmVudCB2aWV3IGRlcHRoLCBhbHNvIGNoZWNrIHRvIHNlZSBpZiB0aGUgdHJlZVxuICAgIC8vIGhhcyBiZWVuIHRvZ2dsZWQgaW5hY3RpdmUgYnV0IGtlcHQtYWxpdmUuXG4gICAgdmFyIGRlcHRoID0gMDtcbiAgICB2YXIgaW5hY3RpdmUgPSBmYWxzZTtcbiAgICB3aGlsZSAocGFyZW50ICYmIHBhcmVudC5fcm91dGVyUm9vdCAhPT0gcGFyZW50KSB7XG4gICAgICB2YXIgdm5vZGVEYXRhID0gcGFyZW50LiR2bm9kZSAmJiBwYXJlbnQuJHZub2RlLmRhdGE7XG4gICAgICBpZiAodm5vZGVEYXRhKSB7XG4gICAgICAgIGlmICh2bm9kZURhdGEucm91dGVyVmlldykge1xuICAgICAgICAgIGRlcHRoKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZub2RlRGF0YS5rZWVwQWxpdmUgJiYgcGFyZW50Ll9pbmFjdGl2ZSkge1xuICAgICAgICAgIGluYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG4gICAgfVxuICAgIGRhdGEucm91dGVyVmlld0RlcHRoID0gZGVwdGg7XG5cbiAgICAvLyByZW5kZXIgcHJldmlvdXMgdmlldyBpZiB0aGUgdHJlZSBpcyBpbmFjdGl2ZSBhbmQga2VwdC1hbGl2ZVxuICAgIGlmIChpbmFjdGl2ZSkge1xuICAgICAgcmV0dXJuIGgoY2FjaGVbbmFtZV0sIGRhdGEsIGNoaWxkcmVuKVxuICAgIH1cblxuICAgIHZhciBtYXRjaGVkID0gcm91dGUubWF0Y2hlZFtkZXB0aF07XG4gICAgLy8gcmVuZGVyIGVtcHR5IG5vZGUgaWYgbm8gbWF0Y2hlZCByb3V0ZVxuICAgIGlmICghbWF0Y2hlZCkge1xuICAgICAgY2FjaGVbbmFtZV0gPSBudWxsO1xuICAgICAgcmV0dXJuIGgoKVxuICAgIH1cblxuICAgIHZhciBjb21wb25lbnQgPSBjYWNoZVtuYW1lXSA9IG1hdGNoZWQuY29tcG9uZW50c1tuYW1lXTtcblxuICAgIC8vIGF0dGFjaCBpbnN0YW5jZSByZWdpc3RyYXRpb24gaG9va1xuICAgIC8vIHRoaXMgd2lsbCBiZSBjYWxsZWQgaW4gdGhlIGluc3RhbmNlJ3MgaW5qZWN0ZWQgbGlmZWN5Y2xlIGhvb2tzXG4gICAgZGF0YS5yZWdpc3RlclJvdXRlSW5zdGFuY2UgPSBmdW5jdGlvbiAodm0sIHZhbCkge1xuICAgICAgLy8gdmFsIGNvdWxkIGJlIHVuZGVmaW5lZCBmb3IgdW5yZWdpc3RyYXRpb25cbiAgICAgIHZhciBjdXJyZW50ID0gbWF0Y2hlZC5pbnN0YW5jZXNbbmFtZV07XG4gICAgICBpZiAoXG4gICAgICAgICh2YWwgJiYgY3VycmVudCAhPT0gdm0pIHx8XG4gICAgICAgICghdmFsICYmIGN1cnJlbnQgPT09IHZtKVxuICAgICAgKSB7XG4gICAgICAgIG1hdGNoZWQuaW5zdGFuY2VzW25hbWVdID0gdmFsO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFsc28gcmVnaXN0ZXIgaW5zdGFuY2UgaW4gcHJlcGF0Y2ggaG9va1xuICAgIC8vIGluIGNhc2UgdGhlIHNhbWUgY29tcG9uZW50IGluc3RhbmNlIGlzIHJldXNlZCBhY3Jvc3MgZGlmZmVyZW50IHJvdXRlc1xuICAgIDsoZGF0YS5ob29rIHx8IChkYXRhLmhvb2sgPSB7fSkpLnByZXBhdGNoID0gZnVuY3Rpb24gKF8sIHZub2RlKSB7XG4gICAgICBtYXRjaGVkLmluc3RhbmNlc1tuYW1lXSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnN0YW5jZSBpbiBpbml0IGhvb2tcbiAgICAvLyBpbiBjYXNlIGtlcHQtYWxpdmUgY29tcG9uZW50IGJlIGFjdGl2ZWQgd2hlbiByb3V0ZXMgY2hhbmdlZFxuICAgIGRhdGEuaG9vay5pbml0ID0gZnVuY3Rpb24gKHZub2RlKSB7XG4gICAgICBpZiAodm5vZGUuZGF0YS5rZWVwQWxpdmUgJiZcbiAgICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgJiZcbiAgICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgIT09IG1hdGNoZWQuaW5zdGFuY2VzW25hbWVdXG4gICAgICApIHtcbiAgICAgICAgbWF0Y2hlZC5pbnN0YW5jZXNbbmFtZV0gPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gcmVzb2x2ZSBwcm9wc1xuICAgIHZhciBwcm9wc1RvUGFzcyA9IGRhdGEucHJvcHMgPSByZXNvbHZlUHJvcHMocm91dGUsIG1hdGNoZWQucHJvcHMgJiYgbWF0Y2hlZC5wcm9wc1tuYW1lXSk7XG4gICAgaWYgKHByb3BzVG9QYXNzKSB7XG4gICAgICAvLyBjbG9uZSB0byBwcmV2ZW50IG11dGF0aW9uXG4gICAgICBwcm9wc1RvUGFzcyA9IGRhdGEucHJvcHMgPSBleHRlbmQoe30sIHByb3BzVG9QYXNzKTtcbiAgICAgIC8vIHBhc3Mgbm9uLWRlY2xhcmVkIHByb3BzIGFzIGF0dHJzXG4gICAgICB2YXIgYXR0cnMgPSBkYXRhLmF0dHJzID0gZGF0YS5hdHRycyB8fCB7fTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wc1RvUGFzcykge1xuICAgICAgICBpZiAoIWNvbXBvbmVudC5wcm9wcyB8fCAhKGtleSBpbiBjb21wb25lbnQucHJvcHMpKSB7XG4gICAgICAgICAgYXR0cnNba2V5XSA9IHByb3BzVG9QYXNzW2tleV07XG4gICAgICAgICAgZGVsZXRlIHByb3BzVG9QYXNzW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaChjb21wb25lbnQsIGRhdGEsIGNoaWxkcmVuKVxuICB9XG59O1xuXG5mdW5jdGlvbiByZXNvbHZlUHJvcHMgKHJvdXRlLCBjb25maWcpIHtcbiAgc3dpdGNoICh0eXBlb2YgY29uZmlnKSB7XG4gICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgIHJldHVyblxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICByZXR1cm4gY29uZmlnXG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgcmV0dXJuIGNvbmZpZyhyb3V0ZSlcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiBjb25maWcgPyByb3V0ZS5wYXJhbXMgOiB1bmRlZmluZWRcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICBcInByb3BzIGluIFxcXCJcIiArIChyb3V0ZS5wYXRoKSArIFwiXFxcIiBpcyBhIFwiICsgKHR5cGVvZiBjb25maWcpICsgXCIsIFwiICtcbiAgICAgICAgICBcImV4cGVjdGluZyBhbiBvYmplY3QsIGZ1bmN0aW9uIG9yIGJvb2xlYW4uXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIGVuY29kZVJlc2VydmVSRSA9IC9bIScoKSpdL2c7XG52YXIgZW5jb2RlUmVzZXJ2ZVJlcGxhY2VyID0gZnVuY3Rpb24gKGMpIHsgcmV0dXJuICclJyArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNik7IH07XG52YXIgY29tbWFSRSA9IC8lMkMvZztcblxuLy8gZml4ZWQgZW5jb2RlVVJJQ29tcG9uZW50IHdoaWNoIGlzIG1vcmUgY29uZm9ybWFudCB0byBSRkMzOTg2OlxuLy8gLSBlc2NhcGVzIFshJygpKl1cbi8vIC0gcHJlc2VydmUgY29tbWFzXG52YXIgZW5jb2RlID0gZnVuY3Rpb24gKHN0cikgeyByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cilcbiAgLnJlcGxhY2UoZW5jb2RlUmVzZXJ2ZVJFLCBlbmNvZGVSZXNlcnZlUmVwbGFjZXIpXG4gIC5yZXBsYWNlKGNvbW1hUkUsICcsJyk7IH07XG5cbnZhciBkZWNvZGUgPSBkZWNvZGVVUklDb21wb25lbnQ7XG5cbmZ1bmN0aW9uIHJlc29sdmVRdWVyeSAoXG4gIHF1ZXJ5LFxuICBleHRyYVF1ZXJ5LFxuICBfcGFyc2VRdWVyeVxuKSB7XG4gIGlmICggZXh0cmFRdWVyeSA9PT0gdm9pZCAwICkgZXh0cmFRdWVyeSA9IHt9O1xuXG4gIHZhciBwYXJzZSA9IF9wYXJzZVF1ZXJ5IHx8IHBhcnNlUXVlcnk7XG4gIHZhciBwYXJzZWRRdWVyeTtcbiAgdHJ5IHtcbiAgICBwYXJzZWRRdWVyeSA9IHBhcnNlKHF1ZXJ5IHx8ICcnKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihmYWxzZSwgZS5tZXNzYWdlKTtcbiAgICBwYXJzZWRRdWVyeSA9IHt9O1xuICB9XG4gIGZvciAodmFyIGtleSBpbiBleHRyYVF1ZXJ5KSB7XG4gICAgcGFyc2VkUXVlcnlba2V5XSA9IGV4dHJhUXVlcnlba2V5XTtcbiAgfVxuICByZXR1cm4gcGFyc2VkUXVlcnlcbn1cblxuZnVuY3Rpb24gcGFyc2VRdWVyeSAocXVlcnkpIHtcbiAgdmFyIHJlcyA9IHt9O1xuXG4gIHF1ZXJ5ID0gcXVlcnkudHJpbSgpLnJlcGxhY2UoL14oXFw/fCN8JikvLCAnJyk7XG5cbiAgaWYgKCFxdWVyeSkge1xuICAgIHJldHVybiByZXNcbiAgfVxuXG4gIHF1ZXJ5LnNwbGl0KCcmJykuZm9yRWFjaChmdW5jdGlvbiAocGFyYW0pIHtcbiAgICB2YXIgcGFydHMgPSBwYXJhbS5yZXBsYWNlKC9cXCsvZywgJyAnKS5zcGxpdCgnPScpO1xuICAgIHZhciBrZXkgPSBkZWNvZGUocGFydHMuc2hpZnQoKSk7XG4gICAgdmFyIHZhbCA9IHBhcnRzLmxlbmd0aCA+IDBcbiAgICAgID8gZGVjb2RlKHBhcnRzLmpvaW4oJz0nKSlcbiAgICAgIDogbnVsbDtcblxuICAgIGlmIChyZXNba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXNba2V5XSA9IHZhbDtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVzW2tleV0pKSB7XG4gICAgICByZXNba2V5XS5wdXNoKHZhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc1trZXldID0gW3Jlc1trZXldLCB2YWxdO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlRdWVyeSAob2JqKSB7XG4gIHZhciByZXMgPSBvYmogPyBPYmplY3Qua2V5cyhvYmopLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHZhbCA9IG9ialtrZXldO1xuXG4gICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICBpZiAodmFsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZW5jb2RlKGtleSlcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICB2YWwuZm9yRWFjaChmdW5jdGlvbiAodmFsMikge1xuICAgICAgICBpZiAodmFsMiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbDIgPT09IG51bGwpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGUoa2V5KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlKGtleSkgKyAnPScgKyBlbmNvZGUodmFsMikpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQuam9pbignJicpXG4gICAgfVxuXG4gICAgcmV0dXJuIGVuY29kZShrZXkpICsgJz0nICsgZW5jb2RlKHZhbClcbiAgfSkuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4Lmxlbmd0aCA+IDA7IH0pLmpvaW4oJyYnKSA6IG51bGw7XG4gIHJldHVybiByZXMgPyAoXCI/XCIgKyByZXMpIDogJydcbn1cblxuLyogICovXG5cbnZhciB0cmFpbGluZ1NsYXNoUkUgPSAvXFwvPyQvO1xuXG5mdW5jdGlvbiBjcmVhdGVSb3V0ZSAoXG4gIHJlY29yZCxcbiAgbG9jYXRpb24sXG4gIHJlZGlyZWN0ZWRGcm9tLFxuICByb3V0ZXJcbikge1xuICB2YXIgc3RyaW5naWZ5UXVlcnkgPSByb3V0ZXIgJiYgcm91dGVyLm9wdGlvbnMuc3RyaW5naWZ5UXVlcnk7XG5cbiAgdmFyIHF1ZXJ5ID0gbG9jYXRpb24ucXVlcnkgfHwge307XG4gIHRyeSB7XG4gICAgcXVlcnkgPSBjbG9uZShxdWVyeSk7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJvdXRlID0ge1xuICAgIG5hbWU6IGxvY2F0aW9uLm5hbWUgfHwgKHJlY29yZCAmJiByZWNvcmQubmFtZSksXG4gICAgbWV0YTogKHJlY29yZCAmJiByZWNvcmQubWV0YSkgfHwge30sXG4gICAgcGF0aDogbG9jYXRpb24ucGF0aCB8fCAnLycsXG4gICAgaGFzaDogbG9jYXRpb24uaGFzaCB8fCAnJyxcbiAgICBxdWVyeTogcXVlcnksXG4gICAgcGFyYW1zOiBsb2NhdGlvbi5wYXJhbXMgfHwge30sXG4gICAgZnVsbFBhdGg6IGdldEZ1bGxQYXRoKGxvY2F0aW9uLCBzdHJpbmdpZnlRdWVyeSksXG4gICAgbWF0Y2hlZDogcmVjb3JkID8gZm9ybWF0TWF0Y2gocmVjb3JkKSA6IFtdXG4gIH07XG4gIGlmIChyZWRpcmVjdGVkRnJvbSkge1xuICAgIHJvdXRlLnJlZGlyZWN0ZWRGcm9tID0gZ2V0RnVsbFBhdGgocmVkaXJlY3RlZEZyb20sIHN0cmluZ2lmeVF1ZXJ5KTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmZyZWV6ZShyb3V0ZSlcbn1cblxuZnVuY3Rpb24gY2xvbmUgKHZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZS5tYXAoY2xvbmUpXG4gIH0gZWxzZSBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgIHZhciByZXMgPSB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgIHJlc1trZXldID0gY2xvbmUodmFsdWVba2V5XSk7XG4gICAgfVxuICAgIHJldHVybiByZXNcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuXG4vLyB0aGUgc3RhcnRpbmcgcm91dGUgdGhhdCByZXByZXNlbnRzIHRoZSBpbml0aWFsIHN0YXRlXG52YXIgU1RBUlQgPSBjcmVhdGVSb3V0ZShudWxsLCB7XG4gIHBhdGg6ICcvJ1xufSk7XG5cbmZ1bmN0aW9uIGZvcm1hdE1hdGNoIChyZWNvcmQpIHtcbiAgdmFyIHJlcyA9IFtdO1xuICB3aGlsZSAocmVjb3JkKSB7XG4gICAgcmVzLnVuc2hpZnQocmVjb3JkKTtcbiAgICByZWNvcmQgPSByZWNvcmQucGFyZW50O1xuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gZ2V0RnVsbFBhdGggKFxuICByZWYsXG4gIF9zdHJpbmdpZnlRdWVyeVxuKSB7XG4gIHZhciBwYXRoID0gcmVmLnBhdGg7XG4gIHZhciBxdWVyeSA9IHJlZi5xdWVyeTsgaWYgKCBxdWVyeSA9PT0gdm9pZCAwICkgcXVlcnkgPSB7fTtcbiAgdmFyIGhhc2ggPSByZWYuaGFzaDsgaWYgKCBoYXNoID09PSB2b2lkIDAgKSBoYXNoID0gJyc7XG5cbiAgdmFyIHN0cmluZ2lmeSA9IF9zdHJpbmdpZnlRdWVyeSB8fCBzdHJpbmdpZnlRdWVyeTtcbiAgcmV0dXJuIChwYXRoIHx8ICcvJykgKyBzdHJpbmdpZnkocXVlcnkpICsgaGFzaFxufVxuXG5mdW5jdGlvbiBpc1NhbWVSb3V0ZSAoYSwgYikge1xuICBpZiAoYiA9PT0gU1RBUlQpIHtcbiAgICByZXR1cm4gYSA9PT0gYlxuICB9IGVsc2UgaWYgKCFiKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH0gZWxzZSBpZiAoYS5wYXRoICYmIGIucGF0aCkge1xuICAgIHJldHVybiAoXG4gICAgICBhLnBhdGgucmVwbGFjZSh0cmFpbGluZ1NsYXNoUkUsICcnKSA9PT0gYi5wYXRoLnJlcGxhY2UodHJhaWxpbmdTbGFzaFJFLCAnJykgJiZcbiAgICAgIGEuaGFzaCA9PT0gYi5oYXNoICYmXG4gICAgICBpc09iamVjdEVxdWFsKGEucXVlcnksIGIucXVlcnkpXG4gICAgKVxuICB9IGVsc2UgaWYgKGEubmFtZSAmJiBiLm5hbWUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgYS5uYW1lID09PSBiLm5hbWUgJiZcbiAgICAgIGEuaGFzaCA9PT0gYi5oYXNoICYmXG4gICAgICBpc09iamVjdEVxdWFsKGEucXVlcnksIGIucXVlcnkpICYmXG4gICAgICBpc09iamVjdEVxdWFsKGEucGFyYW1zLCBiLnBhcmFtcylcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZnVuY3Rpb24gaXNPYmplY3RFcXVhbCAoYSwgYikge1xuICBpZiAoIGEgPT09IHZvaWQgMCApIGEgPSB7fTtcbiAgaWYgKCBiID09PSB2b2lkIDAgKSBiID0ge307XG5cbiAgLy8gaGFuZGxlIG51bGwgdmFsdWUgIzE1NjZcbiAgaWYgKCFhIHx8ICFiKSB7IHJldHVybiBhID09PSBiIH1cbiAgdmFyIGFLZXlzID0gT2JqZWN0LmtleXMoYSk7XG4gIHZhciBiS2V5cyA9IE9iamVjdC5rZXlzKGIpO1xuICBpZiAoYUtleXMubGVuZ3RoICE9PSBiS2V5cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICByZXR1cm4gYUtleXMuZXZlcnkoZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBhVmFsID0gYVtrZXldO1xuICAgIHZhciBiVmFsID0gYltrZXldO1xuICAgIC8vIGNoZWNrIG5lc3RlZCBlcXVhbGl0eVxuICAgIGlmICh0eXBlb2YgYVZhbCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGJWYWwgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RFcXVhbChhVmFsLCBiVmFsKVxuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKGFWYWwpID09PSBTdHJpbmcoYlZhbClcbiAgfSlcbn1cblxuZnVuY3Rpb24gaXNJbmNsdWRlZFJvdXRlIChjdXJyZW50LCB0YXJnZXQpIHtcbiAgcmV0dXJuIChcbiAgICBjdXJyZW50LnBhdGgucmVwbGFjZSh0cmFpbGluZ1NsYXNoUkUsICcvJykuaW5kZXhPZihcbiAgICAgIHRhcmdldC5wYXRoLnJlcGxhY2UodHJhaWxpbmdTbGFzaFJFLCAnLycpXG4gICAgKSA9PT0gMCAmJlxuICAgICghdGFyZ2V0Lmhhc2ggfHwgY3VycmVudC5oYXNoID09PSB0YXJnZXQuaGFzaCkgJiZcbiAgICBxdWVyeUluY2x1ZGVzKGN1cnJlbnQucXVlcnksIHRhcmdldC5xdWVyeSlcbiAgKVxufVxuXG5mdW5jdGlvbiBxdWVyeUluY2x1ZGVzIChjdXJyZW50LCB0YXJnZXQpIHtcbiAgZm9yICh2YXIga2V5IGluIHRhcmdldCkge1xuICAgIGlmICghKGtleSBpbiBjdXJyZW50KSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiByZXNvbHZlUGF0aCAoXG4gIHJlbGF0aXZlLFxuICBiYXNlLFxuICBhcHBlbmRcbikge1xuICB2YXIgZmlyc3RDaGFyID0gcmVsYXRpdmUuY2hhckF0KDApO1xuICBpZiAoZmlyc3RDaGFyID09PSAnLycpIHtcbiAgICByZXR1cm4gcmVsYXRpdmVcbiAgfVxuXG4gIGlmIChmaXJzdENoYXIgPT09ICc/JyB8fCBmaXJzdENoYXIgPT09ICcjJykge1xuICAgIHJldHVybiBiYXNlICsgcmVsYXRpdmVcbiAgfVxuXG4gIHZhciBzdGFjayA9IGJhc2Uuc3BsaXQoJy8nKTtcblxuICAvLyByZW1vdmUgdHJhaWxpbmcgc2VnbWVudCBpZjpcbiAgLy8gLSBub3QgYXBwZW5kaW5nXG4gIC8vIC0gYXBwZW5kaW5nIHRvIHRyYWlsaW5nIHNsYXNoIChsYXN0IHNlZ21lbnQgaXMgZW1wdHkpXG4gIGlmICghYXBwZW5kIHx8ICFzdGFja1tzdGFjay5sZW5ndGggLSAxXSkge1xuICAgIHN0YWNrLnBvcCgpO1xuICB9XG5cbiAgLy8gcmVzb2x2ZSByZWxhdGl2ZSBwYXRoXG4gIHZhciBzZWdtZW50cyA9IHJlbGF0aXZlLnJlcGxhY2UoL15cXC8vLCAnJykuc3BsaXQoJy8nKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzZWdtZW50ID0gc2VnbWVudHNbaV07XG4gICAgaWYgKHNlZ21lbnQgPT09ICcuLicpIHtcbiAgICAgIHN0YWNrLnBvcCgpO1xuICAgIH0gZWxzZSBpZiAoc2VnbWVudCAhPT0gJy4nKSB7XG4gICAgICBzdGFjay5wdXNoKHNlZ21lbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVuc3VyZSBsZWFkaW5nIHNsYXNoXG4gIGlmIChzdGFja1swXSAhPT0gJycpIHtcbiAgICBzdGFjay51bnNoaWZ0KCcnKTtcbiAgfVxuXG4gIHJldHVybiBzdGFjay5qb2luKCcvJylcbn1cblxuZnVuY3Rpb24gcGFyc2VQYXRoIChwYXRoKSB7XG4gIHZhciBoYXNoID0gJyc7XG4gIHZhciBxdWVyeSA9ICcnO1xuXG4gIHZhciBoYXNoSW5kZXggPSBwYXRoLmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2hJbmRleCA+PSAwKSB7XG4gICAgaGFzaCA9IHBhdGguc2xpY2UoaGFzaEluZGV4KTtcbiAgICBwYXRoID0gcGF0aC5zbGljZSgwLCBoYXNoSW5kZXgpO1xuICB9XG5cbiAgdmFyIHF1ZXJ5SW5kZXggPSBwYXRoLmluZGV4T2YoJz8nKTtcbiAgaWYgKHF1ZXJ5SW5kZXggPj0gMCkge1xuICAgIHF1ZXJ5ID0gcGF0aC5zbGljZShxdWVyeUluZGV4ICsgMSk7XG4gICAgcGF0aCA9IHBhdGguc2xpY2UoMCwgcXVlcnlJbmRleCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhdGg6IHBhdGgsXG4gICAgcXVlcnk6IHF1ZXJ5LFxuICAgIGhhc2g6IGhhc2hcbiAgfVxufVxuXG5mdW5jdGlvbiBjbGVhblBhdGggKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGgucmVwbGFjZSgvXFwvXFwvL2csICcvJylcbn1cblxudmFyIGlzYXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChhcnIpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG4vKipcbiAqIEV4cG9zZSBgcGF0aFRvUmVnZXhwYC5cbiAqL1xudmFyIHBhdGhUb1JlZ2V4cF8xID0gcGF0aFRvUmVnZXhwO1xudmFyIHBhcnNlXzEgPSBwYXJzZTtcbnZhciBjb21waWxlXzEgPSBjb21waWxlO1xudmFyIHRva2Vuc1RvRnVuY3Rpb25fMSA9IHRva2Vuc1RvRnVuY3Rpb247XG52YXIgdG9rZW5zVG9SZWdFeHBfMSA9IHRva2Vuc1RvUmVnRXhwO1xuXG4vKipcbiAqIFRoZSBtYWluIHBhdGggbWF0Y2hpbmcgcmVnZXhwIHV0aWxpdHkuXG4gKlxuICogQHR5cGUge1JlZ0V4cH1cbiAqL1xudmFyIFBBVEhfUkVHRVhQID0gbmV3IFJlZ0V4cChbXG4gIC8vIE1hdGNoIGVzY2FwZWQgY2hhcmFjdGVycyB0aGF0IHdvdWxkIG90aGVyd2lzZSBhcHBlYXIgaW4gZnV0dXJlIG1hdGNoZXMuXG4gIC8vIFRoaXMgYWxsb3dzIHRoZSB1c2VyIHRvIGVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMgdGhhdCB3b24ndCB0cmFuc2Zvcm0uXG4gICcoXFxcXFxcXFwuKScsXG4gIC8vIE1hdGNoIEV4cHJlc3Mtc3R5bGUgcGFyYW1ldGVycyBhbmQgdW4tbmFtZWQgcGFyYW1ldGVycyB3aXRoIGEgcHJlZml4XG4gIC8vIGFuZCBvcHRpb25hbCBzdWZmaXhlcy4gTWF0Y2hlcyBhcHBlYXIgYXM6XG4gIC8vXG4gIC8vIFwiLzp0ZXN0KFxcXFxkKyk/XCIgPT4gW1wiL1wiLCBcInRlc3RcIiwgXCJcXGQrXCIsIHVuZGVmaW5lZCwgXCI/XCIsIHVuZGVmaW5lZF1cbiAgLy8gXCIvcm91dGUoXFxcXGQrKVwiICA9PiBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgXCJcXGQrXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXVxuICAvLyBcIi8qXCIgICAgICAgICAgICA9PiBbXCIvXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgXCIqXCJdXG4gICcoW1xcXFwvLl0pPyg/Oig/OlxcXFw6KFxcXFx3KykoPzpcXFxcKCgoPzpcXFxcXFxcXC58W15cXFxcXFxcXCgpXSkrKVxcXFwpKT98XFxcXCgoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKV0pKylcXFxcKSkoWysqP10pP3woXFxcXCopKSdcbl0uam9pbignfCcpLCAnZycpO1xuXG4vKipcbiAqIFBhcnNlIGEgc3RyaW5nIGZvciB0aGUgcmF3IHRva2Vucy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9ICBzdHJcbiAqIEBwYXJhbSAge09iamVjdD19IG9wdGlvbnNcbiAqIEByZXR1cm4geyFBcnJheX1cbiAqL1xuZnVuY3Rpb24gcGFyc2UgKHN0ciwgb3B0aW9ucykge1xuICB2YXIgdG9rZW5zID0gW107XG4gIHZhciBrZXkgPSAwO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgcGF0aCA9ICcnO1xuICB2YXIgZGVmYXVsdERlbGltaXRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5kZWxpbWl0ZXIgfHwgJy8nO1xuICB2YXIgcmVzO1xuXG4gIHdoaWxlICgocmVzID0gUEFUSF9SRUdFWFAuZXhlYyhzdHIpKSAhPSBudWxsKSB7XG4gICAgdmFyIG0gPSByZXNbMF07XG4gICAgdmFyIGVzY2FwZWQgPSByZXNbMV07XG4gICAgdmFyIG9mZnNldCA9IHJlcy5pbmRleDtcbiAgICBwYXRoICs9IHN0ci5zbGljZShpbmRleCwgb2Zmc2V0KTtcbiAgICBpbmRleCA9IG9mZnNldCArIG0ubGVuZ3RoO1xuXG4gICAgLy8gSWdub3JlIGFscmVhZHkgZXNjYXBlZCBzZXF1ZW5jZXMuXG4gICAgaWYgKGVzY2FwZWQpIHtcbiAgICAgIHBhdGggKz0gZXNjYXBlZFsxXTtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgdmFyIG5leHQgPSBzdHJbaW5kZXhdO1xuICAgIHZhciBwcmVmaXggPSByZXNbMl07XG4gICAgdmFyIG5hbWUgPSByZXNbM107XG4gICAgdmFyIGNhcHR1cmUgPSByZXNbNF07XG4gICAgdmFyIGdyb3VwID0gcmVzWzVdO1xuICAgIHZhciBtb2RpZmllciA9IHJlc1s2XTtcbiAgICB2YXIgYXN0ZXJpc2sgPSByZXNbN107XG5cbiAgICAvLyBQdXNoIHRoZSBjdXJyZW50IHBhdGggb250byB0aGUgdG9rZW5zLlxuICAgIGlmIChwYXRoKSB7XG4gICAgICB0b2tlbnMucHVzaChwYXRoKTtcbiAgICAgIHBhdGggPSAnJztcbiAgICB9XG5cbiAgICB2YXIgcGFydGlhbCA9IHByZWZpeCAhPSBudWxsICYmIG5leHQgIT0gbnVsbCAmJiBuZXh0ICE9PSBwcmVmaXg7XG4gICAgdmFyIHJlcGVhdCA9IG1vZGlmaWVyID09PSAnKycgfHwgbW9kaWZpZXIgPT09ICcqJztcbiAgICB2YXIgb3B0aW9uYWwgPSBtb2RpZmllciA9PT0gJz8nIHx8IG1vZGlmaWVyID09PSAnKic7XG4gICAgdmFyIGRlbGltaXRlciA9IHJlc1syXSB8fCBkZWZhdWx0RGVsaW1pdGVyO1xuICAgIHZhciBwYXR0ZXJuID0gY2FwdHVyZSB8fCBncm91cDtcblxuICAgIHRva2Vucy5wdXNoKHtcbiAgICAgIG5hbWU6IG5hbWUgfHwga2V5KyssXG4gICAgICBwcmVmaXg6IHByZWZpeCB8fCAnJyxcbiAgICAgIGRlbGltaXRlcjogZGVsaW1pdGVyLFxuICAgICAgb3B0aW9uYWw6IG9wdGlvbmFsLFxuICAgICAgcmVwZWF0OiByZXBlYXQsXG4gICAgICBwYXJ0aWFsOiBwYXJ0aWFsLFxuICAgICAgYXN0ZXJpc2s6ICEhYXN0ZXJpc2ssXG4gICAgICBwYXR0ZXJuOiBwYXR0ZXJuID8gZXNjYXBlR3JvdXAocGF0dGVybikgOiAoYXN0ZXJpc2sgPyAnLionIDogJ1teJyArIGVzY2FwZVN0cmluZyhkZWxpbWl0ZXIpICsgJ10rPycpXG4gICAgfSk7XG4gIH1cblxuICAvLyBNYXRjaCBhbnkgY2hhcmFjdGVycyBzdGlsbCByZW1haW5pbmcuXG4gIGlmIChpbmRleCA8IHN0ci5sZW5ndGgpIHtcbiAgICBwYXRoICs9IHN0ci5zdWJzdHIoaW5kZXgpO1xuICB9XG5cbiAgLy8gSWYgdGhlIHBhdGggZXhpc3RzLCBwdXNoIGl0IG9udG8gdGhlIGVuZC5cbiAgaWYgKHBhdGgpIHtcbiAgICB0b2tlbnMucHVzaChwYXRoKTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnNcbn1cblxuLyoqXG4gKiBDb21waWxlIGEgc3RyaW5nIHRvIGEgdGVtcGxhdGUgZnVuY3Rpb24gZm9yIHRoZSBwYXRoLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gICAgICAgICAgICAgc3RyXG4gKiBAcGFyYW0gIHtPYmplY3Q9fSAgICAgICAgICAgIG9wdGlvbnNcbiAqIEByZXR1cm4geyFmdW5jdGlvbihPYmplY3Q9LCBPYmplY3Q9KX1cbiAqL1xuZnVuY3Rpb24gY29tcGlsZSAoc3RyLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b2tlbnNUb0Z1bmN0aW9uKHBhcnNlKHN0ciwgb3B0aW9ucykpXG59XG5cbi8qKlxuICogUHJldHRpZXIgZW5jb2Rpbmcgb2YgVVJJIHBhdGggc2VnbWVudHMuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlbmNvZGVVUklDb21wb25lbnRQcmV0dHkgKHN0cikge1xuICByZXR1cm4gZW5jb2RlVVJJKHN0cikucmVwbGFjZSgvW1xcLz8jXS9nLCBmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiAnJScgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKClcbiAgfSlcbn1cblxuLyoqXG4gKiBFbmNvZGUgdGhlIGFzdGVyaXNrIHBhcmFtZXRlci4gU2ltaWxhciB0byBgcHJldHR5YCwgYnV0IGFsbG93cyBzbGFzaGVzLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ31cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZW5jb2RlQXN0ZXJpc2sgKHN0cikge1xuICByZXR1cm4gZW5jb2RlVVJJKHN0cikucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiAnJScgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKClcbiAgfSlcbn1cblxuLyoqXG4gKiBFeHBvc2UgYSBtZXRob2QgZm9yIHRyYW5zZm9ybWluZyB0b2tlbnMgaW50byB0aGUgcGF0aCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gdG9rZW5zVG9GdW5jdGlvbiAodG9rZW5zKSB7XG4gIC8vIENvbXBpbGUgYWxsIHRoZSB0b2tlbnMgaW50byByZWdleHBzLlxuICB2YXIgbWF0Y2hlcyA9IG5ldyBBcnJheSh0b2tlbnMubGVuZ3RoKTtcblxuICAvLyBDb21waWxlIGFsbCB0aGUgcGF0dGVybnMgYmVmb3JlIGNvbXBpbGF0aW9uLlxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgIGlmICh0eXBlb2YgdG9rZW5zW2ldID09PSAnb2JqZWN0Jykge1xuICAgICAgbWF0Y2hlc1tpXSA9IG5ldyBSZWdFeHAoJ14oPzonICsgdG9rZW5zW2ldLnBhdHRlcm4gKyAnKSQnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgb3B0cykge1xuICAgIHZhciBwYXRoID0gJyc7XG4gICAgdmFyIGRhdGEgPSBvYmogfHwge307XG4gICAgdmFyIG9wdGlvbnMgPSBvcHRzIHx8IHt9O1xuICAgIHZhciBlbmNvZGUgPSBvcHRpb25zLnByZXR0eSA/IGVuY29kZVVSSUNvbXBvbmVudFByZXR0eSA6IGVuY29kZVVSSUNvbXBvbmVudDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV07XG5cbiAgICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHBhdGggKz0gdG9rZW47XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgdmFyIHZhbHVlID0gZGF0YVt0b2tlbi5uYW1lXTtcbiAgICAgIHZhciBzZWdtZW50O1xuXG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICBpZiAodG9rZW4ub3B0aW9uYWwpIHtcbiAgICAgICAgICAvLyBQcmVwZW5kIHBhcnRpYWwgc2VnbWVudCBwcmVmaXhlcy5cbiAgICAgICAgICBpZiAodG9rZW4ucGFydGlhbCkge1xuICAgICAgICAgICAgcGF0aCArPSB0b2tlbi5wcmVmaXg7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIGJlIGRlZmluZWQnKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc2FycmF5KHZhbHVlKSkge1xuICAgICAgICBpZiAoIXRva2VuLnJlcGVhdCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gbm90IHJlcGVhdCwgYnV0IHJlY2VpdmVkIGAnICsgSlNPTi5zdHJpbmdpZnkodmFsdWUpICsgJ2AnKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGlmICh0b2tlbi5vcHRpb25hbCkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBub3QgYmUgZW1wdHknKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsdWUubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBzZWdtZW50ID0gZW5jb2RlKHZhbHVlW2pdKTtcblxuICAgICAgICAgIGlmICghbWF0Y2hlc1tpXS50ZXN0KHNlZ21lbnQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhbGwgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBtYXRjaCBcIicgKyB0b2tlbi5wYXR0ZXJuICsgJ1wiLCBidXQgcmVjZWl2ZWQgYCcgKyBKU09OLnN0cmluZ2lmeShzZWdtZW50KSArICdgJylcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXRoICs9IChqID09PSAwID8gdG9rZW4ucHJlZml4IDogdG9rZW4uZGVsaW1pdGVyKSArIHNlZ21lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBzZWdtZW50ID0gdG9rZW4uYXN0ZXJpc2sgPyBlbmNvZGVBc3Rlcmlzayh2YWx1ZSkgOiBlbmNvZGUodmFsdWUpO1xuXG4gICAgICBpZiAoIW1hdGNoZXNbaV0udGVzdChzZWdtZW50KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG1hdGNoIFwiJyArIHRva2VuLnBhdHRlcm4gKyAnXCIsIGJ1dCByZWNlaXZlZCBcIicgKyBzZWdtZW50ICsgJ1wiJylcbiAgICAgIH1cblxuICAgICAgcGF0aCArPSB0b2tlbi5wcmVmaXggKyBzZWdtZW50O1xuICAgIH1cblxuICAgIHJldHVybiBwYXRoXG4gIH1cbn1cblxuLyoqXG4gKiBFc2NhcGUgYSByZWd1bGFyIGV4cHJlc3Npb24gc3RyaW5nLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVN0cmluZyAoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvKFsuKyo/PV4hOiR7fSgpW1xcXXxcXC9cXFxcXSkvZywgJ1xcXFwkMScpXG59XG5cbi8qKlxuICogRXNjYXBlIHRoZSBjYXB0dXJpbmcgZ3JvdXAgYnkgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIGFuZCBtZWFuaW5nLlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gZ3JvdXBcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZXNjYXBlR3JvdXAgKGdyb3VwKSB7XG4gIHJldHVybiBncm91cC5yZXBsYWNlKC8oWz0hOiRcXC8oKV0pL2csICdcXFxcJDEnKVxufVxuXG4vKipcbiAqIEF0dGFjaCB0aGUga2V5cyBhcyBhIHByb3BlcnR5IG9mIHRoZSByZWdleHAuXG4gKlxuICogQHBhcmFtICB7IVJlZ0V4cH0gcmVcbiAqIEBwYXJhbSAge0FycmF5fSAgIGtleXNcbiAqIEByZXR1cm4geyFSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIGF0dGFjaEtleXMgKHJlLCBrZXlzKSB7XG4gIHJlLmtleXMgPSBrZXlzO1xuICByZXR1cm4gcmVcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGZsYWdzIGZvciBhIHJlZ2V4cCBmcm9tIHRoZSBvcHRpb25zLlxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBmbGFncyAob3B0aW9ucykge1xuICByZXR1cm4gb3B0aW9ucy5zZW5zaXRpdmUgPyAnJyA6ICdpJ1xufVxuXG4vKipcbiAqIFB1bGwgb3V0IGtleXMgZnJvbSBhIHJlZ2V4cC5cbiAqXG4gKiBAcGFyYW0gIHshUmVnRXhwfSBwYXRoXG4gKiBAcGFyYW0gIHshQXJyYXl9ICBrZXlzXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiByZWdleHBUb1JlZ2V4cCAocGF0aCwga2V5cykge1xuICAvLyBVc2UgYSBuZWdhdGl2ZSBsb29rYWhlYWQgdG8gbWF0Y2ggb25seSBjYXB0dXJpbmcgZ3JvdXBzLlxuICB2YXIgZ3JvdXBzID0gcGF0aC5zb3VyY2UubWF0Y2goL1xcKCg/IVxcPykvZyk7XG5cbiAgaWYgKGdyb3Vwcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXlzLnB1c2goe1xuICAgICAgICBuYW1lOiBpLFxuICAgICAgICBwcmVmaXg6IG51bGwsXG4gICAgICAgIGRlbGltaXRlcjogbnVsbCxcbiAgICAgICAgb3B0aW9uYWw6IGZhbHNlLFxuICAgICAgICByZXBlYXQ6IGZhbHNlLFxuICAgICAgICBwYXJ0aWFsOiBmYWxzZSxcbiAgICAgICAgYXN0ZXJpc2s6IGZhbHNlLFxuICAgICAgICBwYXR0ZXJuOiBudWxsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXR0YWNoS2V5cyhwYXRoLCBrZXlzKVxufVxuXG4vKipcbiAqIFRyYW5zZm9ybSBhbiBhcnJheSBpbnRvIGEgcmVnZXhwLlxuICpcbiAqIEBwYXJhbSAgeyFBcnJheX0gIHBhdGhcbiAqIEBwYXJhbSAge0FycmF5fSAgIGtleXNcbiAqIEBwYXJhbSAgeyFPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4geyFSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIGFycmF5VG9SZWdleHAgKHBhdGgsIGtleXMsIG9wdGlvbnMpIHtcbiAgdmFyIHBhcnRzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgcGFydHMucHVzaChwYXRoVG9SZWdleHAocGF0aFtpXSwga2V5cywgb3B0aW9ucykuc291cmNlKTtcbiAgfVxuXG4gIHZhciByZWdleHAgPSBuZXcgUmVnRXhwKCcoPzonICsgcGFydHMuam9pbignfCcpICsgJyknLCBmbGFncyhvcHRpb25zKSk7XG5cbiAgcmV0dXJuIGF0dGFjaEtleXMocmVnZXhwLCBrZXlzKVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIHBhdGggcmVnZXhwIGZyb20gc3RyaW5nIGlucHV0LlxuICpcbiAqIEBwYXJhbSAge3N0cmluZ30gIHBhdGhcbiAqIEBwYXJhbSAgeyFBcnJheX0gIGtleXNcbiAqIEBwYXJhbSAgeyFPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4geyFSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIHN0cmluZ1RvUmVnZXhwIChwYXRoLCBrZXlzLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b2tlbnNUb1JlZ0V4cChwYXJzZShwYXRoLCBvcHRpb25zKSwga2V5cywgb3B0aW9ucylcbn1cblxuLyoqXG4gKiBFeHBvc2UgYSBmdW5jdGlvbiBmb3IgdGFraW5nIHRva2VucyBhbmQgcmV0dXJuaW5nIGEgUmVnRXhwLlxuICpcbiAqIEBwYXJhbSAgeyFBcnJheX0gICAgICAgICAgdG9rZW5zXG4gKiBAcGFyYW0gIHsoQXJyYXl8T2JqZWN0KT19IGtleXNcbiAqIEBwYXJhbSAge09iamVjdD19ICAgICAgICAgb3B0aW9uc1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gdG9rZW5zVG9SZWdFeHAgKHRva2Vucywga2V5cywgb3B0aW9ucykge1xuICBpZiAoIWlzYXJyYXkoa2V5cykpIHtcbiAgICBvcHRpb25zID0gLyoqIEB0eXBlIHshT2JqZWN0fSAqLyAoa2V5cyB8fCBvcHRpb25zKTtcbiAgICBrZXlzID0gW107XG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICB2YXIgc3RyaWN0ID0gb3B0aW9ucy5zdHJpY3Q7XG4gIHZhciBlbmQgPSBvcHRpb25zLmVuZCAhPT0gZmFsc2U7XG4gIHZhciByb3V0ZSA9ICcnO1xuXG4gIC8vIEl0ZXJhdGUgb3ZlciB0aGUgdG9rZW5zIGFuZCBjcmVhdGUgb3VyIHJlZ2V4cCBzdHJpbmcuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHRva2VuID0gdG9rZW5zW2ldO1xuXG4gICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJvdXRlICs9IGVzY2FwZVN0cmluZyh0b2tlbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBwcmVmaXggPSBlc2NhcGVTdHJpbmcodG9rZW4ucHJlZml4KTtcbiAgICAgIHZhciBjYXB0dXJlID0gJyg/OicgKyB0b2tlbi5wYXR0ZXJuICsgJyknO1xuXG4gICAgICBrZXlzLnB1c2godG9rZW4pO1xuXG4gICAgICBpZiAodG9rZW4ucmVwZWF0KSB7XG4gICAgICAgIGNhcHR1cmUgKz0gJyg/OicgKyBwcmVmaXggKyBjYXB0dXJlICsgJykqJztcbiAgICAgIH1cblxuICAgICAgaWYgKHRva2VuLm9wdGlvbmFsKSB7XG4gICAgICAgIGlmICghdG9rZW4ucGFydGlhbCkge1xuICAgICAgICAgIGNhcHR1cmUgPSAnKD86JyArIHByZWZpeCArICcoJyArIGNhcHR1cmUgKyAnKSk/JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYXB0dXJlID0gcHJlZml4ICsgJygnICsgY2FwdHVyZSArICcpPyc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhcHR1cmUgPSBwcmVmaXggKyAnKCcgKyBjYXB0dXJlICsgJyknO1xuICAgICAgfVxuXG4gICAgICByb3V0ZSArPSBjYXB0dXJlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBkZWxpbWl0ZXIgPSBlc2NhcGVTdHJpbmcob3B0aW9ucy5kZWxpbWl0ZXIgfHwgJy8nKTtcbiAgdmFyIGVuZHNXaXRoRGVsaW1pdGVyID0gcm91dGUuc2xpY2UoLWRlbGltaXRlci5sZW5ndGgpID09PSBkZWxpbWl0ZXI7XG5cbiAgLy8gSW4gbm9uLXN0cmljdCBtb2RlIHdlIGFsbG93IGEgc2xhc2ggYXQgdGhlIGVuZCBvZiBtYXRjaC4gSWYgdGhlIHBhdGggdG9cbiAgLy8gbWF0Y2ggYWxyZWFkeSBlbmRzIHdpdGggYSBzbGFzaCwgd2UgcmVtb3ZlIGl0IGZvciBjb25zaXN0ZW5jeS4gVGhlIHNsYXNoXG4gIC8vIGlzIHZhbGlkIGF0IHRoZSBlbmQgb2YgYSBwYXRoIG1hdGNoLCBub3QgaW4gdGhlIG1pZGRsZS4gVGhpcyBpcyBpbXBvcnRhbnRcbiAgLy8gaW4gbm9uLWVuZGluZyBtb2RlLCB3aGVyZSBcIi90ZXN0L1wiIHNob3VsZG4ndCBtYXRjaCBcIi90ZXN0Ly9yb3V0ZVwiLlxuICBpZiAoIXN0cmljdCkge1xuICAgIHJvdXRlID0gKGVuZHNXaXRoRGVsaW1pdGVyID8gcm91dGUuc2xpY2UoMCwgLWRlbGltaXRlci5sZW5ndGgpIDogcm91dGUpICsgJyg/OicgKyBkZWxpbWl0ZXIgKyAnKD89JCkpPyc7XG4gIH1cblxuICBpZiAoZW5kKSB7XG4gICAgcm91dGUgKz0gJyQnO1xuICB9IGVsc2Uge1xuICAgIC8vIEluIG5vbi1lbmRpbmcgbW9kZSwgd2UgbmVlZCB0aGUgY2FwdHVyaW5nIGdyb3VwcyB0byBtYXRjaCBhcyBtdWNoIGFzXG4gICAgLy8gcG9zc2libGUgYnkgdXNpbmcgYSBwb3NpdGl2ZSBsb29rYWhlYWQgdG8gdGhlIGVuZCBvciBuZXh0IHBhdGggc2VnbWVudC5cbiAgICByb3V0ZSArPSBzdHJpY3QgJiYgZW5kc1dpdGhEZWxpbWl0ZXIgPyAnJyA6ICcoPz0nICsgZGVsaW1pdGVyICsgJ3wkKSc7XG4gIH1cblxuICByZXR1cm4gYXR0YWNoS2V5cyhuZXcgUmVnRXhwKCdeJyArIHJvdXRlLCBmbGFncyhvcHRpb25zKSksIGtleXMpXG59XG5cbi8qKlxuICogTm9ybWFsaXplIHRoZSBnaXZlbiBwYXRoIHN0cmluZywgcmV0dXJuaW5nIGEgcmVndWxhciBleHByZXNzaW9uLlxuICpcbiAqIEFuIGVtcHR5IGFycmF5IGNhbiBiZSBwYXNzZWQgaW4gZm9yIHRoZSBrZXlzLCB3aGljaCB3aWxsIGhvbGQgdGhlXG4gKiBwbGFjZWhvbGRlciBrZXkgZGVzY3JpcHRpb25zLiBGb3IgZXhhbXBsZSwgdXNpbmcgYC91c2VyLzppZGAsIGBrZXlzYCB3aWxsXG4gKiBjb250YWluIGBbeyBuYW1lOiAnaWQnLCBkZWxpbWl0ZXI6ICcvJywgb3B0aW9uYWw6IGZhbHNlLCByZXBlYXQ6IGZhbHNlIH1dYC5cbiAqXG4gKiBAcGFyYW0gIHsoc3RyaW5nfFJlZ0V4cHxBcnJheSl9IHBhdGhcbiAqIEBwYXJhbSAgeyhBcnJheXxPYmplY3QpPX0gICAgICAga2V5c1xuICogQHBhcmFtICB7T2JqZWN0PX0gICAgICAgICAgICAgICBvcHRpb25zXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiBwYXRoVG9SZWdleHAgKHBhdGgsIGtleXMsIG9wdGlvbnMpIHtcbiAgaWYgKCFpc2FycmF5KGtleXMpKSB7XG4gICAgb3B0aW9ucyA9IC8qKiBAdHlwZSB7IU9iamVjdH0gKi8gKGtleXMgfHwgb3B0aW9ucyk7XG4gICAga2V5cyA9IFtdO1xuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgaWYgKHBhdGggaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICByZXR1cm4gcmVnZXhwVG9SZWdleHAocGF0aCwgLyoqIEB0eXBlIHshQXJyYXl9ICovIChrZXlzKSlcbiAgfVxuXG4gIGlmIChpc2FycmF5KHBhdGgpKSB7XG4gICAgcmV0dXJuIGFycmF5VG9SZWdleHAoLyoqIEB0eXBlIHshQXJyYXl9ICovIChwYXRoKSwgLyoqIEB0eXBlIHshQXJyYXl9ICovIChrZXlzKSwgb3B0aW9ucylcbiAgfVxuXG4gIHJldHVybiBzdHJpbmdUb1JlZ2V4cCgvKiogQHR5cGUge3N0cmluZ30gKi8gKHBhdGgpLCAvKiogQHR5cGUgeyFBcnJheX0gKi8gKGtleXMpLCBvcHRpb25zKVxufVxucGF0aFRvUmVnZXhwXzEucGFyc2UgPSBwYXJzZV8xO1xucGF0aFRvUmVnZXhwXzEuY29tcGlsZSA9IGNvbXBpbGVfMTtcbnBhdGhUb1JlZ2V4cF8xLnRva2Vuc1RvRnVuY3Rpb24gPSB0b2tlbnNUb0Z1bmN0aW9uXzE7XG5wYXRoVG9SZWdleHBfMS50b2tlbnNUb1JlZ0V4cCA9IHRva2Vuc1RvUmVnRXhwXzE7XG5cbi8qICAqL1xuXG4vLyAkZmxvdy1kaXNhYmxlLWxpbmVcbnZhciByZWdleHBDb21waWxlQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG5mdW5jdGlvbiBmaWxsUGFyYW1zIChcbiAgcGF0aCxcbiAgcGFyYW1zLFxuICByb3V0ZU1zZ1xuKSB7XG4gIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgdHJ5IHtcbiAgICB2YXIgZmlsbGVyID1cbiAgICAgIHJlZ2V4cENvbXBpbGVDYWNoZVtwYXRoXSB8fFxuICAgICAgKHJlZ2V4cENvbXBpbGVDYWNoZVtwYXRoXSA9IHBhdGhUb1JlZ2V4cF8xLmNvbXBpbGUocGF0aCkpO1xuXG4gICAgLy8gRml4ICMyNTA1IHJlc29sdmluZyBhc3RlcmlzayByb3V0ZXMgeyBuYW1lOiAnbm90LWZvdW5kJywgcGFyYW1zOiB7IHBhdGhNYXRjaDogJy9ub3QtZm91bmQnIH19XG4gICAgaWYgKHBhcmFtcy5wYXRoTWF0Y2gpIHsgcGFyYW1zWzBdID0gcGFyYW1zLnBhdGhNYXRjaDsgfVxuXG4gICAgcmV0dXJuIGZpbGxlcihwYXJhbXMsIHsgcHJldHR5OiB0cnVlIH0pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgd2FybihmYWxzZSwgKFwibWlzc2luZyBwYXJhbSBmb3IgXCIgKyByb3V0ZU1zZyArIFwiOiBcIiArIChlLm1lc3NhZ2UpKSk7XG4gICAgfVxuICAgIHJldHVybiAnJ1xuICB9IGZpbmFsbHkge1xuICAgIC8vIGRlbGV0ZSB0aGUgMCBpZiBpdCB3YXMgYWRkZWRcbiAgICBkZWxldGUgcGFyYW1zWzBdO1xuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBub3JtYWxpemVMb2NhdGlvbiAoXG4gIHJhdyxcbiAgY3VycmVudCxcbiAgYXBwZW5kLFxuICByb3V0ZXJcbikge1xuICB2YXIgbmV4dCA9IHR5cGVvZiByYXcgPT09ICdzdHJpbmcnID8geyBwYXRoOiByYXcgfSA6IHJhdztcbiAgLy8gbmFtZWQgdGFyZ2V0XG4gIGlmIChuZXh0Ll9ub3JtYWxpemVkKSB7XG4gICAgcmV0dXJuIG5leHRcbiAgfSBlbHNlIGlmIChuZXh0Lm5hbWUpIHtcbiAgICByZXR1cm4gZXh0ZW5kKHt9LCByYXcpXG4gIH1cblxuICAvLyByZWxhdGl2ZSBwYXJhbXNcbiAgaWYgKCFuZXh0LnBhdGggJiYgbmV4dC5wYXJhbXMgJiYgY3VycmVudCkge1xuICAgIG5leHQgPSBleHRlbmQoe30sIG5leHQpO1xuICAgIG5leHQuX25vcm1hbGl6ZWQgPSB0cnVlO1xuICAgIHZhciBwYXJhbXMgPSBleHRlbmQoZXh0ZW5kKHt9LCBjdXJyZW50LnBhcmFtcyksIG5leHQucGFyYW1zKTtcbiAgICBpZiAoY3VycmVudC5uYW1lKSB7XG4gICAgICBuZXh0Lm5hbWUgPSBjdXJyZW50Lm5hbWU7XG4gICAgICBuZXh0LnBhcmFtcyA9IHBhcmFtcztcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnQubWF0Y2hlZC5sZW5ndGgpIHtcbiAgICAgIHZhciByYXdQYXRoID0gY3VycmVudC5tYXRjaGVkW2N1cnJlbnQubWF0Y2hlZC5sZW5ndGggLSAxXS5wYXRoO1xuICAgICAgbmV4dC5wYXRoID0gZmlsbFBhcmFtcyhyYXdQYXRoLCBwYXJhbXMsIChcInBhdGggXCIgKyAoY3VycmVudC5wYXRoKSkpO1xuICAgIH0gZWxzZSBpZiAoXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgd2FybihmYWxzZSwgXCJyZWxhdGl2ZSBwYXJhbXMgbmF2aWdhdGlvbiByZXF1aXJlcyBhIGN1cnJlbnQgcm91dGUuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dFxuICB9XG5cbiAgdmFyIHBhcnNlZFBhdGggPSBwYXJzZVBhdGgobmV4dC5wYXRoIHx8ICcnKTtcbiAgdmFyIGJhc2VQYXRoID0gKGN1cnJlbnQgJiYgY3VycmVudC5wYXRoKSB8fCAnLyc7XG4gIHZhciBwYXRoID0gcGFyc2VkUGF0aC5wYXRoXG4gICAgPyByZXNvbHZlUGF0aChwYXJzZWRQYXRoLnBhdGgsIGJhc2VQYXRoLCBhcHBlbmQgfHwgbmV4dC5hcHBlbmQpXG4gICAgOiBiYXNlUGF0aDtcblxuICB2YXIgcXVlcnkgPSByZXNvbHZlUXVlcnkoXG4gICAgcGFyc2VkUGF0aC5xdWVyeSxcbiAgICBuZXh0LnF1ZXJ5LFxuICAgIHJvdXRlciAmJiByb3V0ZXIub3B0aW9ucy5wYXJzZVF1ZXJ5XG4gICk7XG5cbiAgdmFyIGhhc2ggPSBuZXh0Lmhhc2ggfHwgcGFyc2VkUGF0aC5oYXNoO1xuICBpZiAoaGFzaCAmJiBoYXNoLmNoYXJBdCgwKSAhPT0gJyMnKSB7XG4gICAgaGFzaCA9IFwiI1wiICsgaGFzaDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgX25vcm1hbGl6ZWQ6IHRydWUsXG4gICAgcGF0aDogcGF0aCxcbiAgICBxdWVyeTogcXVlcnksXG4gICAgaGFzaDogaGFzaFxuICB9XG59XG5cbi8qICAqL1xuXG4vLyB3b3JrIGFyb3VuZCB3ZWlyZCBmbG93IGJ1Z1xudmFyIHRvVHlwZXMgPSBbU3RyaW5nLCBPYmplY3RdO1xudmFyIGV2ZW50VHlwZXMgPSBbU3RyaW5nLCBBcnJheV07XG5cbnZhciBub29wID0gZnVuY3Rpb24gKCkge307XG5cbnZhciBMaW5rID0ge1xuICBuYW1lOiAnUm91dGVyTGluaycsXG4gIHByb3BzOiB7XG4gICAgdG86IHtcbiAgICAgIHR5cGU6IHRvVHlwZXMsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgdGFnOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnYSdcbiAgICB9LFxuICAgIGV4YWN0OiBCb29sZWFuLFxuICAgIGFwcGVuZDogQm9vbGVhbixcbiAgICByZXBsYWNlOiBCb29sZWFuLFxuICAgIGFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gICAgZXhhY3RBY3RpdmVDbGFzczogU3RyaW5nLFxuICAgIGV2ZW50OiB7XG4gICAgICB0eXBlOiBldmVudFR5cGVzLFxuICAgICAgZGVmYXVsdDogJ2NsaWNrJ1xuICAgIH1cbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKGgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciByb3V0ZXIgPSB0aGlzLiRyb3V0ZXI7XG4gICAgdmFyIGN1cnJlbnQgPSB0aGlzLiRyb3V0ZTtcbiAgICB2YXIgcmVmID0gcm91dGVyLnJlc29sdmUoXG4gICAgICB0aGlzLnRvLFxuICAgICAgY3VycmVudCxcbiAgICAgIHRoaXMuYXBwZW5kXG4gICAgKTtcbiAgICB2YXIgbG9jYXRpb24gPSByZWYubG9jYXRpb247XG4gICAgdmFyIHJvdXRlID0gcmVmLnJvdXRlO1xuICAgIHZhciBocmVmID0gcmVmLmhyZWY7XG5cbiAgICB2YXIgY2xhc3NlcyA9IHt9O1xuICAgIHZhciBnbG9iYWxBY3RpdmVDbGFzcyA9IHJvdXRlci5vcHRpb25zLmxpbmtBY3RpdmVDbGFzcztcbiAgICB2YXIgZ2xvYmFsRXhhY3RBY3RpdmVDbGFzcyA9IHJvdXRlci5vcHRpb25zLmxpbmtFeGFjdEFjdGl2ZUNsYXNzO1xuICAgIC8vIFN1cHBvcnQgZ2xvYmFsIGVtcHR5IGFjdGl2ZSBjbGFzc1xuICAgIHZhciBhY3RpdmVDbGFzc0ZhbGxiYWNrID1cbiAgICAgIGdsb2JhbEFjdGl2ZUNsYXNzID09IG51bGwgPyAncm91dGVyLWxpbmstYWN0aXZlJyA6IGdsb2JhbEFjdGl2ZUNsYXNzO1xuICAgIHZhciBleGFjdEFjdGl2ZUNsYXNzRmFsbGJhY2sgPVxuICAgICAgZ2xvYmFsRXhhY3RBY3RpdmVDbGFzcyA9PSBudWxsXG4gICAgICAgID8gJ3JvdXRlci1saW5rLWV4YWN0LWFjdGl2ZSdcbiAgICAgICAgOiBnbG9iYWxFeGFjdEFjdGl2ZUNsYXNzO1xuICAgIHZhciBhY3RpdmVDbGFzcyA9XG4gICAgICB0aGlzLmFjdGl2ZUNsYXNzID09IG51bGwgPyBhY3RpdmVDbGFzc0ZhbGxiYWNrIDogdGhpcy5hY3RpdmVDbGFzcztcbiAgICB2YXIgZXhhY3RBY3RpdmVDbGFzcyA9XG4gICAgICB0aGlzLmV4YWN0QWN0aXZlQ2xhc3MgPT0gbnVsbFxuICAgICAgICA/IGV4YWN0QWN0aXZlQ2xhc3NGYWxsYmFja1xuICAgICAgICA6IHRoaXMuZXhhY3RBY3RpdmVDbGFzcztcblxuICAgIHZhciBjb21wYXJlVGFyZ2V0ID0gcm91dGUucmVkaXJlY3RlZEZyb21cbiAgICAgID8gY3JlYXRlUm91dGUobnVsbCwgbm9ybWFsaXplTG9jYXRpb24ocm91dGUucmVkaXJlY3RlZEZyb20pLCBudWxsLCByb3V0ZXIpXG4gICAgICA6IHJvdXRlO1xuXG4gICAgY2xhc3Nlc1tleGFjdEFjdGl2ZUNsYXNzXSA9IGlzU2FtZVJvdXRlKGN1cnJlbnQsIGNvbXBhcmVUYXJnZXQpO1xuICAgIGNsYXNzZXNbYWN0aXZlQ2xhc3NdID0gdGhpcy5leGFjdFxuICAgICAgPyBjbGFzc2VzW2V4YWN0QWN0aXZlQ2xhc3NdXG4gICAgICA6IGlzSW5jbHVkZWRSb3V0ZShjdXJyZW50LCBjb21wYXJlVGFyZ2V0KTtcblxuICAgIHZhciBoYW5kbGVyID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChndWFyZEV2ZW50KGUpKSB7XG4gICAgICAgIGlmICh0aGlzJDEucmVwbGFjZSkge1xuICAgICAgICAgIHJvdXRlci5yZXBsYWNlKGxvY2F0aW9uLCBub29wKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByb3V0ZXIucHVzaChsb2NhdGlvbiwgbm9vcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIG9uID0geyBjbGljazogZ3VhcmRFdmVudCB9O1xuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZXZlbnQpKSB7XG4gICAgICB0aGlzLmV2ZW50LmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgb25bZV0gPSBoYW5kbGVyO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uW3RoaXMuZXZlbnRdID0gaGFuZGxlcjtcbiAgICB9XG5cbiAgICB2YXIgZGF0YSA9IHsgY2xhc3M6IGNsYXNzZXMgfTtcblxuICAgIHZhciBzY29wZWRTbG90ID1cbiAgICAgICF0aGlzLiRzY29wZWRTbG90cy4kaGFzTm9ybWFsICYmXG4gICAgICB0aGlzLiRzY29wZWRTbG90cy5kZWZhdWx0ICYmXG4gICAgICB0aGlzLiRzY29wZWRTbG90cy5kZWZhdWx0KHtcbiAgICAgICAgaHJlZjogaHJlZixcbiAgICAgICAgcm91dGU6IHJvdXRlLFxuICAgICAgICBuYXZpZ2F0ZTogaGFuZGxlcixcbiAgICAgICAgaXNBY3RpdmU6IGNsYXNzZXNbYWN0aXZlQ2xhc3NdLFxuICAgICAgICBpc0V4YWN0QWN0aXZlOiBjbGFzc2VzW2V4YWN0QWN0aXZlQ2xhc3NdXG4gICAgICB9KTtcblxuICAgIGlmIChzY29wZWRTbG90KSB7XG4gICAgICBpZiAoc2NvcGVkU2xvdC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHNjb3BlZFNsb3RbMF1cbiAgICAgIH0gZWxzZSBpZiAoc2NvcGVkU2xvdC5sZW5ndGggPiAxIHx8ICFzY29wZWRTbG90Lmxlbmd0aCkge1xuICAgICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIChcIlJvdXRlckxpbmsgd2l0aCB0bz1cXFwiXCIgKyAodGhpcy5wcm9wcy50bykgKyBcIlxcXCIgaXMgdHJ5aW5nIHRvIHVzZSBhIHNjb3BlZCBzbG90IGJ1dCBpdCBkaWRuJ3QgcHJvdmlkZSBleGFjdGx5IG9uZSBjaGlsZC5cIilcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzY29wZWRTbG90Lmxlbmd0aCA9PT0gMCA/IGgoKSA6IGgoJ3NwYW4nLCB7fSwgc2NvcGVkU2xvdClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy50YWcgPT09ICdhJykge1xuICAgICAgZGF0YS5vbiA9IG9uO1xuICAgICAgZGF0YS5hdHRycyA9IHsgaHJlZjogaHJlZiB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmaW5kIHRoZSBmaXJzdCA8YT4gY2hpbGQgYW5kIGFwcGx5IGxpc3RlbmVyIGFuZCBocmVmXG4gICAgICB2YXIgYSA9IGZpbmRBbmNob3IodGhpcy4kc2xvdHMuZGVmYXVsdCk7XG4gICAgICBpZiAoYSkge1xuICAgICAgICAvLyBpbiBjYXNlIHRoZSA8YT4gaXMgYSBzdGF0aWMgbm9kZVxuICAgICAgICBhLmlzU3RhdGljID0gZmFsc2U7XG4gICAgICAgIHZhciBhRGF0YSA9IChhLmRhdGEgPSBleHRlbmQoe30sIGEuZGF0YSkpO1xuICAgICAgICBhRGF0YS5vbiA9IGFEYXRhLm9uIHx8IHt9O1xuICAgICAgICAvLyB0cmFuc2Zvcm0gZXhpc3RpbmcgZXZlbnRzIGluIGJvdGggb2JqZWN0cyBpbnRvIGFycmF5cyBzbyB3ZSBjYW4gcHVzaCBsYXRlclxuICAgICAgICBmb3IgKHZhciBldmVudCBpbiBhRGF0YS5vbikge1xuICAgICAgICAgIHZhciBoYW5kbGVyJDEgPSBhRGF0YS5vbltldmVudF07XG4gICAgICAgICAgaWYgKGV2ZW50IGluIG9uKSB7XG4gICAgICAgICAgICBhRGF0YS5vbltldmVudF0gPSBBcnJheS5pc0FycmF5KGhhbmRsZXIkMSkgPyBoYW5kbGVyJDEgOiBbaGFuZGxlciQxXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gYXBwZW5kIG5ldyBsaXN0ZW5lcnMgZm9yIHJvdXRlci1saW5rXG4gICAgICAgIGZvciAodmFyIGV2ZW50JDEgaW4gb24pIHtcbiAgICAgICAgICBpZiAoZXZlbnQkMSBpbiBhRGF0YS5vbikge1xuICAgICAgICAgICAgLy8gb25bZXZlbnRdIGlzIGFsd2F5cyBhIGZ1bmN0aW9uXG4gICAgICAgICAgICBhRGF0YS5vbltldmVudCQxXS5wdXNoKG9uW2V2ZW50JDFdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYURhdGEub25bZXZlbnQkMV0gPSBoYW5kbGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBhQXR0cnMgPSAoYS5kYXRhLmF0dHJzID0gZXh0ZW5kKHt9LCBhLmRhdGEuYXR0cnMpKTtcbiAgICAgICAgYUF0dHJzLmhyZWYgPSBocmVmO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZG9lc24ndCBoYXZlIDxhPiBjaGlsZCwgYXBwbHkgbGlzdGVuZXIgdG8gc2VsZlxuICAgICAgICBkYXRhLm9uID0gb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGgodGhpcy50YWcsIGRhdGEsIHRoaXMuJHNsb3RzLmRlZmF1bHQpXG4gIH1cbn07XG5cbmZ1bmN0aW9uIGd1YXJkRXZlbnQgKGUpIHtcbiAgLy8gZG9uJ3QgcmVkaXJlY3Qgd2l0aCBjb250cm9sIGtleXNcbiAgaWYgKGUubWV0YUtleSB8fCBlLmFsdEtleSB8fCBlLmN0cmxLZXkgfHwgZS5zaGlmdEtleSkgeyByZXR1cm4gfVxuICAvLyBkb24ndCByZWRpcmVjdCB3aGVuIHByZXZlbnREZWZhdWx0IGNhbGxlZFxuICBpZiAoZS5kZWZhdWx0UHJldmVudGVkKSB7IHJldHVybiB9XG4gIC8vIGRvbid0IHJlZGlyZWN0IG9uIHJpZ2h0IGNsaWNrXG4gIGlmIChlLmJ1dHRvbiAhPT0gdW5kZWZpbmVkICYmIGUuYnV0dG9uICE9PSAwKSB7IHJldHVybiB9XG4gIC8vIGRvbid0IHJlZGlyZWN0IGlmIGB0YXJnZXQ9XCJfYmxhbmtcImBcbiAgaWYgKGUuY3VycmVudFRhcmdldCAmJiBlLmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKSB7XG4gICAgdmFyIHRhcmdldCA9IGUuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoJ3RhcmdldCcpO1xuICAgIGlmICgvXFxiX2JsYW5rXFxiL2kudGVzdCh0YXJnZXQpKSB7IHJldHVybiB9XG4gIH1cbiAgLy8gdGhpcyBtYXkgYmUgYSBXZWV4IGV2ZW50IHdoaWNoIGRvZXNuJ3QgaGF2ZSB0aGlzIG1ldGhvZFxuICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBmaW5kQW5jaG9yIChjaGlsZHJlbikge1xuICBpZiAoY2hpbGRyZW4pIHtcbiAgICB2YXIgY2hpbGQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgIGlmIChjaGlsZC50YWcgPT09ICdhJykge1xuICAgICAgICByZXR1cm4gY2hpbGRcbiAgICAgIH1cbiAgICAgIGlmIChjaGlsZC5jaGlsZHJlbiAmJiAoY2hpbGQgPSBmaW5kQW5jaG9yKGNoaWxkLmNoaWxkcmVuKSkpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBfVnVlO1xuXG5mdW5jdGlvbiBpbnN0YWxsIChWdWUpIHtcbiAgaWYgKGluc3RhbGwuaW5zdGFsbGVkICYmIF9WdWUgPT09IFZ1ZSkgeyByZXR1cm4gfVxuICBpbnN0YWxsLmluc3RhbGxlZCA9IHRydWU7XG5cbiAgX1Z1ZSA9IFZ1ZTtcblxuICB2YXIgaXNEZWYgPSBmdW5jdGlvbiAodikgeyByZXR1cm4gdiAhPT0gdW5kZWZpbmVkOyB9O1xuXG4gIHZhciByZWdpc3Rlckluc3RhbmNlID0gZnVuY3Rpb24gKHZtLCBjYWxsVmFsKSB7XG4gICAgdmFyIGkgPSB2bS4kb3B0aW9ucy5fcGFyZW50Vm5vZGU7XG4gICAgaWYgKGlzRGVmKGkpICYmIGlzRGVmKGkgPSBpLmRhdGEpICYmIGlzRGVmKGkgPSBpLnJlZ2lzdGVyUm91dGVJbnN0YW5jZSkpIHtcbiAgICAgIGkodm0sIGNhbGxWYWwpO1xuICAgIH1cbiAgfTtcblxuICBWdWUubWl4aW4oe1xuICAgIGJlZm9yZUNyZWF0ZTogZnVuY3Rpb24gYmVmb3JlQ3JlYXRlICgpIHtcbiAgICAgIGlmIChpc0RlZih0aGlzLiRvcHRpb25zLnJvdXRlcikpIHtcbiAgICAgICAgdGhpcy5fcm91dGVyUm9vdCA9IHRoaXM7XG4gICAgICAgIHRoaXMuX3JvdXRlciA9IHRoaXMuJG9wdGlvbnMucm91dGVyO1xuICAgICAgICB0aGlzLl9yb3V0ZXIuaW5pdCh0aGlzKTtcbiAgICAgICAgVnVlLnV0aWwuZGVmaW5lUmVhY3RpdmUodGhpcywgJ19yb3V0ZScsIHRoaXMuX3JvdXRlci5oaXN0b3J5LmN1cnJlbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fcm91dGVyUm9vdCA9ICh0aGlzLiRwYXJlbnQgJiYgdGhpcy4kcGFyZW50Ll9yb3V0ZXJSb290KSB8fCB0aGlzO1xuICAgICAgfVxuICAgICAgcmVnaXN0ZXJJbnN0YW5jZSh0aGlzLCB0aGlzKTtcbiAgICB9LFxuICAgIGRlc3Ryb3llZDogZnVuY3Rpb24gZGVzdHJveWVkICgpIHtcbiAgICAgIHJlZ2lzdGVySW5zdGFuY2UodGhpcyk7XG4gICAgfVxuICB9KTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRyb3V0ZXInLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkgeyByZXR1cm4gdGhpcy5fcm91dGVyUm9vdC5fcm91dGVyIH1cbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckcm91dGUnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkgeyByZXR1cm4gdGhpcy5fcm91dGVyUm9vdC5fcm91dGUgfVxuICB9KTtcblxuICBWdWUuY29tcG9uZW50KCdSb3V0ZXJWaWV3JywgVmlldyk7XG4gIFZ1ZS5jb21wb25lbnQoJ1JvdXRlckxpbmsnLCBMaW5rKTtcblxuICB2YXIgc3RyYXRzID0gVnVlLmNvbmZpZy5vcHRpb25NZXJnZVN0cmF0ZWdpZXM7XG4gIC8vIHVzZSB0aGUgc2FtZSBob29rIG1lcmdpbmcgc3RyYXRlZ3kgZm9yIHJvdXRlIGhvb2tzXG4gIHN0cmF0cy5iZWZvcmVSb3V0ZUVudGVyID0gc3RyYXRzLmJlZm9yZVJvdXRlTGVhdmUgPSBzdHJhdHMuYmVmb3JlUm91dGVVcGRhdGUgPSBzdHJhdHMuY3JlYXRlZDtcbn1cblxuLyogICovXG5cbnZhciBpbkJyb3dzZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcblxuLyogICovXG5cbmZ1bmN0aW9uIGNyZWF0ZVJvdXRlTWFwIChcbiAgcm91dGVzLFxuICBvbGRQYXRoTGlzdCxcbiAgb2xkUGF0aE1hcCxcbiAgb2xkTmFtZU1hcFxuKSB7XG4gIC8vIHRoZSBwYXRoIGxpc3QgaXMgdXNlZCB0byBjb250cm9sIHBhdGggbWF0Y2hpbmcgcHJpb3JpdHlcbiAgdmFyIHBhdGhMaXN0ID0gb2xkUGF0aExpc3QgfHwgW107XG4gIC8vICRmbG93LWRpc2FibGUtbGluZVxuICB2YXIgcGF0aE1hcCA9IG9sZFBhdGhNYXAgfHwgT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIHZhciBuYW1lTWFwID0gb2xkTmFtZU1hcCB8fCBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIHJvdXRlcy5mb3JFYWNoKGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgIGFkZFJvdXRlUmVjb3JkKHBhdGhMaXN0LCBwYXRoTWFwLCBuYW1lTWFwLCByb3V0ZSk7XG4gIH0pO1xuXG4gIC8vIGVuc3VyZSB3aWxkY2FyZCByb3V0ZXMgYXJlIGFsd2F5cyBhdCB0aGUgZW5kXG4gIGZvciAodmFyIGkgPSAwLCBsID0gcGF0aExpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgaWYgKHBhdGhMaXN0W2ldID09PSAnKicpIHtcbiAgICAgIHBhdGhMaXN0LnB1c2gocGF0aExpc3Quc3BsaWNlKGksIDEpWzBdKTtcbiAgICAgIGwtLTtcbiAgICAgIGktLTtcbiAgICB9XG4gIH1cblxuICBpZiAoXCJwcm9kdWN0aW9uXCIgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAvLyB3YXJuIGlmIHJvdXRlcyBkbyBub3QgaW5jbHVkZSBsZWFkaW5nIHNsYXNoZXNcbiAgICB2YXIgZm91bmQgPSBwYXRoTGlzdFxuICAgIC8vIGNoZWNrIGZvciBtaXNzaW5nIGxlYWRpbmcgc2xhc2hcbiAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHBhdGgpIHsgcmV0dXJuIHBhdGggJiYgcGF0aC5jaGFyQXQoMCkgIT09ICcqJyAmJiBwYXRoLmNoYXJBdCgwKSAhPT0gJy8nOyB9KTtcblxuICAgIGlmIChmb3VuZC5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgcGF0aE5hbWVzID0gZm91bmQubWFwKGZ1bmN0aW9uIChwYXRoKSB7IHJldHVybiAoXCItIFwiICsgcGF0aCk7IH0pLmpvaW4oJ1xcbicpO1xuICAgICAgd2FybihmYWxzZSwgKFwiTm9uLW5lc3RlZCByb3V0ZXMgbXVzdCBpbmNsdWRlIGEgbGVhZGluZyBzbGFzaCBjaGFyYWN0ZXIuIEZpeCB0aGUgZm9sbG93aW5nIHJvdXRlczogXFxuXCIgKyBwYXRoTmFtZXMpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhdGhMaXN0OiBwYXRoTGlzdCxcbiAgICBwYXRoTWFwOiBwYXRoTWFwLFxuICAgIG5hbWVNYXA6IG5hbWVNYXBcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRSb3V0ZVJlY29yZCAoXG4gIHBhdGhMaXN0LFxuICBwYXRoTWFwLFxuICBuYW1lTWFwLFxuICByb3V0ZSxcbiAgcGFyZW50LFxuICBtYXRjaEFzXG4pIHtcbiAgdmFyIHBhdGggPSByb3V0ZS5wYXRoO1xuICB2YXIgbmFtZSA9IHJvdXRlLm5hbWU7XG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0KHBhdGggIT0gbnVsbCwgXCJcXFwicGF0aFxcXCIgaXMgcmVxdWlyZWQgaW4gYSByb3V0ZSBjb25maWd1cmF0aW9uLlwiKTtcbiAgICBhc3NlcnQoXG4gICAgICB0eXBlb2Ygcm91dGUuY29tcG9uZW50ICE9PSAnc3RyaW5nJyxcbiAgICAgIFwicm91dGUgY29uZmlnIFxcXCJjb21wb25lbnRcXFwiIGZvciBwYXRoOiBcIiArIChTdHJpbmcoXG4gICAgICAgIHBhdGggfHwgbmFtZVxuICAgICAgKSkgKyBcIiBjYW5ub3QgYmUgYSBcIiArIFwic3RyaW5nIGlkLiBVc2UgYW4gYWN0dWFsIGNvbXBvbmVudCBpbnN0ZWFkLlwiXG4gICAgKTtcbiAgfVxuXG4gIHZhciBwYXRoVG9SZWdleHBPcHRpb25zID1cbiAgICByb3V0ZS5wYXRoVG9SZWdleHBPcHRpb25zIHx8IHt9O1xuICB2YXIgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVQYXRoKHBhdGgsIHBhcmVudCwgcGF0aFRvUmVnZXhwT3B0aW9ucy5zdHJpY3QpO1xuXG4gIGlmICh0eXBlb2Ygcm91dGUuY2FzZVNlbnNpdGl2ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcGF0aFRvUmVnZXhwT3B0aW9ucy5zZW5zaXRpdmUgPSByb3V0ZS5jYXNlU2Vuc2l0aXZlO1xuICB9XG5cbiAgdmFyIHJlY29yZCA9IHtcbiAgICBwYXRoOiBub3JtYWxpemVkUGF0aCxcbiAgICByZWdleDogY29tcGlsZVJvdXRlUmVnZXgobm9ybWFsaXplZFBhdGgsIHBhdGhUb1JlZ2V4cE9wdGlvbnMpLFxuICAgIGNvbXBvbmVudHM6IHJvdXRlLmNvbXBvbmVudHMgfHwgeyBkZWZhdWx0OiByb3V0ZS5jb21wb25lbnQgfSxcbiAgICBpbnN0YW5jZXM6IHt9LFxuICAgIG5hbWU6IG5hbWUsXG4gICAgcGFyZW50OiBwYXJlbnQsXG4gICAgbWF0Y2hBczogbWF0Y2hBcyxcbiAgICByZWRpcmVjdDogcm91dGUucmVkaXJlY3QsXG4gICAgYmVmb3JlRW50ZXI6IHJvdXRlLmJlZm9yZUVudGVyLFxuICAgIG1ldGE6IHJvdXRlLm1ldGEgfHwge30sXG4gICAgcHJvcHM6XG4gICAgICByb3V0ZS5wcm9wcyA9PSBudWxsXG4gICAgICAgID8ge31cbiAgICAgICAgOiByb3V0ZS5jb21wb25lbnRzXG4gICAgICAgICAgPyByb3V0ZS5wcm9wc1xuICAgICAgICAgIDogeyBkZWZhdWx0OiByb3V0ZS5wcm9wcyB9XG4gIH07XG5cbiAgaWYgKHJvdXRlLmNoaWxkcmVuKSB7XG4gICAgLy8gV2FybiBpZiByb3V0ZSBpcyBuYW1lZCwgZG9lcyBub3QgcmVkaXJlY3QgYW5kIGhhcyBhIGRlZmF1bHQgY2hpbGQgcm91dGUuXG4gICAgLy8gSWYgdXNlcnMgbmF2aWdhdGUgdG8gdGhpcyByb3V0ZSBieSBuYW1lLCB0aGUgZGVmYXVsdCBjaGlsZCB3aWxsXG4gICAgLy8gbm90IGJlIHJlbmRlcmVkIChHSCBJc3N1ZSAjNjI5KVxuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJvdXRlLm5hbWUgJiZcbiAgICAgICAgIXJvdXRlLnJlZGlyZWN0ICYmXG4gICAgICAgIHJvdXRlLmNoaWxkcmVuLnNvbWUoZnVuY3Rpb24gKGNoaWxkKSB7IHJldHVybiAvXlxcLz8kLy50ZXN0KGNoaWxkLnBhdGgpOyB9KVxuICAgICAgKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgXCJOYW1lZCBSb3V0ZSAnXCIgKyAocm91dGUubmFtZSkgKyBcIicgaGFzIGEgZGVmYXVsdCBjaGlsZCByb3V0ZS4gXCIgK1xuICAgICAgICAgICAgXCJXaGVuIG5hdmlnYXRpbmcgdG8gdGhpcyBuYW1lZCByb3V0ZSAoOnRvPVxcXCJ7bmFtZTogJ1wiICsgKHJvdXRlLm5hbWUpICsgXCInXFxcIiksIFwiICtcbiAgICAgICAgICAgIFwidGhlIGRlZmF1bHQgY2hpbGQgcm91dGUgd2lsbCBub3QgYmUgcmVuZGVyZWQuIFJlbW92ZSB0aGUgbmFtZSBmcm9tIFwiICtcbiAgICAgICAgICAgIFwidGhpcyByb3V0ZSBhbmQgdXNlIHRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IGNoaWxkIHJvdXRlIGZvciBuYW1lZCBcIiArXG4gICAgICAgICAgICBcImxpbmtzIGluc3RlYWQuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcm91dGUuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgIHZhciBjaGlsZE1hdGNoQXMgPSBtYXRjaEFzXG4gICAgICAgID8gY2xlYW5QYXRoKChtYXRjaEFzICsgXCIvXCIgKyAoY2hpbGQucGF0aCkpKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGFkZFJvdXRlUmVjb3JkKHBhdGhMaXN0LCBwYXRoTWFwLCBuYW1lTWFwLCBjaGlsZCwgcmVjb3JkLCBjaGlsZE1hdGNoQXMpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKCFwYXRoTWFwW3JlY29yZC5wYXRoXSkge1xuICAgIHBhdGhMaXN0LnB1c2gocmVjb3JkLnBhdGgpO1xuICAgIHBhdGhNYXBbcmVjb3JkLnBhdGhdID0gcmVjb3JkO1xuICB9XG5cbiAgaWYgKHJvdXRlLmFsaWFzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgYWxpYXNlcyA9IEFycmF5LmlzQXJyYXkocm91dGUuYWxpYXMpID8gcm91dGUuYWxpYXMgOiBbcm91dGUuYWxpYXNdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxpYXNlcy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGFsaWFzID0gYWxpYXNlc1tpXTtcbiAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nICYmIGFsaWFzID09PSBwYXRoKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgKFwiRm91bmQgYW4gYWxpYXMgd2l0aCB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgcGF0aDogXFxcIlwiICsgcGF0aCArIFwiXFxcIi4gWW91IGhhdmUgdG8gcmVtb3ZlIHRoYXQgYWxpYXMuIEl0IHdpbGwgYmUgaWdub3JlZCBpbiBkZXZlbG9wbWVudC5cIilcbiAgICAgICAgKTtcbiAgICAgICAgLy8gc2tpcCBpbiBkZXYgdG8gbWFrZSBpdCB3b3JrXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHZhciBhbGlhc1JvdXRlID0ge1xuICAgICAgICBwYXRoOiBhbGlhcyxcbiAgICAgICAgY2hpbGRyZW46IHJvdXRlLmNoaWxkcmVuXG4gICAgICB9O1xuICAgICAgYWRkUm91dGVSZWNvcmQoXG4gICAgICAgIHBhdGhMaXN0LFxuICAgICAgICBwYXRoTWFwLFxuICAgICAgICBuYW1lTWFwLFxuICAgICAgICBhbGlhc1JvdXRlLFxuICAgICAgICBwYXJlbnQsXG4gICAgICAgIHJlY29yZC5wYXRoIHx8ICcvJyAvLyBtYXRjaEFzXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChuYW1lKSB7XG4gICAgaWYgKCFuYW1lTWFwW25hbWVdKSB7XG4gICAgICBuYW1lTWFwW25hbWVdID0gcmVjb3JkO1xuICAgIH0gZWxzZSBpZiAoXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJyAmJiAhbWF0Y2hBcykge1xuICAgICAgd2FybihcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIFwiRHVwbGljYXRlIG5hbWVkIHJvdXRlcyBkZWZpbml0aW9uOiBcIiArXG4gICAgICAgICAgXCJ7IG5hbWU6IFxcXCJcIiArIG5hbWUgKyBcIlxcXCIsIHBhdGg6IFxcXCJcIiArIChyZWNvcmQucGF0aCkgKyBcIlxcXCIgfVwiXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21waWxlUm91dGVSZWdleCAoXG4gIHBhdGgsXG4gIHBhdGhUb1JlZ2V4cE9wdGlvbnNcbikge1xuICB2YXIgcmVnZXggPSBwYXRoVG9SZWdleHBfMShwYXRoLCBbXSwgcGF0aFRvUmVnZXhwT3B0aW9ucyk7XG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgdmFyIGtleXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHJlZ2V4LmtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB3YXJuKFxuICAgICAgICAha2V5c1trZXkubmFtZV0sXG4gICAgICAgIChcIkR1cGxpY2F0ZSBwYXJhbSBrZXlzIGluIHJvdXRlIHdpdGggcGF0aDogXFxcIlwiICsgcGF0aCArIFwiXFxcIlwiKVxuICAgICAgKTtcbiAgICAgIGtleXNba2V5Lm5hbWVdID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gcmVnZXhcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUGF0aCAoXG4gIHBhdGgsXG4gIHBhcmVudCxcbiAgc3RyaWN0XG4pIHtcbiAgaWYgKCFzdHJpY3QpIHsgcGF0aCA9IHBhdGgucmVwbGFjZSgvXFwvJC8sICcnKTsgfVxuICBpZiAocGF0aFswXSA9PT0gJy8nKSB7IHJldHVybiBwYXRoIH1cbiAgaWYgKHBhcmVudCA9PSBudWxsKSB7IHJldHVybiBwYXRoIH1cbiAgcmV0dXJuIGNsZWFuUGF0aCgoKHBhcmVudC5wYXRoKSArIFwiL1wiICsgcGF0aCkpXG59XG5cbi8qICAqL1xuXG5cblxuZnVuY3Rpb24gY3JlYXRlTWF0Y2hlciAoXG4gIHJvdXRlcyxcbiAgcm91dGVyXG4pIHtcbiAgdmFyIHJlZiA9IGNyZWF0ZVJvdXRlTWFwKHJvdXRlcyk7XG4gIHZhciBwYXRoTGlzdCA9IHJlZi5wYXRoTGlzdDtcbiAgdmFyIHBhdGhNYXAgPSByZWYucGF0aE1hcDtcbiAgdmFyIG5hbWVNYXAgPSByZWYubmFtZU1hcDtcblxuICBmdW5jdGlvbiBhZGRSb3V0ZXMgKHJvdXRlcykge1xuICAgIGNyZWF0ZVJvdXRlTWFwKHJvdXRlcywgcGF0aExpc3QsIHBhdGhNYXAsIG5hbWVNYXApO1xuICB9XG5cbiAgZnVuY3Rpb24gbWF0Y2ggKFxuICAgIHJhdyxcbiAgICBjdXJyZW50Um91dGUsXG4gICAgcmVkaXJlY3RlZEZyb21cbiAgKSB7XG4gICAgdmFyIGxvY2F0aW9uID0gbm9ybWFsaXplTG9jYXRpb24ocmF3LCBjdXJyZW50Um91dGUsIGZhbHNlLCByb3V0ZXIpO1xuICAgIHZhciBuYW1lID0gbG9jYXRpb24ubmFtZTtcblxuICAgIGlmIChuYW1lKSB7XG4gICAgICB2YXIgcmVjb3JkID0gbmFtZU1hcFtuYW1lXTtcbiAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm4ocmVjb3JkLCAoXCJSb3V0ZSB3aXRoIG5hbWUgJ1wiICsgbmFtZSArIFwiJyBkb2VzIG5vdCBleGlzdFwiKSk7XG4gICAgICB9XG4gICAgICBpZiAoIXJlY29yZCkgeyByZXR1cm4gX2NyZWF0ZVJvdXRlKG51bGwsIGxvY2F0aW9uKSB9XG4gICAgICB2YXIgcGFyYW1OYW1lcyA9IHJlY29yZC5yZWdleC5rZXlzXG4gICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gIWtleS5vcHRpb25hbDsgfSlcbiAgICAgICAgLm1hcChmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBrZXkubmFtZTsgfSk7XG5cbiAgICAgIGlmICh0eXBlb2YgbG9jYXRpb24ucGFyYW1zICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBsb2NhdGlvbi5wYXJhbXMgPSB7fTtcbiAgICAgIH1cblxuICAgICAgaWYgKGN1cnJlbnRSb3V0ZSAmJiB0eXBlb2YgY3VycmVudFJvdXRlLnBhcmFtcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGN1cnJlbnRSb3V0ZS5wYXJhbXMpIHtcbiAgICAgICAgICBpZiAoIShrZXkgaW4gbG9jYXRpb24ucGFyYW1zKSAmJiBwYXJhbU5hbWVzLmluZGV4T2Yoa2V5KSA+IC0xKSB7XG4gICAgICAgICAgICBsb2NhdGlvbi5wYXJhbXNba2V5XSA9IGN1cnJlbnRSb3V0ZS5wYXJhbXNba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbG9jYXRpb24ucGF0aCA9IGZpbGxQYXJhbXMocmVjb3JkLnBhdGgsIGxvY2F0aW9uLnBhcmFtcywgKFwibmFtZWQgcm91dGUgXFxcIlwiICsgbmFtZSArIFwiXFxcIlwiKSk7XG4gICAgICByZXR1cm4gX2NyZWF0ZVJvdXRlKHJlY29yZCwgbG9jYXRpb24sIHJlZGlyZWN0ZWRGcm9tKVxuICAgIH0gZWxzZSBpZiAobG9jYXRpb24ucGF0aCkge1xuICAgICAgbG9jYXRpb24ucGFyYW1zID0ge307XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGhMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwYXRoID0gcGF0aExpc3RbaV07XG4gICAgICAgIHZhciByZWNvcmQkMSA9IHBhdGhNYXBbcGF0aF07XG4gICAgICAgIGlmIChtYXRjaFJvdXRlKHJlY29yZCQxLnJlZ2V4LCBsb2NhdGlvbi5wYXRoLCBsb2NhdGlvbi5wYXJhbXMpKSB7XG4gICAgICAgICAgcmV0dXJuIF9jcmVhdGVSb3V0ZShyZWNvcmQkMSwgbG9jYXRpb24sIHJlZGlyZWN0ZWRGcm9tKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIG5vIG1hdGNoXG4gICAgcmV0dXJuIF9jcmVhdGVSb3V0ZShudWxsLCBsb2NhdGlvbilcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlZGlyZWN0IChcbiAgICByZWNvcmQsXG4gICAgbG9jYXRpb25cbiAgKSB7XG4gICAgdmFyIG9yaWdpbmFsUmVkaXJlY3QgPSByZWNvcmQucmVkaXJlY3Q7XG4gICAgdmFyIHJlZGlyZWN0ID0gdHlwZW9mIG9yaWdpbmFsUmVkaXJlY3QgPT09ICdmdW5jdGlvbidcbiAgICAgID8gb3JpZ2luYWxSZWRpcmVjdChjcmVhdGVSb3V0ZShyZWNvcmQsIGxvY2F0aW9uLCBudWxsLCByb3V0ZXIpKVxuICAgICAgOiBvcmlnaW5hbFJlZGlyZWN0O1xuXG4gICAgaWYgKHR5cGVvZiByZWRpcmVjdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJlZGlyZWN0ID0geyBwYXRoOiByZWRpcmVjdCB9O1xuICAgIH1cblxuICAgIGlmICghcmVkaXJlY3QgfHwgdHlwZW9mIHJlZGlyZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICBmYWxzZSwgKFwiaW52YWxpZCByZWRpcmVjdCBvcHRpb246IFwiICsgKEpTT04uc3RyaW5naWZ5KHJlZGlyZWN0KSkpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gX2NyZWF0ZVJvdXRlKG51bGwsIGxvY2F0aW9uKVxuICAgIH1cblxuICAgIHZhciByZSA9IHJlZGlyZWN0O1xuICAgIHZhciBuYW1lID0gcmUubmFtZTtcbiAgICB2YXIgcGF0aCA9IHJlLnBhdGg7XG4gICAgdmFyIHF1ZXJ5ID0gbG9jYXRpb24ucXVlcnk7XG4gICAgdmFyIGhhc2ggPSBsb2NhdGlvbi5oYXNoO1xuICAgIHZhciBwYXJhbXMgPSBsb2NhdGlvbi5wYXJhbXM7XG4gICAgcXVlcnkgPSByZS5oYXNPd25Qcm9wZXJ0eSgncXVlcnknKSA/IHJlLnF1ZXJ5IDogcXVlcnk7XG4gICAgaGFzaCA9IHJlLmhhc093blByb3BlcnR5KCdoYXNoJykgPyByZS5oYXNoIDogaGFzaDtcbiAgICBwYXJhbXMgPSByZS5oYXNPd25Qcm9wZXJ0eSgncGFyYW1zJykgPyByZS5wYXJhbXMgOiBwYXJhbXM7XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgLy8gcmVzb2x2ZWQgbmFtZWQgZGlyZWN0XG4gICAgICB2YXIgdGFyZ2V0UmVjb3JkID0gbmFtZU1hcFtuYW1lXTtcbiAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGFzc2VydCh0YXJnZXRSZWNvcmQsIChcInJlZGlyZWN0IGZhaWxlZDogbmFtZWQgcm91dGUgXFxcIlwiICsgbmFtZSArIFwiXFxcIiBub3QgZm91bmQuXCIpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXRjaCh7XG4gICAgICAgIF9ub3JtYWxpemVkOiB0cnVlLFxuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgIGhhc2g6IGhhc2gsXG4gICAgICAgIHBhcmFtczogcGFyYW1zXG4gICAgICB9LCB1bmRlZmluZWQsIGxvY2F0aW9uKVxuICAgIH0gZWxzZSBpZiAocGF0aCkge1xuICAgICAgLy8gMS4gcmVzb2x2ZSByZWxhdGl2ZSByZWRpcmVjdFxuICAgICAgdmFyIHJhd1BhdGggPSByZXNvbHZlUmVjb3JkUGF0aChwYXRoLCByZWNvcmQpO1xuICAgICAgLy8gMi4gcmVzb2x2ZSBwYXJhbXNcbiAgICAgIHZhciByZXNvbHZlZFBhdGggPSBmaWxsUGFyYW1zKHJhd1BhdGgsIHBhcmFtcywgKFwicmVkaXJlY3Qgcm91dGUgd2l0aCBwYXRoIFxcXCJcIiArIHJhd1BhdGggKyBcIlxcXCJcIikpO1xuICAgICAgLy8gMy4gcmVtYXRjaCB3aXRoIGV4aXN0aW5nIHF1ZXJ5IGFuZCBoYXNoXG4gICAgICByZXR1cm4gbWF0Y2goe1xuICAgICAgICBfbm9ybWFsaXplZDogdHJ1ZSxcbiAgICAgICAgcGF0aDogcmVzb2x2ZWRQYXRoLFxuICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgIGhhc2g6IGhhc2hcbiAgICAgIH0sIHVuZGVmaW5lZCwgbG9jYXRpb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm4oZmFsc2UsIChcImludmFsaWQgcmVkaXJlY3Qgb3B0aW9uOiBcIiArIChKU09OLnN0cmluZ2lmeShyZWRpcmVjdCkpKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gX2NyZWF0ZVJvdXRlKG51bGwsIGxvY2F0aW9uKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFsaWFzIChcbiAgICByZWNvcmQsXG4gICAgbG9jYXRpb24sXG4gICAgbWF0Y2hBc1xuICApIHtcbiAgICB2YXIgYWxpYXNlZFBhdGggPSBmaWxsUGFyYW1zKG1hdGNoQXMsIGxvY2F0aW9uLnBhcmFtcywgKFwiYWxpYXNlZCByb3V0ZSB3aXRoIHBhdGggXFxcIlwiICsgbWF0Y2hBcyArIFwiXFxcIlwiKSk7XG4gICAgdmFyIGFsaWFzZWRNYXRjaCA9IG1hdGNoKHtcbiAgICAgIF9ub3JtYWxpemVkOiB0cnVlLFxuICAgICAgcGF0aDogYWxpYXNlZFBhdGhcbiAgICB9KTtcbiAgICBpZiAoYWxpYXNlZE1hdGNoKSB7XG4gICAgICB2YXIgbWF0Y2hlZCA9IGFsaWFzZWRNYXRjaC5tYXRjaGVkO1xuICAgICAgdmFyIGFsaWFzZWRSZWNvcmQgPSBtYXRjaGVkW21hdGNoZWQubGVuZ3RoIC0gMV07XG4gICAgICBsb2NhdGlvbi5wYXJhbXMgPSBhbGlhc2VkTWF0Y2gucGFyYW1zO1xuICAgICAgcmV0dXJuIF9jcmVhdGVSb3V0ZShhbGlhc2VkUmVjb3JkLCBsb2NhdGlvbilcbiAgICB9XG4gICAgcmV0dXJuIF9jcmVhdGVSb3V0ZShudWxsLCBsb2NhdGlvbilcbiAgfVxuXG4gIGZ1bmN0aW9uIF9jcmVhdGVSb3V0ZSAoXG4gICAgcmVjb3JkLFxuICAgIGxvY2F0aW9uLFxuICAgIHJlZGlyZWN0ZWRGcm9tXG4gICkge1xuICAgIGlmIChyZWNvcmQgJiYgcmVjb3JkLnJlZGlyZWN0KSB7XG4gICAgICByZXR1cm4gcmVkaXJlY3QocmVjb3JkLCByZWRpcmVjdGVkRnJvbSB8fCBsb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKHJlY29yZCAmJiByZWNvcmQubWF0Y2hBcykge1xuICAgICAgcmV0dXJuIGFsaWFzKHJlY29yZCwgbG9jYXRpb24sIHJlY29yZC5tYXRjaEFzKVxuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlUm91dGUocmVjb3JkLCBsb2NhdGlvbiwgcmVkaXJlY3RlZEZyb20sIHJvdXRlcilcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbWF0Y2g6IG1hdGNoLFxuICAgIGFkZFJvdXRlczogYWRkUm91dGVzXG4gIH1cbn1cblxuZnVuY3Rpb24gbWF0Y2hSb3V0ZSAoXG4gIHJlZ2V4LFxuICBwYXRoLFxuICBwYXJhbXNcbikge1xuICB2YXIgbSA9IHBhdGgubWF0Y2gocmVnZXgpO1xuXG4gIGlmICghbSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9IGVsc2UgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDEsIGxlbiA9IG0ubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICB2YXIga2V5ID0gcmVnZXgua2V5c1tpIC0gMV07XG4gICAgdmFyIHZhbCA9IHR5cGVvZiBtW2ldID09PSAnc3RyaW5nJyA/IGRlY29kZVVSSUNvbXBvbmVudChtW2ldKSA6IG1baV07XG4gICAgaWYgKGtleSkge1xuICAgICAgLy8gRml4ICMxOTk0OiB1c2luZyAqIHdpdGggcHJvcHM6IHRydWUgZ2VuZXJhdGVzIGEgcGFyYW0gbmFtZWQgMFxuICAgICAgcGFyYW1zW2tleS5uYW1lIHx8ICdwYXRoTWF0Y2gnXSA9IHZhbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiByZXNvbHZlUmVjb3JkUGF0aCAocGF0aCwgcmVjb3JkKSB7XG4gIHJldHVybiByZXNvbHZlUGF0aChwYXRoLCByZWNvcmQucGFyZW50ID8gcmVjb3JkLnBhcmVudC5wYXRoIDogJy8nLCB0cnVlKVxufVxuXG4vKiAgKi9cblxuLy8gdXNlIFVzZXIgVGltaW5nIGFwaSAoaWYgcHJlc2VudCkgZm9yIG1vcmUgYWNjdXJhdGUga2V5IHByZWNpc2lvblxudmFyIFRpbWUgPVxuICBpbkJyb3dzZXIgJiYgd2luZG93LnBlcmZvcm1hbmNlICYmIHdpbmRvdy5wZXJmb3JtYW5jZS5ub3dcbiAgICA/IHdpbmRvdy5wZXJmb3JtYW5jZVxuICAgIDogRGF0ZTtcblxuZnVuY3Rpb24gZ2VuU3RhdGVLZXkgKCkge1xuICByZXR1cm4gVGltZS5ub3coKS50b0ZpeGVkKDMpXG59XG5cbnZhciBfa2V5ID0gZ2VuU3RhdGVLZXkoKTtcblxuZnVuY3Rpb24gZ2V0U3RhdGVLZXkgKCkge1xuICByZXR1cm4gX2tleVxufVxuXG5mdW5jdGlvbiBzZXRTdGF0ZUtleSAoa2V5KSB7XG4gIHJldHVybiAoX2tleSA9IGtleSlcbn1cblxuLyogICovXG5cbnZhciBwb3NpdGlvblN0b3JlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuZnVuY3Rpb24gc2V0dXBTY3JvbGwgKCkge1xuICAvLyBGaXggZm9yICMxNTg1IGZvciBGaXJlZm94XG4gIC8vIEZpeCBmb3IgIzIxOTUgQWRkIG9wdGlvbmFsIHRoaXJkIGF0dHJpYnV0ZSB0byB3b3JrYXJvdW5kIGEgYnVnIGluIHNhZmFyaSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgyNjc4XG4gIC8vIEZpeCBmb3IgIzI3NzQgU3VwcG9ydCBmb3IgYXBwcyBsb2FkZWQgZnJvbSBXaW5kb3dzIGZpbGUgc2hhcmVzIG5vdCBtYXBwZWQgdG8gbmV0d29yayBkcml2ZXM6IHJlcGxhY2VkIGxvY2F0aW9uLm9yaWdpbiB3aXRoXG4gIC8vIHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdFxuICAvLyBsb2NhdGlvbi5ob3N0IGNvbnRhaW5zIHRoZSBwb3J0IGFuZCBsb2NhdGlvbi5ob3N0bmFtZSBkb2Vzbid0XG4gIHZhciBwcm90b2NvbEFuZFBhdGggPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3Q7XG4gIHZhciBhYnNvbHV0ZVBhdGggPSB3aW5kb3cubG9jYXRpb24uaHJlZi5yZXBsYWNlKHByb3RvY29sQW5kUGF0aCwgJycpO1xuICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoeyBrZXk6IGdldFN0YXRlS2V5KCkgfSwgJycsIGFic29sdXRlUGF0aCk7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScsIGZ1bmN0aW9uIChlKSB7XG4gICAgc2F2ZVNjcm9sbFBvc2l0aW9uKCk7XG4gICAgaWYgKGUuc3RhdGUgJiYgZS5zdGF0ZS5rZXkpIHtcbiAgICAgIHNldFN0YXRlS2V5KGUuc3RhdGUua2V5KTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVTY3JvbGwgKFxuICByb3V0ZXIsXG4gIHRvLFxuICBmcm9tLFxuICBpc1BvcFxuKSB7XG4gIGlmICghcm91dGVyLmFwcCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGJlaGF2aW9yID0gcm91dGVyLm9wdGlvbnMuc2Nyb2xsQmVoYXZpb3I7XG4gIGlmICghYmVoYXZpb3IpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0KHR5cGVvZiBiZWhhdmlvciA9PT0gJ2Z1bmN0aW9uJywgXCJzY3JvbGxCZWhhdmlvciBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICAvLyB3YWl0IHVudGlsIHJlLXJlbmRlciBmaW5pc2hlcyBiZWZvcmUgc2Nyb2xsaW5nXG4gIHJvdXRlci5hcHAuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcG9zaXRpb24gPSBnZXRTY3JvbGxQb3NpdGlvbigpO1xuICAgIHZhciBzaG91bGRTY3JvbGwgPSBiZWhhdmlvci5jYWxsKFxuICAgICAgcm91dGVyLFxuICAgICAgdG8sXG4gICAgICBmcm9tLFxuICAgICAgaXNQb3AgPyBwb3NpdGlvbiA6IG51bGxcbiAgICApO1xuXG4gICAgaWYgKCFzaG91bGRTY3JvbGwpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygc2hvdWxkU2Nyb2xsLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHNob3VsZFNjcm9sbFxuICAgICAgICAudGhlbihmdW5jdGlvbiAoc2hvdWxkU2Nyb2xsKSB7XG4gICAgICAgICAgc2Nyb2xsVG9Qb3NpdGlvbigoc2hvdWxkU2Nyb2xsKSwgcG9zaXRpb24pO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBhc3NlcnQoZmFsc2UsIGVyci50b1N0cmluZygpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzY3JvbGxUb1Bvc2l0aW9uKHNob3VsZFNjcm9sbCwgcG9zaXRpb24pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNhdmVTY3JvbGxQb3NpdGlvbiAoKSB7XG4gIHZhciBrZXkgPSBnZXRTdGF0ZUtleSgpO1xuICBpZiAoa2V5KSB7XG4gICAgcG9zaXRpb25TdG9yZVtrZXldID0ge1xuICAgICAgeDogd2luZG93LnBhZ2VYT2Zmc2V0LFxuICAgICAgeTogd2luZG93LnBhZ2VZT2Zmc2V0XG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRTY3JvbGxQb3NpdGlvbiAoKSB7XG4gIHZhciBrZXkgPSBnZXRTdGF0ZUtleSgpO1xuICBpZiAoa2V5KSB7XG4gICAgcmV0dXJuIHBvc2l0aW9uU3RvcmVba2V5XVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRQb3NpdGlvbiAoZWwsIG9mZnNldCkge1xuICB2YXIgZG9jRWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIHZhciBkb2NSZWN0ID0gZG9jRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBlbFJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgcmV0dXJuIHtcbiAgICB4OiBlbFJlY3QubGVmdCAtIGRvY1JlY3QubGVmdCAtIG9mZnNldC54LFxuICAgIHk6IGVsUmVjdC50b3AgLSBkb2NSZWN0LnRvcCAtIG9mZnNldC55XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNWYWxpZFBvc2l0aW9uIChvYmopIHtcbiAgcmV0dXJuIGlzTnVtYmVyKG9iai54KSB8fCBpc051bWJlcihvYmoueSlcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUG9zaXRpb24gKG9iaikge1xuICByZXR1cm4ge1xuICAgIHg6IGlzTnVtYmVyKG9iai54KSA/IG9iai54IDogd2luZG93LnBhZ2VYT2Zmc2V0LFxuICAgIHk6IGlzTnVtYmVyKG9iai55KSA/IG9iai55IDogd2luZG93LnBhZ2VZT2Zmc2V0XG4gIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplT2Zmc2V0IChvYmopIHtcbiAgcmV0dXJuIHtcbiAgICB4OiBpc051bWJlcihvYmoueCkgPyBvYmoueCA6IDAsXG4gICAgeTogaXNOdW1iZXIob2JqLnkpID8gb2JqLnkgOiAwXG4gIH1cbn1cblxuZnVuY3Rpb24gaXNOdW1iZXIgKHYpIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSAnbnVtYmVyJ1xufVxuXG52YXIgaGFzaFN0YXJ0c1dpdGhOdW1iZXJSRSA9IC9eI1xcZC87XG5cbmZ1bmN0aW9uIHNjcm9sbFRvUG9zaXRpb24gKHNob3VsZFNjcm9sbCwgcG9zaXRpb24pIHtcbiAgdmFyIGlzT2JqZWN0ID0gdHlwZW9mIHNob3VsZFNjcm9sbCA9PT0gJ29iamVjdCc7XG4gIGlmIChpc09iamVjdCAmJiB0eXBlb2Ygc2hvdWxkU2Nyb2xsLnNlbGVjdG9yID09PSAnc3RyaW5nJykge1xuICAgIC8vIGdldEVsZW1lbnRCeUlkIHdvdWxkIHN0aWxsIGZhaWwgaWYgdGhlIHNlbGVjdG9yIGNvbnRhaW5zIGEgbW9yZSBjb21wbGljYXRlZCBxdWVyeSBsaWtlICNtYWluW2RhdGEtYXR0cl1cbiAgICAvLyBidXQgYXQgdGhlIHNhbWUgdGltZSwgaXQgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UgdG8gc2VsZWN0IGFuIGVsZW1lbnQgd2l0aCBhbiBpZCBhbmQgYW4gZXh0cmEgc2VsZWN0b3JcbiAgICB2YXIgZWwgPSBoYXNoU3RhcnRzV2l0aE51bWJlclJFLnRlc3Qoc2hvdWxkU2Nyb2xsLnNlbGVjdG9yKSAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgID8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2hvdWxkU2Nyb2xsLnNlbGVjdG9yLnNsaWNlKDEpKSAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzaG91bGRTY3JvbGwuc2VsZWN0b3IpO1xuXG4gICAgaWYgKGVsKSB7XG4gICAgICB2YXIgb2Zmc2V0ID1cbiAgICAgICAgc2hvdWxkU2Nyb2xsLm9mZnNldCAmJiB0eXBlb2Ygc2hvdWxkU2Nyb2xsLm9mZnNldCA9PT0gJ29iamVjdCdcbiAgICAgICAgICA/IHNob3VsZFNjcm9sbC5vZmZzZXRcbiAgICAgICAgICA6IHt9O1xuICAgICAgb2Zmc2V0ID0gbm9ybWFsaXplT2Zmc2V0KG9mZnNldCk7XG4gICAgICBwb3NpdGlvbiA9IGdldEVsZW1lbnRQb3NpdGlvbihlbCwgb2Zmc2V0KTtcbiAgICB9IGVsc2UgaWYgKGlzVmFsaWRQb3NpdGlvbihzaG91bGRTY3JvbGwpKSB7XG4gICAgICBwb3NpdGlvbiA9IG5vcm1hbGl6ZVBvc2l0aW9uKHNob3VsZFNjcm9sbCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0ICYmIGlzVmFsaWRQb3NpdGlvbihzaG91bGRTY3JvbGwpKSB7XG4gICAgcG9zaXRpb24gPSBub3JtYWxpemVQb3NpdGlvbihzaG91bGRTY3JvbGwpO1xuICB9XG5cbiAgaWYgKHBvc2l0aW9uKSB7XG4gICAgd2luZG93LnNjcm9sbFRvKHBvc2l0aW9uLngsIHBvc2l0aW9uLnkpO1xuICB9XG59XG5cbi8qICAqL1xuXG52YXIgc3VwcG9ydHNQdXNoU3RhdGUgPVxuICBpbkJyb3dzZXIgJiZcbiAgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdWEgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcblxuICAgIGlmIChcbiAgICAgICh1YS5pbmRleE9mKCdBbmRyb2lkIDIuJykgIT09IC0xIHx8IHVhLmluZGV4T2YoJ0FuZHJvaWQgNC4wJykgIT09IC0xKSAmJlxuICAgICAgdWEuaW5kZXhPZignTW9iaWxlIFNhZmFyaScpICE9PSAtMSAmJlxuICAgICAgdWEuaW5kZXhPZignQ2hyb21lJykgPT09IC0xICYmXG4gICAgICB1YS5pbmRleE9mKCdXaW5kb3dzIFBob25lJykgPT09IC0xXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICByZXR1cm4gd2luZG93Lmhpc3RvcnkgJiYgJ3B1c2hTdGF0ZScgaW4gd2luZG93Lmhpc3RvcnlcbiAgfSkoKTtcblxuZnVuY3Rpb24gcHVzaFN0YXRlICh1cmwsIHJlcGxhY2UpIHtcbiAgc2F2ZVNjcm9sbFBvc2l0aW9uKCk7XG4gIC8vIHRyeS4uLmNhdGNoIHRoZSBwdXNoU3RhdGUgY2FsbCB0byBnZXQgYXJvdW5kIFNhZmFyaVxuICAvLyBET00gRXhjZXB0aW9uIDE4IHdoZXJlIGl0IGxpbWl0cyB0byAxMDAgcHVzaFN0YXRlIGNhbGxzXG4gIHZhciBoaXN0b3J5ID0gd2luZG93Lmhpc3Rvcnk7XG4gIHRyeSB7XG4gICAgaWYgKHJlcGxhY2UpIHtcbiAgICAgIGhpc3RvcnkucmVwbGFjZVN0YXRlKHsga2V5OiBnZXRTdGF0ZUtleSgpIH0sICcnLCB1cmwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoaXN0b3J5LnB1c2hTdGF0ZSh7IGtleTogc2V0U3RhdGVLZXkoZ2VuU3RhdGVLZXkoKSkgfSwgJycsIHVybCk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgd2luZG93LmxvY2F0aW9uW3JlcGxhY2UgPyAncmVwbGFjZScgOiAnYXNzaWduJ10odXJsKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXBsYWNlU3RhdGUgKHVybCkge1xuICBwdXNoU3RhdGUodXJsLCB0cnVlKTtcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIHJ1blF1ZXVlIChxdWV1ZSwgZm4sIGNiKSB7XG4gIHZhciBzdGVwID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID49IHF1ZXVlLmxlbmd0aCkge1xuICAgICAgY2IoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHF1ZXVlW2luZGV4XSkge1xuICAgICAgICBmbihxdWV1ZVtpbmRleF0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzdGVwKGluZGV4ICsgMSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RlcChpbmRleCArIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgc3RlcCgwKTtcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIHJlc29sdmVBc3luY0NvbXBvbmVudHMgKG1hdGNoZWQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0bywgZnJvbSwgbmV4dCkge1xuICAgIHZhciBoYXNBc3luYyA9IGZhbHNlO1xuICAgIHZhciBwZW5kaW5nID0gMDtcbiAgICB2YXIgZXJyb3IgPSBudWxsO1xuXG4gICAgZmxhdE1hcENvbXBvbmVudHMobWF0Y2hlZCwgZnVuY3Rpb24gKGRlZiwgXywgbWF0Y2gsIGtleSkge1xuICAgICAgLy8gaWYgaXQncyBhIGZ1bmN0aW9uIGFuZCBkb2Vzbid0IGhhdmUgY2lkIGF0dGFjaGVkLFxuICAgICAgLy8gYXNzdW1lIGl0J3MgYW4gYXN5bmMgY29tcG9uZW50IHJlc29sdmUgZnVuY3Rpb24uXG4gICAgICAvLyB3ZSBhcmUgbm90IHVzaW5nIFZ1ZSdzIGRlZmF1bHQgYXN5bmMgcmVzb2x2aW5nIG1lY2hhbmlzbSBiZWNhdXNlXG4gICAgICAvLyB3ZSB3YW50IHRvIGhhbHQgdGhlIG5hdmlnYXRpb24gdW50aWwgdGhlIGluY29taW5nIGNvbXBvbmVudCBoYXMgYmVlblxuICAgICAgLy8gcmVzb2x2ZWQuXG4gICAgICBpZiAodHlwZW9mIGRlZiA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWYuY2lkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaGFzQXN5bmMgPSB0cnVlO1xuICAgICAgICBwZW5kaW5nKys7XG5cbiAgICAgICAgdmFyIHJlc29sdmUgPSBvbmNlKGZ1bmN0aW9uIChyZXNvbHZlZERlZikge1xuICAgICAgICAgIGlmIChpc0VTTW9kdWxlKHJlc29sdmVkRGVmKSkge1xuICAgICAgICAgICAgcmVzb2x2ZWREZWYgPSByZXNvbHZlZERlZi5kZWZhdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBzYXZlIHJlc29sdmVkIG9uIGFzeW5jIGZhY3RvcnkgaW4gY2FzZSBpdCdzIHVzZWQgZWxzZXdoZXJlXG4gICAgICAgICAgZGVmLnJlc29sdmVkID0gdHlwZW9mIHJlc29sdmVkRGVmID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IHJlc29sdmVkRGVmXG4gICAgICAgICAgICA6IF9WdWUuZXh0ZW5kKHJlc29sdmVkRGVmKTtcbiAgICAgICAgICBtYXRjaC5jb21wb25lbnRzW2tleV0gPSByZXNvbHZlZERlZjtcbiAgICAgICAgICBwZW5kaW5nLS07XG4gICAgICAgICAgaWYgKHBlbmRpbmcgPD0gMCkge1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIHJlamVjdCA9IG9uY2UoZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgIHZhciBtc2cgPSBcIkZhaWxlZCB0byByZXNvbHZlIGFzeW5jIGNvbXBvbmVudCBcIiArIGtleSArIFwiOiBcIiArIHJlYXNvbjtcbiAgICAgICAgICBcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oZmFsc2UsIG1zZyk7XG4gICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgZXJyb3IgPSBpc0Vycm9yKHJlYXNvbilcbiAgICAgICAgICAgICAgPyByZWFzb25cbiAgICAgICAgICAgICAgOiBuZXcgRXJyb3IobXNnKTtcbiAgICAgICAgICAgIG5leHQoZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIHJlcztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXMgPSBkZWYocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiByZXMudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmVzLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbmV3IHN5bnRheCBpbiBWdWUgMi4zXG4gICAgICAgICAgICB2YXIgY29tcCA9IHJlcy5jb21wb25lbnQ7XG4gICAgICAgICAgICBpZiAoY29tcCAmJiB0eXBlb2YgY29tcC50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIGNvbXAudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFoYXNBc3luYykgeyBuZXh0KCk7IH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmbGF0TWFwQ29tcG9uZW50cyAoXG4gIG1hdGNoZWQsXG4gIGZuXG4pIHtcbiAgcmV0dXJuIGZsYXR0ZW4obWF0Y2hlZC5tYXAoZnVuY3Rpb24gKG0pIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMobS5jb21wb25lbnRzKS5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gZm4oXG4gICAgICBtLmNvbXBvbmVudHNba2V5XSxcbiAgICAgIG0uaW5zdGFuY2VzW2tleV0sXG4gICAgICBtLCBrZXlcbiAgICApOyB9KVxuICB9KSlcbn1cblxuZnVuY3Rpb24gZmxhdHRlbiAoYXJyKSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBhcnIpXG59XG5cbnZhciBoYXNTeW1ib2wgPVxuICB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmXG4gIHR5cGVvZiBTeW1ib2wudG9TdHJpbmdUYWcgPT09ICdzeW1ib2wnO1xuXG5mdW5jdGlvbiBpc0VTTW9kdWxlIChvYmopIHtcbiAgcmV0dXJuIG9iai5fX2VzTW9kdWxlIHx8IChoYXNTeW1ib2wgJiYgb2JqW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdNb2R1bGUnKVxufVxuXG4vLyBpbiBXZWJwYWNrIDIsIHJlcXVpcmUuZW5zdXJlIG5vdyBhbHNvIHJldHVybnMgYSBQcm9taXNlXG4vLyBzbyB0aGUgcmVzb2x2ZS9yZWplY3QgZnVuY3Rpb25zIG1heSBnZXQgY2FsbGVkIGFuIGV4dHJhIHRpbWVcbi8vIGlmIHRoZSB1c2VyIHVzZXMgYW4gYXJyb3cgZnVuY3Rpb24gc2hvcnRoYW5kIHRoYXQgaGFwcGVucyB0b1xuLy8gcmV0dXJuIHRoYXQgUHJvbWlzZS5cbmZ1bmN0aW9uIG9uY2UgKGZuKSB7XG4gIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICBpZiAoY2FsbGVkKSB7IHJldHVybiB9XG4gICAgY2FsbGVkID0gdHJ1ZTtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJncylcbiAgfVxufVxuXG52YXIgTmF2aWdhdGlvbkR1cGxpY2F0ZWQgPSAvKkBfX1BVUkVfXyovKGZ1bmN0aW9uIChFcnJvcikge1xuICBmdW5jdGlvbiBOYXZpZ2F0aW9uRHVwbGljYXRlZCAobm9ybWFsaXplZExvY2F0aW9uKSB7XG4gICAgRXJyb3IuY2FsbCh0aGlzKTtcbiAgICB0aGlzLm5hbWUgPSB0aGlzLl9uYW1lID0gJ05hdmlnYXRpb25EdXBsaWNhdGVkJztcbiAgICAvLyBwYXNzaW5nIHRoZSBtZXNzYWdlIHRvIHN1cGVyKCkgZG9lc24ndCBzZWVtIHRvIHdvcmsgaW4gdGhlIHRyYW5zcGlsZWQgdmVyc2lvblxuICAgIHRoaXMubWVzc2FnZSA9IFwiTmF2aWdhdGluZyB0byBjdXJyZW50IGxvY2F0aW9uIChcXFwiXCIgKyAobm9ybWFsaXplZExvY2F0aW9uLmZ1bGxQYXRoKSArIFwiXFxcIikgaXMgbm90IGFsbG93ZWRcIjtcbiAgICAvLyBhZGQgYSBzdGFjayBwcm9wZXJ0eSBzbyBzZXJ2aWNlcyBsaWtlIFNlbnRyeSBjYW4gY29ycmVjdGx5IGRpc3BsYXkgaXRcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3N0YWNrJywge1xuICAgICAgdmFsdWU6IG5ldyBFcnJvcigpLnN0YWNrLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICAvLyB3ZSBjb3VsZCBhbHNvIGhhdmUgdXNlZFxuICAgIC8vIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpXG4gICAgLy8gYnV0IGl0IG9ubHkgZXhpc3RzIG9uIG5vZGUgYW5kIGNocm9tZVxuICB9XG5cbiAgaWYgKCBFcnJvciApIE5hdmlnYXRpb25EdXBsaWNhdGVkLl9fcHJvdG9fXyA9IEVycm9yO1xuICBOYXZpZ2F0aW9uRHVwbGljYXRlZC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBFcnJvciAmJiBFcnJvci5wcm90b3R5cGUgKTtcbiAgTmF2aWdhdGlvbkR1cGxpY2F0ZWQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTmF2aWdhdGlvbkR1cGxpY2F0ZWQ7XG5cbiAgcmV0dXJuIE5hdmlnYXRpb25EdXBsaWNhdGVkO1xufShFcnJvcikpO1xuXG4vLyBzdXBwb3J0IElFOVxuTmF2aWdhdGlvbkR1cGxpY2F0ZWQuX25hbWUgPSAnTmF2aWdhdGlvbkR1cGxpY2F0ZWQnO1xuXG4vKiAgKi9cblxudmFyIEhpc3RvcnkgPSBmdW5jdGlvbiBIaXN0b3J5IChyb3V0ZXIsIGJhc2UpIHtcbiAgdGhpcy5yb3V0ZXIgPSByb3V0ZXI7XG4gIHRoaXMuYmFzZSA9IG5vcm1hbGl6ZUJhc2UoYmFzZSk7XG4gIC8vIHN0YXJ0IHdpdGggYSByb3V0ZSBvYmplY3QgdGhhdCBzdGFuZHMgZm9yIFwibm93aGVyZVwiXG4gIHRoaXMuY3VycmVudCA9IFNUQVJUO1xuICB0aGlzLnBlbmRpbmcgPSBudWxsO1xuICB0aGlzLnJlYWR5ID0gZmFsc2U7XG4gIHRoaXMucmVhZHlDYnMgPSBbXTtcbiAgdGhpcy5yZWFkeUVycm9yQ2JzID0gW107XG4gIHRoaXMuZXJyb3JDYnMgPSBbXTtcbn07XG5cbkhpc3RvcnkucHJvdG90eXBlLmxpc3RlbiA9IGZ1bmN0aW9uIGxpc3RlbiAoY2IpIHtcbiAgdGhpcy5jYiA9IGNiO1xufTtcblxuSGlzdG9yeS5wcm90b3R5cGUub25SZWFkeSA9IGZ1bmN0aW9uIG9uUmVhZHkgKGNiLCBlcnJvckNiKSB7XG4gIGlmICh0aGlzLnJlYWR5KSB7XG4gICAgY2IoKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnJlYWR5Q2JzLnB1c2goY2IpO1xuICAgIGlmIChlcnJvckNiKSB7XG4gICAgICB0aGlzLnJlYWR5RXJyb3JDYnMucHVzaChlcnJvckNiKTtcbiAgICB9XG4gIH1cbn07XG5cbkhpc3RvcnkucHJvdG90eXBlLm9uRXJyb3IgPSBmdW5jdGlvbiBvbkVycm9yIChlcnJvckNiKSB7XG4gIHRoaXMuZXJyb3JDYnMucHVzaChlcnJvckNiKTtcbn07XG5cbkhpc3RvcnkucHJvdG90eXBlLnRyYW5zaXRpb25UbyA9IGZ1bmN0aW9uIHRyYW5zaXRpb25UbyAoXG4gIGxvY2F0aW9uLFxuICBvbkNvbXBsZXRlLFxuICBvbkFib3J0XG4pIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICB2YXIgcm91dGUgPSB0aGlzLnJvdXRlci5tYXRjaChsb2NhdGlvbiwgdGhpcy5jdXJyZW50KTtcbiAgdGhpcy5jb25maXJtVHJhbnNpdGlvbihcbiAgICByb3V0ZSxcbiAgICBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzJDEudXBkYXRlUm91dGUocm91dGUpO1xuICAgICAgb25Db21wbGV0ZSAmJiBvbkNvbXBsZXRlKHJvdXRlKTtcbiAgICAgIHRoaXMkMS5lbnN1cmVVUkwoKTtcblxuICAgICAgLy8gZmlyZSByZWFkeSBjYnMgb25jZVxuICAgICAgaWYgKCF0aGlzJDEucmVhZHkpIHtcbiAgICAgICAgdGhpcyQxLnJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcyQxLnJlYWR5Q2JzLmZvckVhY2goZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgY2Iocm91dGUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChvbkFib3J0KSB7XG4gICAgICAgIG9uQWJvcnQoZXJyKTtcbiAgICAgIH1cbiAgICAgIGlmIChlcnIgJiYgIXRoaXMkMS5yZWFkeSkge1xuICAgICAgICB0aGlzJDEucmVhZHkgPSB0cnVlO1xuICAgICAgICB0aGlzJDEucmVhZHlFcnJvckNicy5mb3JFYWNoKGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgIGNiKGVycik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbn07XG5cbkhpc3RvcnkucHJvdG90eXBlLmNvbmZpcm1UcmFuc2l0aW9uID0gZnVuY3Rpb24gY29uZmlybVRyYW5zaXRpb24gKHJvdXRlLCBvbkNvbXBsZXRlLCBvbkFib3J0KSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdmFyIGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG4gIHZhciBhYm9ydCA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAvLyBhZnRlciBtZXJnaW5nIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL3B1bGwvMjc3MSB3ZVxuICAgIC8vIFdoZW4gdGhlIHVzZXIgbmF2aWdhdGVzIHRocm91Z2ggaGlzdG9yeSB0aHJvdWdoIGJhY2svZm9yd2FyZCBidXR0b25zXG4gICAgLy8gd2UgZG8gbm90IHdhbnQgdG8gdGhyb3cgdGhlIGVycm9yLiBXZSBvbmx5IHRocm93IGl0IGlmIGRpcmVjdGx5IGNhbGxpbmdcbiAgICAvLyBwdXNoL3JlcGxhY2UuIFRoYXQncyB3aHkgaXQncyBub3QgaW5jbHVkZWQgaW4gaXNFcnJvclxuICAgIGlmICghaXNFeHRlbmRlZEVycm9yKE5hdmlnYXRpb25EdXBsaWNhdGVkLCBlcnIpICYmIGlzRXJyb3IoZXJyKSkge1xuICAgICAgaWYgKHRoaXMkMS5lcnJvckNicy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcyQxLmVycm9yQ2JzLmZvckVhY2goZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgY2IoZXJyKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3YXJuKGZhbHNlLCAndW5jYXVnaHQgZXJyb3IgZHVyaW5nIHJvdXRlIG5hdmlnYXRpb246Jyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgb25BYm9ydCAmJiBvbkFib3J0KGVycik7XG4gIH07XG4gIGlmIChcbiAgICBpc1NhbWVSb3V0ZShyb3V0ZSwgY3VycmVudCkgJiZcbiAgICAvLyBpbiB0aGUgY2FzZSB0aGUgcm91dGUgbWFwIGhhcyBiZWVuIGR5bmFtaWNhbGx5IGFwcGVuZGVkIHRvXG4gICAgcm91dGUubWF0Y2hlZC5sZW5ndGggPT09IGN1cnJlbnQubWF0Y2hlZC5sZW5ndGhcbiAgKSB7XG4gICAgdGhpcy5lbnN1cmVVUkwoKTtcbiAgICByZXR1cm4gYWJvcnQobmV3IE5hdmlnYXRpb25EdXBsaWNhdGVkKHJvdXRlKSlcbiAgfVxuXG4gIHZhciByZWYgPSByZXNvbHZlUXVldWUoXG4gICAgdGhpcy5jdXJyZW50Lm1hdGNoZWQsXG4gICAgcm91dGUubWF0Y2hlZFxuICApO1xuICAgIHZhciB1cGRhdGVkID0gcmVmLnVwZGF0ZWQ7XG4gICAgdmFyIGRlYWN0aXZhdGVkID0gcmVmLmRlYWN0aXZhdGVkO1xuICAgIHZhciBhY3RpdmF0ZWQgPSByZWYuYWN0aXZhdGVkO1xuXG4gIHZhciBxdWV1ZSA9IFtdLmNvbmNhdChcbiAgICAvLyBpbi1jb21wb25lbnQgbGVhdmUgZ3VhcmRzXG4gICAgZXh0cmFjdExlYXZlR3VhcmRzKGRlYWN0aXZhdGVkKSxcbiAgICAvLyBnbG9iYWwgYmVmb3JlIGhvb2tzXG4gICAgdGhpcy5yb3V0ZXIuYmVmb3JlSG9va3MsXG4gICAgLy8gaW4tY29tcG9uZW50IHVwZGF0ZSBob29rc1xuICAgIGV4dHJhY3RVcGRhdGVIb29rcyh1cGRhdGVkKSxcbiAgICAvLyBpbi1jb25maWcgZW50ZXIgZ3VhcmRzXG4gICAgYWN0aXZhdGVkLm1hcChmdW5jdGlvbiAobSkgeyByZXR1cm4gbS5iZWZvcmVFbnRlcjsgfSksXG4gICAgLy8gYXN5bmMgY29tcG9uZW50c1xuICAgIHJlc29sdmVBc3luY0NvbXBvbmVudHMoYWN0aXZhdGVkKVxuICApO1xuXG4gIHRoaXMucGVuZGluZyA9IHJvdXRlO1xuICB2YXIgaXRlcmF0b3IgPSBmdW5jdGlvbiAoaG9vaywgbmV4dCkge1xuICAgIGlmICh0aGlzJDEucGVuZGluZyAhPT0gcm91dGUpIHtcbiAgICAgIHJldHVybiBhYm9ydCgpXG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBob29rKHJvdXRlLCBjdXJyZW50LCBmdW5jdGlvbiAodG8pIHtcbiAgICAgICAgaWYgKHRvID09PSBmYWxzZSB8fCBpc0Vycm9yKHRvKSkge1xuICAgICAgICAgIC8vIG5leHQoZmFsc2UpIC0+IGFib3J0IG5hdmlnYXRpb24sIGVuc3VyZSBjdXJyZW50IFVSTFxuICAgICAgICAgIHRoaXMkMS5lbnN1cmVVUkwodHJ1ZSk7XG4gICAgICAgICAgYWJvcnQodG8pO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHR5cGVvZiB0byA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgICAodHlwZW9mIHRvID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgKHR5cGVvZiB0by5wYXRoID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdG8ubmFtZSA9PT0gJ3N0cmluZycpKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBuZXh0KCcvJykgb3IgbmV4dCh7IHBhdGg6ICcvJyB9KSAtPiByZWRpcmVjdFxuICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgaWYgKHR5cGVvZiB0byA9PT0gJ29iamVjdCcgJiYgdG8ucmVwbGFjZSkge1xuICAgICAgICAgICAgdGhpcyQxLnJlcGxhY2UodG8pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzJDEucHVzaCh0byk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGNvbmZpcm0gdHJhbnNpdGlvbiBhbmQgcGFzcyBvbiB0aGUgdmFsdWVcbiAgICAgICAgICBuZXh0KHRvKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYWJvcnQoZSk7XG4gICAgfVxuICB9O1xuXG4gIHJ1blF1ZXVlKHF1ZXVlLCBpdGVyYXRvciwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBwb3N0RW50ZXJDYnMgPSBbXTtcbiAgICB2YXIgaXNWYWxpZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMkMS5jdXJyZW50ID09PSByb3V0ZTsgfTtcbiAgICAvLyB3YWl0IHVudGlsIGFzeW5jIGNvbXBvbmVudHMgYXJlIHJlc29sdmVkIGJlZm9yZVxuICAgIC8vIGV4dHJhY3RpbmcgaW4tY29tcG9uZW50IGVudGVyIGd1YXJkc1xuICAgIHZhciBlbnRlckd1YXJkcyA9IGV4dHJhY3RFbnRlckd1YXJkcyhhY3RpdmF0ZWQsIHBvc3RFbnRlckNicywgaXNWYWxpZCk7XG4gICAgdmFyIHF1ZXVlID0gZW50ZXJHdWFyZHMuY29uY2F0KHRoaXMkMS5yb3V0ZXIucmVzb2x2ZUhvb2tzKTtcbiAgICBydW5RdWV1ZShxdWV1ZSwgaXRlcmF0b3IsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICh0aGlzJDEucGVuZGluZyAhPT0gcm91dGUpIHtcbiAgICAgICAgcmV0dXJuIGFib3J0KClcbiAgICAgIH1cbiAgICAgIHRoaXMkMS5wZW5kaW5nID0gbnVsbDtcbiAgICAgIG9uQ29tcGxldGUocm91dGUpO1xuICAgICAgaWYgKHRoaXMkMS5yb3V0ZXIuYXBwKSB7XG4gICAgICAgIHRoaXMkMS5yb3V0ZXIuYXBwLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcG9zdEVudGVyQ2JzLmZvckVhY2goZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgICBjYigpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuXG5IaXN0b3J5LnByb3RvdHlwZS51cGRhdGVSb3V0ZSA9IGZ1bmN0aW9uIHVwZGF0ZVJvdXRlIChyb3V0ZSkge1xuICB2YXIgcHJldiA9IHRoaXMuY3VycmVudDtcbiAgdGhpcy5jdXJyZW50ID0gcm91dGU7XG4gIHRoaXMuY2IgJiYgdGhpcy5jYihyb3V0ZSk7XG4gIHRoaXMucm91dGVyLmFmdGVySG9va3MuZm9yRWFjaChmdW5jdGlvbiAoaG9vaykge1xuICAgIGhvb2sgJiYgaG9vayhyb3V0ZSwgcHJldik7XG4gIH0pO1xufTtcblxuZnVuY3Rpb24gbm9ybWFsaXplQmFzZSAoYmFzZSkge1xuICBpZiAoIWJhc2UpIHtcbiAgICBpZiAoaW5Ccm93c2VyKSB7XG4gICAgICAvLyByZXNwZWN0IDxiYXNlPiB0YWdcbiAgICAgIHZhciBiYXNlRWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdiYXNlJyk7XG4gICAgICBiYXNlID0gKGJhc2VFbCAmJiBiYXNlRWwuZ2V0QXR0cmlidXRlKCdocmVmJykpIHx8ICcvJztcbiAgICAgIC8vIHN0cmlwIGZ1bGwgVVJMIG9yaWdpblxuICAgICAgYmFzZSA9IGJhc2UucmVwbGFjZSgvXmh0dHBzPzpcXC9cXC9bXlxcL10rLywgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBiYXNlID0gJy8nO1xuICAgIH1cbiAgfVxuICAvLyBtYWtlIHN1cmUgdGhlcmUncyB0aGUgc3RhcnRpbmcgc2xhc2hcbiAgaWYgKGJhc2UuY2hhckF0KDApICE9PSAnLycpIHtcbiAgICBiYXNlID0gJy8nICsgYmFzZTtcbiAgfVxuICAvLyByZW1vdmUgdHJhaWxpbmcgc2xhc2hcbiAgcmV0dXJuIGJhc2UucmVwbGFjZSgvXFwvJC8sICcnKVxufVxuXG5mdW5jdGlvbiByZXNvbHZlUXVldWUgKFxuICBjdXJyZW50LFxuICBuZXh0XG4pIHtcbiAgdmFyIGk7XG4gIHZhciBtYXggPSBNYXRoLm1heChjdXJyZW50Lmxlbmd0aCwgbmV4dC5sZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBpIDwgbWF4OyBpKyspIHtcbiAgICBpZiAoY3VycmVudFtpXSAhPT0gbmV4dFtpXSkge1xuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB1cGRhdGVkOiBuZXh0LnNsaWNlKDAsIGkpLFxuICAgIGFjdGl2YXRlZDogbmV4dC5zbGljZShpKSxcbiAgICBkZWFjdGl2YXRlZDogY3VycmVudC5zbGljZShpKVxuICB9XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RHdWFyZHMgKFxuICByZWNvcmRzLFxuICBuYW1lLFxuICBiaW5kLFxuICByZXZlcnNlXG4pIHtcbiAgdmFyIGd1YXJkcyA9IGZsYXRNYXBDb21wb25lbnRzKHJlY29yZHMsIGZ1bmN0aW9uIChkZWYsIGluc3RhbmNlLCBtYXRjaCwga2V5KSB7XG4gICAgdmFyIGd1YXJkID0gZXh0cmFjdEd1YXJkKGRlZiwgbmFtZSk7XG4gICAgaWYgKGd1YXJkKSB7XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShndWFyZClcbiAgICAgICAgPyBndWFyZC5tYXAoZnVuY3Rpb24gKGd1YXJkKSB7IHJldHVybiBiaW5kKGd1YXJkLCBpbnN0YW5jZSwgbWF0Y2gsIGtleSk7IH0pXG4gICAgICAgIDogYmluZChndWFyZCwgaW5zdGFuY2UsIG1hdGNoLCBrZXkpXG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGZsYXR0ZW4ocmV2ZXJzZSA/IGd1YXJkcy5yZXZlcnNlKCkgOiBndWFyZHMpXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RHdWFyZCAoXG4gIGRlZixcbiAga2V5XG4pIHtcbiAgaWYgKHR5cGVvZiBkZWYgIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBleHRlbmQgbm93IHNvIHRoYXQgZ2xvYmFsIG1peGlucyBhcmUgYXBwbGllZC5cbiAgICBkZWYgPSBfVnVlLmV4dGVuZChkZWYpO1xuICB9XG4gIHJldHVybiBkZWYub3B0aW9uc1trZXldXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RMZWF2ZUd1YXJkcyAoZGVhY3RpdmF0ZWQpIHtcbiAgcmV0dXJuIGV4dHJhY3RHdWFyZHMoZGVhY3RpdmF0ZWQsICdiZWZvcmVSb3V0ZUxlYXZlJywgYmluZEd1YXJkLCB0cnVlKVxufVxuXG5mdW5jdGlvbiBleHRyYWN0VXBkYXRlSG9va3MgKHVwZGF0ZWQpIHtcbiAgcmV0dXJuIGV4dHJhY3RHdWFyZHModXBkYXRlZCwgJ2JlZm9yZVJvdXRlVXBkYXRlJywgYmluZEd1YXJkKVxufVxuXG5mdW5jdGlvbiBiaW5kR3VhcmQgKGd1YXJkLCBpbnN0YW5jZSkge1xuICBpZiAoaW5zdGFuY2UpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gYm91bmRSb3V0ZUd1YXJkICgpIHtcbiAgICAgIHJldHVybiBndWFyZC5hcHBseShpbnN0YW5jZSwgYXJndW1lbnRzKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBleHRyYWN0RW50ZXJHdWFyZHMgKFxuICBhY3RpdmF0ZWQsXG4gIGNicyxcbiAgaXNWYWxpZFxuKSB7XG4gIHJldHVybiBleHRyYWN0R3VhcmRzKFxuICAgIGFjdGl2YXRlZCxcbiAgICAnYmVmb3JlUm91dGVFbnRlcicsXG4gICAgZnVuY3Rpb24gKGd1YXJkLCBfLCBtYXRjaCwga2V5KSB7XG4gICAgICByZXR1cm4gYmluZEVudGVyR3VhcmQoZ3VhcmQsIG1hdGNoLCBrZXksIGNicywgaXNWYWxpZClcbiAgICB9XG4gIClcbn1cblxuZnVuY3Rpb24gYmluZEVudGVyR3VhcmQgKFxuICBndWFyZCxcbiAgbWF0Y2gsXG4gIGtleSxcbiAgY2JzLFxuICBpc1ZhbGlkXG4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHJvdXRlRW50ZXJHdWFyZCAodG8sIGZyb20sIG5leHQpIHtcbiAgICByZXR1cm4gZ3VhcmQodG8sIGZyb20sIGZ1bmN0aW9uIChjYikge1xuICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYnMucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gIzc1MFxuICAgICAgICAgIC8vIGlmIGEgcm91dGVyLXZpZXcgaXMgd3JhcHBlZCB3aXRoIGFuIG91dC1pbiB0cmFuc2l0aW9uLFxuICAgICAgICAgIC8vIHRoZSBpbnN0YW5jZSBtYXkgbm90IGhhdmUgYmVlbiByZWdpc3RlcmVkIGF0IHRoaXMgdGltZS5cbiAgICAgICAgICAvLyB3ZSB3aWxsIG5lZWQgdG8gcG9sbCBmb3IgcmVnaXN0cmF0aW9uIHVudGlsIGN1cnJlbnQgcm91dGVcbiAgICAgICAgICAvLyBpcyBubyBsb25nZXIgdmFsaWQuXG4gICAgICAgICAgcG9sbChjYiwgbWF0Y2guaW5zdGFuY2VzLCBrZXksIGlzVmFsaWQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIG5leHQoY2IpO1xuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gcG9sbCAoXG4gIGNiLCAvLyBzb21laG93IGZsb3cgY2Fubm90IGluZmVyIHRoaXMgaXMgYSBmdW5jdGlvblxuICBpbnN0YW5jZXMsXG4gIGtleSxcbiAgaXNWYWxpZFxuKSB7XG4gIGlmIChcbiAgICBpbnN0YW5jZXNba2V5XSAmJlxuICAgICFpbnN0YW5jZXNba2V5XS5faXNCZWluZ0Rlc3Ryb3llZCAvLyBkbyBub3QgcmV1c2UgYmVpbmcgZGVzdHJveWVkIGluc3RhbmNlXG4gICkge1xuICAgIGNiKGluc3RhbmNlc1trZXldKTtcbiAgfSBlbHNlIGlmIChpc1ZhbGlkKCkpIHtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHBvbGwoY2IsIGluc3RhbmNlcywga2V5LCBpc1ZhbGlkKTtcbiAgICB9LCAxNik7XG4gIH1cbn1cblxuLyogICovXG5cbnZhciBIVE1MNUhpc3RvcnkgPSAvKkBfX1BVUkVfXyovKGZ1bmN0aW9uIChIaXN0b3J5KSB7XG4gIGZ1bmN0aW9uIEhUTUw1SGlzdG9yeSAocm91dGVyLCBiYXNlKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICBIaXN0b3J5LmNhbGwodGhpcywgcm91dGVyLCBiYXNlKTtcblxuICAgIHZhciBleHBlY3RTY3JvbGwgPSByb3V0ZXIub3B0aW9ucy5zY3JvbGxCZWhhdmlvcjtcbiAgICB2YXIgc3VwcG9ydHNTY3JvbGwgPSBzdXBwb3J0c1B1c2hTdGF0ZSAmJiBleHBlY3RTY3JvbGw7XG5cbiAgICBpZiAoc3VwcG9ydHNTY3JvbGwpIHtcbiAgICAgIHNldHVwU2Nyb2xsKCk7XG4gICAgfVxuXG4gICAgdmFyIGluaXRMb2NhdGlvbiA9IGdldExvY2F0aW9uKHRoaXMuYmFzZSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBjdXJyZW50ID0gdGhpcyQxLmN1cnJlbnQ7XG5cbiAgICAgIC8vIEF2b2lkaW5nIGZpcnN0IGBwb3BzdGF0ZWAgZXZlbnQgZGlzcGF0Y2hlZCBpbiBzb21lIGJyb3dzZXJzIGJ1dCBmaXJzdFxuICAgICAgLy8gaGlzdG9yeSByb3V0ZSBub3QgdXBkYXRlZCBzaW5jZSBhc3luYyBndWFyZCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgICAgdmFyIGxvY2F0aW9uID0gZ2V0TG9jYXRpb24odGhpcyQxLmJhc2UpO1xuICAgICAgaWYgKHRoaXMkMS5jdXJyZW50ID09PSBTVEFSVCAmJiBsb2NhdGlvbiA9PT0gaW5pdExvY2F0aW9uKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICB0aGlzJDEudHJhbnNpdGlvblRvKGxvY2F0aW9uLCBmdW5jdGlvbiAocm91dGUpIHtcbiAgICAgICAgaWYgKHN1cHBvcnRzU2Nyb2xsKSB7XG4gICAgICAgICAgaGFuZGxlU2Nyb2xsKHJvdXRlciwgcm91dGUsIGN1cnJlbnQsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmICggSGlzdG9yeSApIEhUTUw1SGlzdG9yeS5fX3Byb3RvX18gPSBIaXN0b3J5O1xuICBIVE1MNUhpc3RvcnkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggSGlzdG9yeSAmJiBIaXN0b3J5LnByb3RvdHlwZSApO1xuICBIVE1MNUhpc3RvcnkucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSFRNTDVIaXN0b3J5O1xuXG4gIEhUTUw1SGlzdG9yeS5wcm90b3R5cGUuZ28gPSBmdW5jdGlvbiBnbyAobikge1xuICAgIHdpbmRvdy5oaXN0b3J5LmdvKG4pO1xuICB9O1xuXG4gIEhUTUw1SGlzdG9yeS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIHB1c2ggKGxvY2F0aW9uLCBvbkNvbXBsZXRlLCBvbkFib3J0KSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgcmVmID0gdGhpcztcbiAgICB2YXIgZnJvbVJvdXRlID0gcmVmLmN1cnJlbnQ7XG4gICAgdGhpcy50cmFuc2l0aW9uVG8obG9jYXRpb24sIGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgICAgcHVzaFN0YXRlKGNsZWFuUGF0aCh0aGlzJDEuYmFzZSArIHJvdXRlLmZ1bGxQYXRoKSk7XG4gICAgICBoYW5kbGVTY3JvbGwodGhpcyQxLnJvdXRlciwgcm91dGUsIGZyb21Sb3V0ZSwgZmFsc2UpO1xuICAgICAgb25Db21wbGV0ZSAmJiBvbkNvbXBsZXRlKHJvdXRlKTtcbiAgICB9LCBvbkFib3J0KTtcbiAgfTtcblxuICBIVE1MNUhpc3RvcnkucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiByZXBsYWNlIChsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIHJlZiA9IHRoaXM7XG4gICAgdmFyIGZyb21Sb3V0ZSA9IHJlZi5jdXJyZW50O1xuICAgIHRoaXMudHJhbnNpdGlvblRvKGxvY2F0aW9uLCBmdW5jdGlvbiAocm91dGUpIHtcbiAgICAgIHJlcGxhY2VTdGF0ZShjbGVhblBhdGgodGhpcyQxLmJhc2UgKyByb3V0ZS5mdWxsUGF0aCkpO1xuICAgICAgaGFuZGxlU2Nyb2xsKHRoaXMkMS5yb3V0ZXIsIHJvdXRlLCBmcm9tUm91dGUsIGZhbHNlKTtcbiAgICAgIG9uQ29tcGxldGUgJiYgb25Db21wbGV0ZShyb3V0ZSk7XG4gICAgfSwgb25BYm9ydCk7XG4gIH07XG5cbiAgSFRNTDVIaXN0b3J5LnByb3RvdHlwZS5lbnN1cmVVUkwgPSBmdW5jdGlvbiBlbnN1cmVVUkwgKHB1c2gpIHtcbiAgICBpZiAoZ2V0TG9jYXRpb24odGhpcy5iYXNlKSAhPT0gdGhpcy5jdXJyZW50LmZ1bGxQYXRoKSB7XG4gICAgICB2YXIgY3VycmVudCA9IGNsZWFuUGF0aCh0aGlzLmJhc2UgKyB0aGlzLmN1cnJlbnQuZnVsbFBhdGgpO1xuICAgICAgcHVzaCA/IHB1c2hTdGF0ZShjdXJyZW50KSA6IHJlcGxhY2VTdGF0ZShjdXJyZW50KTtcbiAgICB9XG4gIH07XG5cbiAgSFRNTDVIaXN0b3J5LnByb3RvdHlwZS5nZXRDdXJyZW50TG9jYXRpb24gPSBmdW5jdGlvbiBnZXRDdXJyZW50TG9jYXRpb24gKCkge1xuICAgIHJldHVybiBnZXRMb2NhdGlvbih0aGlzLmJhc2UpXG4gIH07XG5cbiAgcmV0dXJuIEhUTUw1SGlzdG9yeTtcbn0oSGlzdG9yeSkpO1xuXG5mdW5jdGlvbiBnZXRMb2NhdGlvbiAoYmFzZSkge1xuICB2YXIgcGF0aCA9IGRlY29kZVVSSSh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUpO1xuICBpZiAoYmFzZSAmJiBwYXRoLmluZGV4T2YoYmFzZSkgPT09IDApIHtcbiAgICBwYXRoID0gcGF0aC5zbGljZShiYXNlLmxlbmd0aCk7XG4gIH1cbiAgcmV0dXJuIChwYXRoIHx8ICcvJykgKyB3aW5kb3cubG9jYXRpb24uc2VhcmNoICsgd2luZG93LmxvY2F0aW9uLmhhc2hcbn1cblxuLyogICovXG5cbnZhciBIYXNoSGlzdG9yeSA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKEhpc3RvcnkpIHtcbiAgZnVuY3Rpb24gSGFzaEhpc3RvcnkgKHJvdXRlciwgYmFzZSwgZmFsbGJhY2spIHtcbiAgICBIaXN0b3J5LmNhbGwodGhpcywgcm91dGVyLCBiYXNlKTtcbiAgICAvLyBjaGVjayBoaXN0b3J5IGZhbGxiYWNrIGRlZXBsaW5raW5nXG4gICAgaWYgKGZhbGxiYWNrICYmIGNoZWNrRmFsbGJhY2sodGhpcy5iYXNlKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGVuc3VyZVNsYXNoKCk7XG4gIH1cblxuICBpZiAoIEhpc3RvcnkgKSBIYXNoSGlzdG9yeS5fX3Byb3RvX18gPSBIaXN0b3J5O1xuICBIYXNoSGlzdG9yeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKCBIaXN0b3J5ICYmIEhpc3RvcnkucHJvdG90eXBlICk7XG4gIEhhc2hIaXN0b3J5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEhhc2hIaXN0b3J5O1xuXG4gIC8vIHRoaXMgaXMgZGVsYXllZCB1bnRpbCB0aGUgYXBwIG1vdW50c1xuICAvLyB0byBhdm9pZCB0aGUgaGFzaGNoYW5nZSBsaXN0ZW5lciBiZWluZyBmaXJlZCB0b28gZWFybHlcbiAgSGFzaEhpc3RvcnkucHJvdG90eXBlLnNldHVwTGlzdGVuZXJzID0gZnVuY3Rpb24gc2V0dXBMaXN0ZW5lcnMgKCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIHJvdXRlciA9IHRoaXMucm91dGVyO1xuICAgIHZhciBleHBlY3RTY3JvbGwgPSByb3V0ZXIub3B0aW9ucy5zY3JvbGxCZWhhdmlvcjtcbiAgICB2YXIgc3VwcG9ydHNTY3JvbGwgPSBzdXBwb3J0c1B1c2hTdGF0ZSAmJiBleHBlY3RTY3JvbGw7XG5cbiAgICBpZiAoc3VwcG9ydHNTY3JvbGwpIHtcbiAgICAgIHNldHVwU2Nyb2xsKCk7XG4gICAgfVxuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBzdXBwb3J0c1B1c2hTdGF0ZSA/ICdwb3BzdGF0ZScgOiAnaGFzaGNoYW5nZScsXG4gICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjdXJyZW50ID0gdGhpcyQxLmN1cnJlbnQ7XG4gICAgICAgIGlmICghZW5zdXJlU2xhc2goKSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHRoaXMkMS50cmFuc2l0aW9uVG8oZ2V0SGFzaCgpLCBmdW5jdGlvbiAocm91dGUpIHtcbiAgICAgICAgICBpZiAoc3VwcG9ydHNTY3JvbGwpIHtcbiAgICAgICAgICAgIGhhbmRsZVNjcm9sbCh0aGlzJDEucm91dGVyLCByb3V0ZSwgY3VycmVudCwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghc3VwcG9ydHNQdXNoU3RhdGUpIHtcbiAgICAgICAgICAgIHJlcGxhY2VIYXNoKHJvdXRlLmZ1bGxQYXRoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG4gIH07XG5cbiAgSGFzaEhpc3RvcnkucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiBwdXNoIChsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIHJlZiA9IHRoaXM7XG4gICAgdmFyIGZyb21Sb3V0ZSA9IHJlZi5jdXJyZW50O1xuICAgIHRoaXMudHJhbnNpdGlvblRvKFxuICAgICAgbG9jYXRpb24sXG4gICAgICBmdW5jdGlvbiAocm91dGUpIHtcbiAgICAgICAgcHVzaEhhc2gocm91dGUuZnVsbFBhdGgpO1xuICAgICAgICBoYW5kbGVTY3JvbGwodGhpcyQxLnJvdXRlciwgcm91dGUsIGZyb21Sb3V0ZSwgZmFsc2UpO1xuICAgICAgICBvbkNvbXBsZXRlICYmIG9uQ29tcGxldGUocm91dGUpO1xuICAgICAgfSxcbiAgICAgIG9uQWJvcnRcbiAgICApO1xuICB9O1xuXG4gIEhhc2hIaXN0b3J5LnByb3RvdHlwZS5yZXBsYWNlID0gZnVuY3Rpb24gcmVwbGFjZSAobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciByZWYgPSB0aGlzO1xuICAgIHZhciBmcm9tUm91dGUgPSByZWYuY3VycmVudDtcbiAgICB0aGlzLnRyYW5zaXRpb25UbyhcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgICAgIHJlcGxhY2VIYXNoKHJvdXRlLmZ1bGxQYXRoKTtcbiAgICAgICAgaGFuZGxlU2Nyb2xsKHRoaXMkMS5yb3V0ZXIsIHJvdXRlLCBmcm9tUm91dGUsIGZhbHNlKTtcbiAgICAgICAgb25Db21wbGV0ZSAmJiBvbkNvbXBsZXRlKHJvdXRlKTtcbiAgICAgIH0sXG4gICAgICBvbkFib3J0XG4gICAgKTtcbiAgfTtcblxuICBIYXNoSGlzdG9yeS5wcm90b3R5cGUuZ28gPSBmdW5jdGlvbiBnbyAobikge1xuICAgIHdpbmRvdy5oaXN0b3J5LmdvKG4pO1xuICB9O1xuXG4gIEhhc2hIaXN0b3J5LnByb3RvdHlwZS5lbnN1cmVVUkwgPSBmdW5jdGlvbiBlbnN1cmVVUkwgKHB1c2gpIHtcbiAgICB2YXIgY3VycmVudCA9IHRoaXMuY3VycmVudC5mdWxsUGF0aDtcbiAgICBpZiAoZ2V0SGFzaCgpICE9PSBjdXJyZW50KSB7XG4gICAgICBwdXNoID8gcHVzaEhhc2goY3VycmVudCkgOiByZXBsYWNlSGFzaChjdXJyZW50KTtcbiAgICB9XG4gIH07XG5cbiAgSGFzaEhpc3RvcnkucHJvdG90eXBlLmdldEN1cnJlbnRMb2NhdGlvbiA9IGZ1bmN0aW9uIGdldEN1cnJlbnRMb2NhdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdldEhhc2goKVxuICB9O1xuXG4gIHJldHVybiBIYXNoSGlzdG9yeTtcbn0oSGlzdG9yeSkpO1xuXG5mdW5jdGlvbiBjaGVja0ZhbGxiYWNrIChiYXNlKSB7XG4gIHZhciBsb2NhdGlvbiA9IGdldExvY2F0aW9uKGJhc2UpO1xuICBpZiAoIS9eXFwvIy8udGVzdChsb2NhdGlvbikpIHtcbiAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShjbGVhblBhdGgoYmFzZSArICcvIycgKyBsb2NhdGlvbikpO1xuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cblxuZnVuY3Rpb24gZW5zdXJlU2xhc2ggKCkge1xuICB2YXIgcGF0aCA9IGdldEhhc2goKTtcbiAgaWYgKHBhdGguY2hhckF0KDApID09PSAnLycpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJlcGxhY2VIYXNoKCcvJyArIHBhdGgpO1xuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gZ2V0SGFzaCAoKSB7XG4gIC8vIFdlIGNhbid0IHVzZSB3aW5kb3cubG9jYXRpb24uaGFzaCBoZXJlIGJlY2F1c2UgaXQncyBub3RcbiAgLy8gY29uc2lzdGVudCBhY3Jvc3MgYnJvd3NlcnMgLSBGaXJlZm94IHdpbGwgcHJlLWRlY29kZSBpdCFcbiAgdmFyIGhyZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgdmFyIGluZGV4ID0gaHJlZi5pbmRleE9mKCcjJyk7XG4gIC8vIGVtcHR5IHBhdGhcbiAgaWYgKGluZGV4IDwgMCkgeyByZXR1cm4gJycgfVxuXG4gIGhyZWYgPSBocmVmLnNsaWNlKGluZGV4ICsgMSk7XG4gIC8vIGRlY29kZSB0aGUgaGFzaCBidXQgbm90IHRoZSBzZWFyY2ggb3IgaGFzaFxuICAvLyBhcyBzZWFyY2gocXVlcnkpIGlzIGFscmVhZHkgZGVjb2RlZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMjcwOFxuICB2YXIgc2VhcmNoSW5kZXggPSBocmVmLmluZGV4T2YoJz8nKTtcbiAgaWYgKHNlYXJjaEluZGV4IDwgMCkge1xuICAgIHZhciBoYXNoSW5kZXggPSBocmVmLmluZGV4T2YoJyMnKTtcbiAgICBpZiAoaGFzaEluZGV4ID4gLTEpIHtcbiAgICAgIGhyZWYgPSBkZWNvZGVVUkkoaHJlZi5zbGljZSgwLCBoYXNoSW5kZXgpKSArIGhyZWYuc2xpY2UoaGFzaEluZGV4KTtcbiAgICB9IGVsc2UgeyBocmVmID0gZGVjb2RlVVJJKGhyZWYpOyB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHNlYXJjaEluZGV4ID4gLTEpIHtcbiAgICAgIGhyZWYgPSBkZWNvZGVVUkkoaHJlZi5zbGljZSgwLCBzZWFyY2hJbmRleCkpICsgaHJlZi5zbGljZShzZWFyY2hJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGhyZWZcbn1cblxuZnVuY3Rpb24gZ2V0VXJsIChwYXRoKSB7XG4gIHZhciBocmVmID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gIHZhciBpID0gaHJlZi5pbmRleE9mKCcjJyk7XG4gIHZhciBiYXNlID0gaSA+PSAwID8gaHJlZi5zbGljZSgwLCBpKSA6IGhyZWY7XG4gIHJldHVybiAoYmFzZSArIFwiI1wiICsgcGF0aClcbn1cblxuZnVuY3Rpb24gcHVzaEhhc2ggKHBhdGgpIHtcbiAgaWYgKHN1cHBvcnRzUHVzaFN0YXRlKSB7XG4gICAgcHVzaFN0YXRlKGdldFVybChwYXRoKSk7XG4gIH0gZWxzZSB7XG4gICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSBwYXRoO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VIYXNoIChwYXRoKSB7XG4gIGlmIChzdXBwb3J0c1B1c2hTdGF0ZSkge1xuICAgIHJlcGxhY2VTdGF0ZShnZXRVcmwocGF0aCkpO1xuICB9IGVsc2Uge1xuICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKGdldFVybChwYXRoKSk7XG4gIH1cbn1cblxuLyogICovXG5cbnZhciBBYnN0cmFjdEhpc3RvcnkgPSAvKkBfX1BVUkVfXyovKGZ1bmN0aW9uIChIaXN0b3J5KSB7XG4gIGZ1bmN0aW9uIEFic3RyYWN0SGlzdG9yeSAocm91dGVyLCBiYXNlKSB7XG4gICAgSGlzdG9yeS5jYWxsKHRoaXMsIHJvdXRlciwgYmFzZSk7XG4gICAgdGhpcy5zdGFjayA9IFtdO1xuICAgIHRoaXMuaW5kZXggPSAtMTtcbiAgfVxuXG4gIGlmICggSGlzdG9yeSApIEFic3RyYWN0SGlzdG9yeS5fX3Byb3RvX18gPSBIaXN0b3J5O1xuICBBYnN0cmFjdEhpc3RvcnkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggSGlzdG9yeSAmJiBIaXN0b3J5LnByb3RvdHlwZSApO1xuICBBYnN0cmFjdEhpc3RvcnkucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWJzdHJhY3RIaXN0b3J5O1xuXG4gIEFic3RyYWN0SGlzdG9yeS5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIHB1c2ggKGxvY2F0aW9uLCBvbkNvbXBsZXRlLCBvbkFib3J0KSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB0aGlzLnRyYW5zaXRpb25UbyhcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgICAgIHRoaXMkMS5zdGFjayA9IHRoaXMkMS5zdGFjay5zbGljZSgwLCB0aGlzJDEuaW5kZXggKyAxKS5jb25jYXQocm91dGUpO1xuICAgICAgICB0aGlzJDEuaW5kZXgrKztcbiAgICAgICAgb25Db21wbGV0ZSAmJiBvbkNvbXBsZXRlKHJvdXRlKTtcbiAgICAgIH0sXG4gICAgICBvbkFib3J0XG4gICAgKTtcbiAgfTtcblxuICBBYnN0cmFjdEhpc3RvcnkucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiByZXBsYWNlIChsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdGhpcy50cmFuc2l0aW9uVG8oXG4gICAgICBsb2NhdGlvbixcbiAgICAgIGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgICAgICB0aGlzJDEuc3RhY2sgPSB0aGlzJDEuc3RhY2suc2xpY2UoMCwgdGhpcyQxLmluZGV4KS5jb25jYXQocm91dGUpO1xuICAgICAgICBvbkNvbXBsZXRlICYmIG9uQ29tcGxldGUocm91dGUpO1xuICAgICAgfSxcbiAgICAgIG9uQWJvcnRcbiAgICApO1xuICB9O1xuXG4gIEFic3RyYWN0SGlzdG9yeS5wcm90b3R5cGUuZ28gPSBmdW5jdGlvbiBnbyAobikge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIHRhcmdldEluZGV4ID0gdGhpcy5pbmRleCArIG47XG4gICAgaWYgKHRhcmdldEluZGV4IDwgMCB8fCB0YXJnZXRJbmRleCA+PSB0aGlzLnN0YWNrLmxlbmd0aCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHZhciByb3V0ZSA9IHRoaXMuc3RhY2tbdGFyZ2V0SW5kZXhdO1xuICAgIHRoaXMuY29uZmlybVRyYW5zaXRpb24oXG4gICAgICByb3V0ZSxcbiAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcyQxLmluZGV4ID0gdGFyZ2V0SW5kZXg7XG4gICAgICAgIHRoaXMkMS51cGRhdGVSb3V0ZShyb3V0ZSk7XG4gICAgICB9LFxuICAgICAgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoaXNFeHRlbmRlZEVycm9yKE5hdmlnYXRpb25EdXBsaWNhdGVkLCBlcnIpKSB7XG4gICAgICAgICAgdGhpcyQxLmluZGV4ID0gdGFyZ2V0SW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9O1xuXG4gIEFic3RyYWN0SGlzdG9yeS5wcm90b3R5cGUuZ2V0Q3VycmVudExvY2F0aW9uID0gZnVuY3Rpb24gZ2V0Q3VycmVudExvY2F0aW9uICgpIHtcbiAgICB2YXIgY3VycmVudCA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTtcbiAgICByZXR1cm4gY3VycmVudCA/IGN1cnJlbnQuZnVsbFBhdGggOiAnLydcbiAgfTtcblxuICBBYnN0cmFjdEhpc3RvcnkucHJvdG90eXBlLmVuc3VyZVVSTCA9IGZ1bmN0aW9uIGVuc3VyZVVSTCAoKSB7XG4gICAgLy8gbm9vcFxuICB9O1xuXG4gIHJldHVybiBBYnN0cmFjdEhpc3Rvcnk7XG59KEhpc3RvcnkpKTtcblxuLyogICovXG5cblxuXG52YXIgVnVlUm91dGVyID0gZnVuY3Rpb24gVnVlUm91dGVyIChvcHRpb25zKSB7XG4gIGlmICggb3B0aW9ucyA9PT0gdm9pZCAwICkgb3B0aW9ucyA9IHt9O1xuXG4gIHRoaXMuYXBwID0gbnVsbDtcbiAgdGhpcy5hcHBzID0gW107XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIHRoaXMuYmVmb3JlSG9va3MgPSBbXTtcbiAgdGhpcy5yZXNvbHZlSG9va3MgPSBbXTtcbiAgdGhpcy5hZnRlckhvb2tzID0gW107XG4gIHRoaXMubWF0Y2hlciA9IGNyZWF0ZU1hdGNoZXIob3B0aW9ucy5yb3V0ZXMgfHwgW10sIHRoaXMpO1xuXG4gIHZhciBtb2RlID0gb3B0aW9ucy5tb2RlIHx8ICdoYXNoJztcbiAgdGhpcy5mYWxsYmFjayA9IG1vZGUgPT09ICdoaXN0b3J5JyAmJiAhc3VwcG9ydHNQdXNoU3RhdGUgJiYgb3B0aW9ucy5mYWxsYmFjayAhPT0gZmFsc2U7XG4gIGlmICh0aGlzLmZhbGxiYWNrKSB7XG4gICAgbW9kZSA9ICdoYXNoJztcbiAgfVxuICBpZiAoIWluQnJvd3Nlcikge1xuICAgIG1vZGUgPSAnYWJzdHJhY3QnO1xuICB9XG4gIHRoaXMubW9kZSA9IG1vZGU7XG5cbiAgc3dpdGNoIChtb2RlKSB7XG4gICAgY2FzZSAnaGlzdG9yeSc6XG4gICAgICB0aGlzLmhpc3RvcnkgPSBuZXcgSFRNTDVIaXN0b3J5KHRoaXMsIG9wdGlvbnMuYmFzZSk7XG4gICAgICBicmVha1xuICAgIGNhc2UgJ2hhc2gnOlxuICAgICAgdGhpcy5oaXN0b3J5ID0gbmV3IEhhc2hIaXN0b3J5KHRoaXMsIG9wdGlvbnMuYmFzZSwgdGhpcy5mYWxsYmFjayk7XG4gICAgICBicmVha1xuICAgIGNhc2UgJ2Fic3RyYWN0JzpcbiAgICAgIHRoaXMuaGlzdG9yeSA9IG5ldyBBYnN0cmFjdEhpc3RvcnkodGhpcywgb3B0aW9ucy5iYXNlKTtcbiAgICAgIGJyZWFrXG4gICAgZGVmYXVsdDpcbiAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGFzc2VydChmYWxzZSwgKFwiaW52YWxpZCBtb2RlOiBcIiArIG1vZGUpKTtcbiAgICAgIH1cbiAgfVxufTtcblxudmFyIHByb3RvdHlwZUFjY2Vzc29ycyA9IHsgY3VycmVudFJvdXRlOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUubWF0Y2ggPSBmdW5jdGlvbiBtYXRjaCAoXG4gIHJhdyxcbiAgY3VycmVudCxcbiAgcmVkaXJlY3RlZEZyb21cbikge1xuICByZXR1cm4gdGhpcy5tYXRjaGVyLm1hdGNoKHJhdywgY3VycmVudCwgcmVkaXJlY3RlZEZyb20pXG59O1xuXG5wcm90b3R5cGVBY2Nlc3NvcnMuY3VycmVudFJvdXRlLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuaGlzdG9yeSAmJiB0aGlzLmhpc3RvcnkuY3VycmVudFxufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gaW5pdCAoYXBwIC8qIFZ1ZSBjb21wb25lbnQgaW5zdGFuY2UgKi8pIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICBcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nICYmIGFzc2VydChcbiAgICBpbnN0YWxsLmluc3RhbGxlZCxcbiAgICBcIm5vdCBpbnN0YWxsZWQuIE1ha2Ugc3VyZSB0byBjYWxsIGBWdWUudXNlKFZ1ZVJvdXRlcilgIFwiICtcbiAgICBcImJlZm9yZSBjcmVhdGluZyByb290IGluc3RhbmNlLlwiXG4gICk7XG5cbiAgdGhpcy5hcHBzLnB1c2goYXBwKTtcblxuICAvLyBzZXQgdXAgYXBwIGRlc3Ryb3llZCBoYW5kbGVyXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8yNjM5XG4gIGFwcC4kb25jZSgnaG9vazpkZXN0cm95ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgLy8gY2xlYW4gb3V0IGFwcCBmcm9tIHRoaXMuYXBwcyBhcnJheSBvbmNlIGRlc3Ryb3llZFxuICAgIHZhciBpbmRleCA9IHRoaXMkMS5hcHBzLmluZGV4T2YoYXBwKTtcbiAgICBpZiAoaW5kZXggPiAtMSkgeyB0aGlzJDEuYXBwcy5zcGxpY2UoaW5kZXgsIDEpOyB9XG4gICAgLy8gZW5zdXJlIHdlIHN0aWxsIGhhdmUgYSBtYWluIGFwcCBvciBudWxsIGlmIG5vIGFwcHNcbiAgICAvLyB3ZSBkbyBub3QgcmVsZWFzZSB0aGUgcm91dGVyIHNvIGl0IGNhbiBiZSByZXVzZWRcbiAgICBpZiAodGhpcyQxLmFwcCA9PT0gYXBwKSB7IHRoaXMkMS5hcHAgPSB0aGlzJDEuYXBwc1swXSB8fCBudWxsOyB9XG4gIH0pO1xuXG4gIC8vIG1haW4gYXBwIHByZXZpb3VzbHkgaW5pdGlhbGl6ZWRcbiAgLy8gcmV0dXJuIGFzIHdlIGRvbid0IG5lZWQgdG8gc2V0IHVwIG5ldyBoaXN0b3J5IGxpc3RlbmVyXG4gIGlmICh0aGlzLmFwcCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdGhpcy5hcHAgPSBhcHA7XG5cbiAgdmFyIGhpc3RvcnkgPSB0aGlzLmhpc3Rvcnk7XG5cbiAgaWYgKGhpc3RvcnkgaW5zdGFuY2VvZiBIVE1MNUhpc3RvcnkpIHtcbiAgICBoaXN0b3J5LnRyYW5zaXRpb25UbyhoaXN0b3J5LmdldEN1cnJlbnRMb2NhdGlvbigpKTtcbiAgfSBlbHNlIGlmIChoaXN0b3J5IGluc3RhbmNlb2YgSGFzaEhpc3RvcnkpIHtcbiAgICB2YXIgc2V0dXBIYXNoTGlzdGVuZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBoaXN0b3J5LnNldHVwTGlzdGVuZXJzKCk7XG4gICAgfTtcbiAgICBoaXN0b3J5LnRyYW5zaXRpb25UbyhcbiAgICAgIGhpc3RvcnkuZ2V0Q3VycmVudExvY2F0aW9uKCksXG4gICAgICBzZXR1cEhhc2hMaXN0ZW5lcixcbiAgICAgIHNldHVwSGFzaExpc3RlbmVyXG4gICAgKTtcbiAgfVxuXG4gIGhpc3RvcnkubGlzdGVuKGZ1bmN0aW9uIChyb3V0ZSkge1xuICAgIHRoaXMkMS5hcHBzLmZvckVhY2goZnVuY3Rpb24gKGFwcCkge1xuICAgICAgYXBwLl9yb3V0ZSA9IHJvdXRlO1xuICAgIH0pO1xuICB9KTtcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUuYmVmb3JlRWFjaCA9IGZ1bmN0aW9uIGJlZm9yZUVhY2ggKGZuKSB7XG4gIHJldHVybiByZWdpc3Rlckhvb2sodGhpcy5iZWZvcmVIb29rcywgZm4pXG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLmJlZm9yZVJlc29sdmUgPSBmdW5jdGlvbiBiZWZvcmVSZXNvbHZlIChmbikge1xuICByZXR1cm4gcmVnaXN0ZXJIb29rKHRoaXMucmVzb2x2ZUhvb2tzLCBmbilcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUuYWZ0ZXJFYWNoID0gZnVuY3Rpb24gYWZ0ZXJFYWNoIChmbikge1xuICByZXR1cm4gcmVnaXN0ZXJIb29rKHRoaXMuYWZ0ZXJIb29rcywgZm4pXG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLm9uUmVhZHkgPSBmdW5jdGlvbiBvblJlYWR5IChjYiwgZXJyb3JDYikge1xuICB0aGlzLmhpc3Rvcnkub25SZWFkeShjYiwgZXJyb3JDYik7XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLm9uRXJyb3IgPSBmdW5jdGlvbiBvbkVycm9yIChlcnJvckNiKSB7XG4gIHRoaXMuaGlzdG9yeS5vbkVycm9yKGVycm9yQ2IpO1xufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gcHVzaCAobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgaWYgKCFvbkNvbXBsZXRlICYmICFvbkFib3J0ICYmIHR5cGVvZiBQcm9taXNlICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB0aGlzJDEuaGlzdG9yeS5wdXNoKGxvY2F0aW9uLCByZXNvbHZlLCByZWplY3QpO1xuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgdGhpcy5oaXN0b3J5LnB1c2gobG9jYXRpb24sIG9uQ29tcGxldGUsIG9uQWJvcnQpO1xuICB9XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiByZXBsYWNlIChsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIC8vICRmbG93LWRpc2FibGUtbGluZVxuICBpZiAoIW9uQ29tcGxldGUgJiYgIW9uQWJvcnQgJiYgdHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHRoaXMkMS5oaXN0b3J5LnJlcGxhY2UobG9jYXRpb24sIHJlc29sdmUsIHJlamVjdCk7XG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmhpc3RvcnkucmVwbGFjZShsb2NhdGlvbiwgb25Db21wbGV0ZSwgb25BYm9ydCk7XG4gIH1cbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUuZ28gPSBmdW5jdGlvbiBnbyAobikge1xuICB0aGlzLmhpc3RvcnkuZ28obik7XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLmJhY2sgPSBmdW5jdGlvbiBiYWNrICgpIHtcbiAgdGhpcy5nbygtMSk7XG59O1xuXG5WdWVSb3V0ZXIucHJvdG90eXBlLmZvcndhcmQgPSBmdW5jdGlvbiBmb3J3YXJkICgpIHtcbiAgdGhpcy5nbygxKTtcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUuZ2V0TWF0Y2hlZENvbXBvbmVudHMgPSBmdW5jdGlvbiBnZXRNYXRjaGVkQ29tcG9uZW50cyAodG8pIHtcbiAgdmFyIHJvdXRlID0gdG9cbiAgICA/IHRvLm1hdGNoZWRcbiAgICAgID8gdG9cbiAgICAgIDogdGhpcy5yZXNvbHZlKHRvKS5yb3V0ZVxuICAgIDogdGhpcy5jdXJyZW50Um91dGU7XG4gIGlmICghcm91dGUpIHtcbiAgICByZXR1cm4gW11cbiAgfVxuICByZXR1cm4gW10uY29uY2F0LmFwcGx5KFtdLCByb3V0ZS5tYXRjaGVkLm1hcChmdW5jdGlvbiAobSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhtLmNvbXBvbmVudHMpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZXR1cm4gbS5jb21wb25lbnRzW2tleV1cbiAgICB9KVxuICB9KSlcbn07XG5cblZ1ZVJvdXRlci5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUgKFxuICB0byxcbiAgY3VycmVudCxcbiAgYXBwZW5kXG4pIHtcbiAgY3VycmVudCA9IGN1cnJlbnQgfHwgdGhpcy5oaXN0b3J5LmN1cnJlbnQ7XG4gIHZhciBsb2NhdGlvbiA9IG5vcm1hbGl6ZUxvY2F0aW9uKFxuICAgIHRvLFxuICAgIGN1cnJlbnQsXG4gICAgYXBwZW5kLFxuICAgIHRoaXNcbiAgKTtcbiAgdmFyIHJvdXRlID0gdGhpcy5tYXRjaChsb2NhdGlvbiwgY3VycmVudCk7XG4gIHZhciBmdWxsUGF0aCA9IHJvdXRlLnJlZGlyZWN0ZWRGcm9tIHx8IHJvdXRlLmZ1bGxQYXRoO1xuICB2YXIgYmFzZSA9IHRoaXMuaGlzdG9yeS5iYXNlO1xuICB2YXIgaHJlZiA9IGNyZWF0ZUhyZWYoYmFzZSwgZnVsbFBhdGgsIHRoaXMubW9kZSk7XG4gIHJldHVybiB7XG4gICAgbG9jYXRpb246IGxvY2F0aW9uLFxuICAgIHJvdXRlOiByb3V0ZSxcbiAgICBocmVmOiBocmVmLFxuICAgIC8vIGZvciBiYWNrd2FyZHMgY29tcGF0XG4gICAgbm9ybWFsaXplZFRvOiBsb2NhdGlvbixcbiAgICByZXNvbHZlZDogcm91dGVcbiAgfVxufTtcblxuVnVlUm91dGVyLnByb3RvdHlwZS5hZGRSb3V0ZXMgPSBmdW5jdGlvbiBhZGRSb3V0ZXMgKHJvdXRlcykge1xuICB0aGlzLm1hdGNoZXIuYWRkUm91dGVzKHJvdXRlcyk7XG4gIGlmICh0aGlzLmhpc3RvcnkuY3VycmVudCAhPT0gU1RBUlQpIHtcbiAgICB0aGlzLmhpc3RvcnkudHJhbnNpdGlvblRvKHRoaXMuaGlzdG9yeS5nZXRDdXJyZW50TG9jYXRpb24oKSk7XG4gIH1cbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBWdWVSb3V0ZXIucHJvdG90eXBlLCBwcm90b3R5cGVBY2Nlc3NvcnMgKTtcblxuZnVuY3Rpb24gcmVnaXN0ZXJIb29rIChsaXN0LCBmbikge1xuICBsaXN0LnB1c2goZm4pO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBpID0gbGlzdC5pbmRleE9mKGZuKTtcbiAgICBpZiAoaSA+IC0xKSB7IGxpc3Quc3BsaWNlKGksIDEpOyB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlSHJlZiAoYmFzZSwgZnVsbFBhdGgsIG1vZGUpIHtcbiAgdmFyIHBhdGggPSBtb2RlID09PSAnaGFzaCcgPyAnIycgKyBmdWxsUGF0aCA6IGZ1bGxQYXRoO1xuICByZXR1cm4gYmFzZSA/IGNsZWFuUGF0aChiYXNlICsgJy8nICsgcGF0aCkgOiBwYXRoXG59XG5cblZ1ZVJvdXRlci5pbnN0YWxsID0gaW5zdGFsbDtcblZ1ZVJvdXRlci52ZXJzaW9uID0gJzMuMS4zJztcblxuaWYgKGluQnJvd3NlciAmJiB3aW5kb3cuVnVlKSB7XG4gIHdpbmRvdy5WdWUudXNlKFZ1ZVJvdXRlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVnVlUm91dGVyO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF92dWUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJ2dWVcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxudmFyIGJ1cyA9IG5ldyBfdnVlW1wiZGVmYXVsdFwiXSgpO1xudmFyIF9kZWZhdWx0ID0gYnVzO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIGRpc3BsYXkgPSB0aGlzLmNvbHVtbnNEaXNwbGF5OyAvLyBkZWZhdWx0IC0gcmV0dXJuIGFsbCBjb2x1bW5zXG5cbiAgaWYgKCFkaXNwbGF5ICYmICF0aGlzLnVzZXJDb250cm9sc0NvbHVtbnMpIHtcbiAgICByZXR1cm4gdGhpcy5Db2x1bW5zLmZpbHRlcihmdW5jdGlvbiAoY29sKSB7XG4gICAgICByZXR1cm4gX3RoaXMuX3Nob3VsZFNob3dDb2x1bW5PbkluaXQoY29sKTtcbiAgICB9KTtcbiAgfSAvLyB1c2VyIHRvZ2dsZWQgY29sdW1ucyAtIHJldHVybiB1c2VyIHNlbGVjdGVkIGNvbHVtbnNcblxuXG4gIGlmICh0aGlzLnVzZXJDb250cm9sc0NvbHVtbnMpIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbHRlcihmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICByZXR1cm4gX3RoaXMudXNlckNvbHVtbnNEaXNwbGF5LmluY2x1ZGVzKGNvbHVtbik7XG4gICAgfSk7XG4gIH1cblxuICBpZiAodGhpcy5vcHRzLnNzcikgcmV0dXJuIHRoaXMuQ29sdW1uczsgLy8gZGV2ZWxvcGVyIGRlZmluZWQgY29sdW1ucyBkaXNwbGF5XG5cbiAgcmV0dXJuIHRoaXMuQ29sdW1ucy5maWx0ZXIoZnVuY3Rpb24gKGNvbHVtbikge1xuICAgIGlmICghX3RoaXMuX3Nob3VsZFNob3dDb2x1bW5PbkluaXQoY29sdW1uKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghZGlzcGxheVtjb2x1bW5dKSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgcmFuZ2UgPSBkaXNwbGF5W2NvbHVtbl07XG4gICAgdmFyIG9wZXJhdG9yID0gcmFuZ2VbMl07XG4gICAgdmFyIGluUmFuZ2UgPSAoIXJhbmdlWzBdIHx8IF90aGlzLndpbmRvd1dpZHRoID49IHJhbmdlWzBdKSAmJiAoIXJhbmdlWzFdIHx8IF90aGlzLndpbmRvd1dpZHRoIDwgcmFuZ2VbMV0pO1xuICAgIHJldHVybiBvcGVyYXRvciA9PSAnbm90JyA/ICFpblJhbmdlIDogaW5SYW5nZTtcbiAgfSk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuaGFzQ2hpbGRSb3cgPyB0aGlzLmFsbENvbHVtbnMubGVuZ3RoICsgMSA6IHRoaXMuYWxsQ29sdW1ucy5sZW5ndGg7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuY3VzdG9tUXVlcmllcyk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgaW50ZXJzZWN0ID0gcmVxdWlyZSgnYXJyYXktaW50ZXJzZWN0JylbXCJkZWZhdWx0XCJdO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMub3B0cy5maWx0ZXJhYmxlID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0cy5kYXRlQ29sdW1ucztcbiAgfVxuXG4gIGlmICh0aGlzLm9wdHMuZmlsdGVyYWJsZSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gaW50ZXJzZWN0KHRoaXMub3B0cy5maWx0ZXJhYmxlLCB0aGlzLm9wdHMuZGF0ZUNvbHVtbnMpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm9wdHMuZmlsdGVyYWJsZSAmJiB0aGlzLm9wdHMuZmlsdGVyYWJsZS5sZW5ndGggPyB0aGlzLm9wdHMuZmlsdGVyYWJsZSA6IHRoaXMuQ29sdW1ucztcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBjbG9uZSA9IHJlcXVpcmUoJ2Nsb25lJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICB2YXIgZGF0YSA9IGNsb25lKHRoaXMudGFibGVEYXRhKTtcbiAgICB2YXIgY29sdW1uID0gdGhpcy5vcmRlckJ5LmNvbHVtbjtcbiAgICBkYXRhID0gdGhpcy5zZWFyY2goZGF0YSk7XG5cbiAgICBpZiAoY29sdW1uKSB7XG4gICAgICAvLyBkdW1teSB2YXIgdG8gZm9yY2UgY29tcGlsYXRpb25cbiAgICAgIGlmICh0aGlzLnRpbWUpIHRoaXMudGltZSA9IHRoaXMudGltZTtcbiAgICAgIGRhdGEgPSB0aGlzLm9wdHMuc29ydGluZ0FsZ29yaXRobS5jYWxsKHRoaXMsIGRhdGEsIGNvbHVtbik7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuZ3JvdXBCeSkge1xuICAgICAgZGF0YSA9IHRoaXMub3B0cy5zb3J0aW5nQWxnb3JpdGhtLmNhbGwodGhpcywgZGF0YSwgdGhpcy5vcHRzLmdyb3VwQnkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZ1ZXgpIHtcbiAgICAgIGlmICh0aGlzLmNvdW50ICE9IGRhdGEubGVuZ3RoKSB0aGlzLmNvbW1pdCgnU0VUX0NPVU5UJywgZGF0YS5sZW5ndGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvdW50ID0gZGF0YS5sZW5ndGg7XG4gICAgfVxuXG4gICAgdmFyIG9mZnNldCA9ICh0aGlzLnBhZ2UgLSAxKSAqIHRoaXMubGltaXQ7XG4gICAgdGhpcy5hbGxGaWx0ZXJlZERhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgICBkYXRhID0gZGF0YS5zcGxpY2Uob2Zmc2V0LCB0aGlzLmxpbWl0KTtcbiAgICByZXR1cm4gdGhpcy5hcHBseUZpbHRlcnMoZGF0YSk7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gc2V0KHZhbCkge1xuICAgIGNvbnNvbGUubG9nKHZhbCk7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICBpZiAoX3R5cGVvZih0aGlzLnF1ZXJ5KSAhPT0gJ29iamVjdCcgfHwgdGhpcy5vcHRzLnNlbmRFbXB0eUZpbHRlcnMpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeTtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSB7fTtcblxuICBmb3IgKHZhciBrZXkgaW4gdGhpcy5xdWVyeSkge1xuICAgIGlmICh0aGlzLnF1ZXJ5W2tleV0gIT09ICcnKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHRoaXMucXVlcnlba2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLm9wdHMuY2hpbGRSb3cgfHwgdGhpcy4kc2NvcGVkU2xvdHMuY2hpbGRfcm93O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhdGhpcy5vcHRzLmZpbHRlckJ5Q29sdW1uICYmICh0eXBlb2YgdGhpcy5vcHRzLmZpbHRlcmFibGUgPT09ICdib29sZWFuJyAmJiB0aGlzLm9wdHMuZmlsdGVyYWJsZSB8fCBfdHlwZW9mKHRoaXMub3B0cy5maWx0ZXJhYmxlKSA9PT0gJ29iamVjdCcgJiYgdGhpcy5vcHRzLmZpbHRlcmFibGUubGVuZ3RoKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgY29sdW1ucyA9IE9iamVjdC5rZXlzKHRoaXMub3B0cy5saXN0Q29sdW1ucyk7XG4gIHZhciByZXMgPSB7fTtcbiAgY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICByZXNbY29sdW1uXSA9IHt9O1xuICAgIHRoaXMub3B0cy5saXN0Q29sdW1uc1tjb2x1bW5dLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJlc1tjb2x1bW5dW2l0ZW0uaWRdID0gaXRlbS50ZXh0O1xuICAgIH0pO1xuICB9LmJpbmQodGhpcykpO1xuICByZXR1cm4gcmVzO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2NvbmZpZy9kZWZhdWx0cycpKCk7XG5cbiAgcmV0dXJuIHRoaXMuaW5pdE9wdGlvbnMoZGVmYXVsdHMsIHRoaXMuZ2xvYmFsT3B0aW9ucywgdGhpcy5vcHRpb25zKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5vcHRzLmZpbHRlckJ5Q29sdW1uID8gSlNPTi5zdHJpbmdpZnkodGhpcy5xdWVyeSkgOiB0aGlzLnF1ZXJ5O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0eXBlb2YgbG9jYWxTdG9yYWdlID09PSAndW5kZWZpbmVkJykgcmV0dXJuIHt9O1xuICByZXR1cm4gdGhpcy5vcHRzLnN0b3JhZ2UgPT09ICdsb2NhbCcgPyBsb2NhbFN0b3JhZ2UgOiBzZXNzaW9uU3RvcmFnZTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5kYXRhO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLm9wdHMudGVtcGxhdGVzKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gTWF0aC5jZWlsKHRoaXMuY291bnQgLyB0aGlzLmxpbWl0KTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4ge1xuICAgIGFsd2F5c1Nob3dQZXJQYWdlU2VsZWN0OiBmYWxzZSxcbiAgICBoaWRlUGVyUGFnZVNlbGVjdDogZmFsc2UsXG4gICAgZGF0ZUNvbHVtbnM6IFtdLFxuICAgIGxpc3RDb2x1bW5zOiB7fSxcbiAgICBkYXRlcGlja2VyT3B0aW9uczoge1xuICAgICAgbG9jYWxlOiB7XG4gICAgICAgIGNhbmNlbExhYmVsOiBcIkNsZWFyXCJcbiAgICAgIH1cbiAgICB9LFxuICAgIGRhdGVwaWNrZXJQZXJDb2x1bW5PcHRpb25zOiB7fSxcbiAgICBpbml0aWFsUGFnZTogMSxcbiAgICBwZXJQYWdlOiAxMCxcbiAgICBwZXJQYWdlVmFsdWVzOiBbMTAsIDI1LCA1MCwgMTAwXSxcbiAgICBncm91cEJ5OiBmYWxzZSxcbiAgICBjb2xsYXBzZUdyb3VwczogZmFsc2UsXG4gICAgZGVzdHJveUV2ZW50QnVzOiBmYWxzZSxcbiAgICBzZW5kRW1wdHlGaWx0ZXJzOiBmYWxzZSxcbiAgICBwYXJhbXM6IHt9LFxuICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgIGZpbHRlcmFibGU6IHRydWUsXG4gICAgZ3JvdXBNZXRhOiBbXSxcbiAgICBpbml0RmlsdGVyczoge30sXG4gICAgc2VuZEluaXRpYWxSZXF1ZXN0OiB0cnVlLFxuICAgIGN1c3RvbUZpbHRlcnM6IFtdLFxuICAgIHRlbXBsYXRlczoge30sXG4gICAgZGVib3VuY2U6IDI1MCxcbiAgICBkYXRlRm9ybWF0OiBcIkREL01NL1lZWVlcIixcbiAgICBkYXRlRm9ybWF0UGVyQ29sdW1uOiB7fSxcbiAgICB0b01vbWVudEZvcm1hdDogZmFsc2UsXG4gICAgc2tpbjogZmFsc2UsXG4gICAgY29sdW1uc0Rpc3BsYXk6IHt9LFxuICAgIGNvbHVtbnNEcm9wZG93bjogZmFsc2UsXG4gICAgdGV4dHM6IHtcbiAgICAgIGNvdW50OiBcIlNob3dpbmcge2Zyb219IHRvIHt0b30gb2Yge2NvdW50fSByZWNvcmRzfHtjb3VudH0gcmVjb3Jkc3xPbmUgcmVjb3JkXCIsXG4gICAgICBmaXJzdDogXCJGaXJzdFwiLFxuICAgICAgbGFzdDogXCJMYXN0XCIsXG4gICAgICBmaWx0ZXI6IFwiRmlsdGVyOlwiLFxuICAgICAgZmlsdGVyUGxhY2Vob2xkZXI6IFwiU2VhcmNoIHF1ZXJ5XCIsXG4gICAgICBsaW1pdDogXCJSZWNvcmRzOlwiLFxuICAgICAgcGFnZTogXCJQYWdlOlwiLFxuICAgICAgbm9SZXN1bHRzOiBcIk5vIG1hdGNoaW5nIHJlY29yZHNcIixcbiAgICAgIGZpbHRlckJ5OiBcIkZpbHRlciBieSB7Y29sdW1ufVwiLFxuICAgICAgbG9hZGluZzogXCJMb2FkaW5nLi4uXCIsXG4gICAgICBkZWZhdWx0T3B0aW9uOiBcIlNlbGVjdCB7Y29sdW1ufVwiLFxuICAgICAgY29sdW1uczogXCJDb2x1bW5zXCJcbiAgICB9LFxuICAgIHNvcnRJY29uOiB7XG4gICAgICBpczogXCJnbHlwaGljb24tc29ydFwiLFxuICAgICAgYmFzZTogXCJnbHlwaGljb25cIixcbiAgICAgIHVwOiBcImdseXBoaWNvbi1jaGV2cm9uLXVwXCIsXG4gICAgICBkb3duOiBcImdseXBoaWNvbi1jaGV2cm9uLWRvd25cIlxuICAgIH0sXG4gICAgc29ydGluZ0FsZ29yaXRobTogZnVuY3Rpb24gc29ydGluZ0FsZ29yaXRobShkYXRhLCBjb2x1bW4pIHtcbiAgICAgIHJldHVybiBkYXRhLnNvcnQodGhpcy5nZXRTb3J0Rm4oY29sdW1uKSk7XG4gICAgfSxcbiAgICBmaWx0ZXJBbGdvcml0aG06IHt9LFxuICAgIGN1c3RvbVNvcnRpbmc6IHt9LFxuICAgIG11bHRpU29ydGluZzoge30sXG4gICAgY2xpZW50TXVsdGlTb3J0aW5nOiB0cnVlLFxuICAgIHNlcnZlck11bHRpU29ydGluZzogZmFsc2UsXG4gICAgZmlsdGVyQnlDb2x1bW46IGZhbHNlLFxuICAgIGhpZ2hsaWdodE1hdGNoZXM6IGZhbHNlLFxuICAgIG9yZGVyQnk6IGZhbHNlLFxuICAgIGRlc2NPcmRlckNvbHVtbnM6IFtdLFxuICAgIGZvb3RlckhlYWRpbmdzOiBmYWxzZSxcbiAgICBoZWFkaW5nczoge30sXG4gICAgaGVhZGluZ3NUb29sdGlwczoge30sXG4gICAgcGFnaW5hdGlvbjoge1xuICAgICAgZHJvcGRvd246IGZhbHNlLFxuICAgICAgY2h1bms6IDEwLFxuICAgICAgZWRnZTogZmFsc2UsXG4gICAgICBhbGlnbjogXCJjZW50ZXJcIixcbiAgICAgIG5hdjogXCJmaXhlZFwiXG4gICAgfSxcbiAgICBjaGlsZFJvdzogZmFsc2UsXG4gICAgY2hpbGRSb3dUb2dnbGVyRmlyc3Q6IHRydWUsXG4gICAgc2hvd0NoaWxkUm93VG9nZ2xlcjogdHJ1ZSxcbiAgICB1bmlxdWVLZXk6IFwiaWRcIixcbiAgICByZXF1ZXN0RnVuY3Rpb246IGZhbHNlLFxuICAgIHJlcXVlc3RBZGFwdGVyOiBmdW5jdGlvbiByZXF1ZXN0QWRhcHRlcihkYXRhKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9LFxuICAgIHJlc3BvbnNlQWRhcHRlcjogZnVuY3Rpb24gcmVzcG9uc2VBZGFwdGVyKHJlc3ApIHtcbiAgICAgIHZhciBkYXRhID0gdGhpcy5nZXRSZXNwb25zZURhdGEocmVzcCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiBkYXRhLmRhdGEsXG4gICAgICAgIGNvdW50OiBkYXRhLmNvdW50XG4gICAgICB9O1xuICAgIH0sXG4gICAgcmVxdWVzdEtleXM6IHtcbiAgICAgIHF1ZXJ5OiBcInF1ZXJ5XCIsXG4gICAgICBsaW1pdDogXCJsaW1pdFwiLFxuICAgICAgb3JkZXJCeTogXCJvcmRlckJ5XCIsXG4gICAgICBhc2NlbmRpbmc6IFwiYXNjZW5kaW5nXCIsXG4gICAgICBwYWdlOiBcInBhZ2VcIixcbiAgICAgIGJ5Q29sdW1uOiBcImJ5Q29sdW1uXCJcbiAgICB9LFxuICAgIHJvd0NsYXNzQ2FsbGJhY2s6IGZhbHNlLFxuICAgIHByZXNlcnZlU3RhdGU6IGZhbHNlLFxuICAgIHNhdmVTdGF0ZTogZmFsc2UsXG4gICAgc3RvcmFnZTogXCJsb2NhbFwiLFxuICAgIGNvbHVtbnNDbGFzc2VzOiB7fSxcbiAgICBzdW1tYXJ5OiBmYWxzZSxcbiAgICBjYXB0aW9uOiBmYWxzZSxcbiAgICBjZWxsQ2xhc3Nlczoge30sXG4gICAgdmlzaWJsZUNvbHVtbnM6IGZhbHNlLFxuICAgIGhpZGRlbkNvbHVtbnM6IGZhbHNlLFxuICAgIHJlc2l6YWJsZUNvbHVtbnM6IHRydWUsXG4gICAgZWRpdGFibGVDb2x1bW5zOiBbXVxuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZGF0YSwgY3VzdG9tRmlsdGVycywgY3VzdG9tUXVlcmllcykge1xuICB2YXIgcGFzc2luZztcbiAgcmV0dXJuIGRhdGEuZmlsdGVyKGZ1bmN0aW9uIChyb3cpIHtcbiAgICBwYXNzaW5nID0gdHJ1ZTtcbiAgICBjdXN0b21GaWx0ZXJzLmZvckVhY2goZnVuY3Rpb24gKGZpbHRlcikge1xuICAgICAgdmFyIHZhbHVlID0gY3VzdG9tUXVlcmllc1tmaWx0ZXIubmFtZV07XG4gICAgICBpZiAodmFsdWUgJiYgIWZpbHRlci5jYWxsYmFjayhyb3csIHZhbHVlKSkgcGFzc2luZyA9IGZhbHNlO1xuICAgIH0pO1xuICAgIHJldHVybiBwYXNzaW5nO1xuICB9KTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciB2YWxpZE1vbWVudCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXMtdmFsaWQtbW9tZW50LW9iamVjdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgZGF0ZUZvcm1hdCkge1xuICBpZiAoIXZhbGlkTW9tZW50KHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICByZXR1cm4gdmFsdWUuZm9ybWF0KGRhdGVGb3JtYXQpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIGNvbHVtbiwgaCkge1xuICB2YXIgcXVlcnkgPSB0aGlzLm9wdHMuZmlsdGVyQnlDb2x1bW4gPyB0aGlzLnF1ZXJ5W2NvbHVtbl0gOiB0aGlzLnF1ZXJ5O1xuICBpZiAoIXF1ZXJ5KSByZXR1cm4gdmFsdWU7XG4gIHF1ZXJ5ID0gbmV3IFJlZ0V4cChcIihcIiArIGVzY2FwZVJlZ2V4KHF1ZXJ5KSArIFwiKVwiLCBcImlcIik7XG4gIHJldHVybiBoKFwic3BhblwiLCB7XG4gICAgXCJjbGFzc1wiOiAnVnVlVGFibGVzX19oaWdobGlnaHQnXG4gIH0sIG1hdGNoZXModmFsdWUsIHF1ZXJ5LCBoKSk7XG59O1xuXG5mdW5jdGlvbiBtYXRjaGVzKHZhbHVlLCBxdWVyeSwgaCkge1xuICB2YXIgcGllY2VzID0gU3RyaW5nKHZhbHVlKS5zcGxpdChxdWVyeSk7XG4gIHJldHVybiBwaWVjZXMubWFwKGZ1bmN0aW9uIChwaWVjZSkge1xuICAgIGlmIChxdWVyeS50ZXN0KHBpZWNlKSkge1xuICAgICAgcmV0dXJuIGgoXCJiXCIsIHt9LCBwaWVjZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBpZWNlO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlUmVnZXgocykge1xuICByZXR1cm4gdHlwZW9mIHMgPT09ICdzdHJpbmcnID8gcy5yZXBsYWNlKC9bLVxcL1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKSA6IHM7XG59XG5cbjsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIGNvbHVtbikge1xuICB2YXIgbGlzdCA9IHRoaXMubGlzdENvbHVtbnNPYmplY3RbY29sdW1uXTtcbiAgaWYgKHR5cGVvZiBsaXN0W3ZhbHVlXSA9PSAndW5kZWZpbmVkJykgcmV0dXJuIHZhbHVlO1xuICByZXR1cm4gbGlzdFt2YWx1ZV07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgLy8gbnVsbCBhbmQgdW5kZWZpbmVkIGFyZSBcImVtcHR5XCJcbiAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdHJ1ZTsgLy8gQXNzdW1lIGlmIGl0IGhhcyBhIGxlbmd0aCBwcm9wZXJ0eSB3aXRoIGEgbm9uLXplcm8gdmFsdWVcbiAgLy8gdGhhdCB0aGF0IHByb3BlcnR5IGlzIGNvcnJlY3QuXG5cbiAgaWYgKG9iai5sZW5ndGggPiAwKSByZXR1cm4gZmFsc2U7XG4gIGlmIChvYmoubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTsgLy8gT3RoZXJ3aXNlLCBkb2VzIGl0IGhhdmUgYW55IHByb3BlcnRpZXMgb2YgaXRzIG93bj9cblxuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsKSB7XG4gIHJldHVybiB2YWwgJiYgdHlwZW9mIHZhbC5pc1ZhbGlkID09ICdmdW5jdGlvbicgJiYgdmFsLmlzVmFsaWQoKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICB2YXIgY291bnQgPSAwO1xuXG4gIGZvciAodmFyIHByb3AgaW4gb2JqKSB7XG4gICAgdmFyIGlzRGF0ZVJhbmdlID0gX3R5cGVvZihvYmpbcHJvcF0pID09ICdvYmplY3QnO1xuICAgIGlmIChpc0RhdGVSYW5nZSB8fCBvYmpbcHJvcF0gJiYgKCFpc05hTihvYmpbcHJvcF0pIHx8IG9ialtwcm9wXS50cmltKCkpKSBjb3VudCsrO1xuICB9XG5cbiAgcmV0dXJuIGNvdW50O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFibGUsIGhhc0NoaWxkUm93LCBpc0NoaWxkUm93VG9nZ2xlckZpcnN0KSB7XG4gIHZhciByb3cgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZShcInRyXCIpWzBdLFxuICAgICAgY29scyA9IHJvdyA/IHJvdy5jaGlsZHJlbiA6IHVuZGVmaW5lZDtcbiAgaWYgKCFjb2xzKSByZXR1cm47XG4gIHRhYmxlLnN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcbiAgdmFyIHRhYmxlSGVpZ2h0ID0gdGFibGUub2Zmc2V0SGVpZ2h0O1xuICB2YXIgaSA9IGhhc0NoaWxkUm93ICYmIGlzQ2hpbGRSb3dUb2dnbGVyRmlyc3QgPyAxIDogMDtcbiAgdmFyIHRpbGwgPSBoYXNDaGlsZFJvdyAmJiAhaXNDaGlsZFJvd1RvZ2dsZXJGaXJzdCA/IGNvbHMubGVuZ3RoIC0gMiA6IGNvbHMubGVuZ3RoO1xuXG4gIGZvciAoOyBpIDwgdGlsbDsgaSsrKSB7XG4gICAgdmFyIGRpdiA9IGNyZWF0ZURpdih0YWJsZUhlaWdodCk7XG4gICAgZGl2LmNsYXNzTmFtZSA9IFwicmVzaXplLWhhbmRsZVwiO1xuICAgIGNvbHNbaV0uYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICBjb2xzW2ldLnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICAgIHNldExpc3RlbmVycyhkaXYpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0TGlzdGVuZXJzKGRpdikge1xuICAgIHZhciBwYWdlWCwgY3VyQ29sLCBueHRDb2wsIGN1ckNvbFdpZHRoLCBueHRDb2xXaWR0aDtcbiAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGN1ckNvbCA9IGUudGFyZ2V0LnBhcmVudEVsZW1lbnQ7XG4gICAgICBueHRDb2wgPSBjdXJDb2wubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgcGFnZVggPSBlLnBhZ2VYO1xuICAgICAgdmFyIHBhZGRpbmcgPSBwYWRkaW5nRGlmZihjdXJDb2wpO1xuICAgICAgY3VyQ29sV2lkdGggPSBjdXJDb2wub2Zmc2V0V2lkdGggLSBwYWRkaW5nO1xuICAgICAgaWYgKG54dENvbCkgbnh0Q29sV2lkdGggPSBueHRDb2wub2Zmc2V0V2lkdGggLSBwYWRkaW5nO1xuICAgIH0pOyAvLyBkaXYuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3ZlclwiLCBmdW5jdGlvbihlKSB7XG4gICAgLy8gICBlLnRhcmdldC5zdHlsZS5ib3JkZXJSaWdodCA9IFwiMnB4IHNvbGlkICMwMDAwZmZcIjtcbiAgICAvLyB9KTtcblxuICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKFwibW91c2VvdXRcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGUudGFyZ2V0LnN0eWxlLmJvcmRlclJpZ2h0ID0gXCJcIjtcbiAgICB9KTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoY3VyQ29sKSB7XG4gICAgICAgIHZhciBkaWZmWCA9IGUucGFnZVggLSBwYWdlWDtcbiAgICAgICAgaWYgKG54dENvbCkgbnh0Q29sLnN0eWxlLndpZHRoID0gbnh0Q29sV2lkdGggLSBkaWZmWCArIFwicHhcIjtcbiAgICAgICAgY3VyQ29sLnN0eWxlLndpZHRoID0gY3VyQ29sV2lkdGggKyBkaWZmWCArIFwicHhcIjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGN1ckNvbCA9IHVuZGVmaW5lZDtcbiAgICAgIG54dENvbCA9IHVuZGVmaW5lZDtcbiAgICAgIHBhZ2VYID0gdW5kZWZpbmVkO1xuICAgICAgbnh0Q29sV2lkdGggPSB1bmRlZmluZWQ7XG4gICAgICBjdXJDb2xXaWR0aCA9IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZURpdihoZWlnaHQpIHtcbiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBkaXYuc3R5bGUudG9wID0gMDtcbiAgICBkaXYuc3R5bGUucmlnaHQgPSAwO1xuICAgIGRpdi5zdHlsZS53aWR0aCA9IFwiNXB4XCI7XG4gICAgZGl2LnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAgIGRpdi5zdHlsZS5jdXJzb3IgPSBcImNvbC1yZXNpemVcIjtcbiAgICBkaXYuc3R5bGUudXNlclNlbGVjdCA9IFwibm9uZVwiO1xuICAgIGRpdi5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyBcInB4XCI7XG4gICAgcmV0dXJuIGRpdjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhZGRpbmdEaWZmKGNvbCkge1xuICAgIGlmIChnZXRTdHlsZVZhbChjb2wsIFwiYm94LXNpemluZ1wiKSA9PSBcImJvcmRlci1ib3hcIikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgdmFyIHBhZExlZnQgPSBnZXRTdHlsZVZhbChjb2wsIFwicGFkZGluZy1sZWZ0XCIpO1xuICAgIHZhciBwYWRSaWdodCA9IGdldFN0eWxlVmFsKGNvbCwgXCJwYWRkaW5nLXJpZ2h0XCIpO1xuICAgIHJldHVybiBwYXJzZUludChwYWRMZWZ0KSArIHBhcnNlSW50KHBhZFJpZ2h0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFN0eWxlVmFsKGVsbSwgY3NzKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsbSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShjc3MpO1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBfZGVmYXVsdDtcblxuZnVuY3Rpb24gX2RlZmF1bHQoc3RyKSB7XG4gIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfYnVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9idXNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxudmFyIENsaWVudFRhYmxlID0gcmVxdWlyZSgnLi92LWNsaWVudC10YWJsZScpO1xuXG52YXIgU2VydmVyVGFibGUgPSByZXF1aXJlKCcuL3Ytc2VydmVyLXRhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDbGllbnRUYWJsZTogQ2xpZW50VGFibGUsXG4gIFNlcnZlclRhYmxlOiBTZXJ2ZXJUYWJsZSxcbiAgRXZlbnQ6IF9idXNbXCJkZWZhdWx0XCJdXG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZGF0YS5tYXAoZnVuY3Rpb24gKHJvdykge1xuICAgICAgZm9yICh2YXIgY29sdW1uIGluIHJvdykge1xuICAgICAgICBpZiAoX3RoaXMuc291cmNlID09PSAnY2xpZW50Jykgcm93W2NvbHVtbl0gPSBfdGhpcy5mb3JtYXREYXRlKHJvd1tjb2x1bW5dLCBfdGhpcy5kYXRlRm9ybWF0KGNvbHVtbikpO1xuXG4gICAgICAgIGlmIChfdGhpcy5pc0xpc3RGaWx0ZXIoY29sdW1uKSAmJiAhX3RoaXMub3B0cy50ZW1wbGF0ZXNbY29sdW1uXSAmJiAhX3RoaXMuJHNjb3BlZFNsb3RzW2NvbHVtbl0pIHtcbiAgICAgICAgICByb3dbY29sdW1uXSA9IF90aGlzLm9wdGlvblRleHQocm93W2NvbHVtbl0sIGNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJvdztcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJ2dWUtdGFibGVzLTI6IG5vbi1pdGVyYWJsZSBkYXRhIHByb3BlcnR5LiBFeHBlY3RlZCBhcnJheSwgZ290IFwiLmNvbmNhdChfdHlwZW9mKGRhdGEpLCBcIi4gTWFrZSBzdXJlIHRoYXQgeW91ciByZXNwb25zZSBjb25mb3JtcyB0byB0aGUgZXhwZWN0ZWQgZm9ybWF0LCBvciB1c2UgdGhlICdyZXNwb25zZUFkYXB0ZXInIG9wdGlvbiB0byBtYXRjaCB0aGUgY3VycmVudGx5IHJldHVybmVkIGZvcm1hdFwiKSk7XG4gICAgY29uc29sZS5lcnJvcignRGF0YSBlcXVhbHMnLCBkYXRhKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29sdW1uLCByb3cpIHtcbiAgaWYgKCF0aGlzLm9wdHMuY2VsbENsYXNzZXNbY29sdW1uXSkgcmV0dXJuICcnO1xuICByZXR1cm4gdGhpcy5vcHRzLmNlbGxDbGFzc2VzW2NvbHVtbl0uZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW0uY29uZGl0aW9uKHJvdyk7XG4gIH0pLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgIHJldHVybiBpdGVtW1wiY2xhc3NcIl07XG4gIH0pLmpvaW4oJyAnKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJvd0lkKSB7XG4gIHJldHVybiB0aGlzLm9wZW5DaGlsZFJvd3MuaW5jbHVkZXMocm93SWQpID8gJ1Z1ZVRhYmxlc19fY2hpbGQtcm93LXRvZ2dsZXItLW9wZW4nIDogJ1Z1ZVRhYmxlc19fY2hpbGQtcm93LXRvZ2dsZXItLWNsb3NlZCc7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG52YXIgb2JqZWN0X2ZpbGxlZF9rZXlzX2NvdW50ID0gcmVxdWlyZSgnLi4vaGVscGVycy9vYmplY3QtZmlsbGVkLWtleXMtY291bnQnKTtcblxudmFyIGlzX3ZhbGlkX21vbWVudF9vYmplY3QgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzLXZhbGlkLW1vbWVudC1vYmplY3QnKTtcblxudmFyIGZpbHRlckJ5Q3VzdG9tRmlsdGVycyA9IHJlcXVpcmUoJy4uL2ZpbHRlcnMvY3VzdG9tLWZpbHRlcnMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZGF0YSwgZSkge1xuICBpZiAoZSkge1xuICAgIHZhciBfcXVlcnkgPSB0aGlzLnF1ZXJ5O1xuICAgIHRoaXMuc2V0UGFnZSgxLCB0cnVlKTtcbiAgICB2YXIgbmFtZSA9IHRoaXMuZ2V0TmFtZShlLnRhcmdldC5uYW1lKTtcbiAgICB2YXIgdmFsdWUgPSBfdHlwZW9mKGUudGFyZ2V0LnZhbHVlKSA9PT0gJ29iamVjdCcgPyBlLnRhcmdldC52YWx1ZSA6ICcnICsgZS50YXJnZXQudmFsdWU7XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgX3F1ZXJ5W25hbWVdID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9xdWVyeSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMudnVleCA/IHRoaXMuY29tbWl0KCdTRVRfRklMVEVSJywgX3F1ZXJ5KSA6IHRoaXMucXVlcnkgPSBfcXVlcnk7XG4gICAgdGhpcy51cGRhdGVTdGF0ZSgncXVlcnknLCBfcXVlcnkpO1xuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2goJ2ZpbHRlcicsIHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZGlzcGF0Y2goXCJmaWx0ZXI6OlwiLmNvbmNhdChuYW1lKSwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc3BhdGNoKCdmaWx0ZXInLCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHF1ZXJ5ID0gdGhpcy5xdWVyeTtcbiAgdmFyIHRvdGFsUXVlcmllcyA9ICFxdWVyeSA/IDAgOiAxO1xuICBpZiAoIXRoaXMub3B0cykgcmV0dXJuIGRhdGE7XG5cbiAgaWYgKHRoaXMub3B0cy5maWx0ZXJCeUNvbHVtbikge1xuICAgIHRvdGFsUXVlcmllcyA9IG9iamVjdF9maWxsZWRfa2V5c19jb3VudChxdWVyeSk7XG4gIH1cblxuICB2YXIgdmFsdWU7XG4gIHZhciBmb3VuZDtcbiAgdmFyIGN1cnJlbnRRdWVyeTtcbiAgdmFyIGRhdGVGb3JtYXQ7XG4gIHZhciBmaWx0ZXJCeURhdGU7XG4gIHZhciBpc0xpc3RGaWx0ZXI7XG4gIHZhciBkYXRhID0gZmlsdGVyQnlDdXN0b21GaWx0ZXJzKGRhdGEsIHRoaXMub3B0cy5jdXN0b21GaWx0ZXJzLCB0aGlzLmN1c3RvbVF1ZXJpZXMpO1xuICBpZiAoIXRvdGFsUXVlcmllcykgcmV0dXJuIGRhdGE7XG4gIHJldHVybiBkYXRhLmZpbHRlcihmdW5jdGlvbiAocm93LCBpbmRleCkge1xuICAgIGZvdW5kID0gMDtcbiAgICB0aGlzLmZpbHRlcmFibGVDb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgZmlsdGVyQnlEYXRlID0gdGhpcy5vcHRzLmRhdGVDb2x1bW5zLmluZGV4T2YoY29sdW1uKSA+IC0xICYmIHRoaXMub3B0cy5maWx0ZXJCeUNvbHVtbjtcbiAgICAgIGlzTGlzdEZpbHRlciA9IHRoaXMuaXNMaXN0RmlsdGVyKGNvbHVtbikgJiYgdGhpcy5vcHRzLmZpbHRlckJ5Q29sdW1uO1xuICAgICAgZGF0ZUZvcm1hdCA9IHRoaXMuZGF0ZUZvcm1hdChjb2x1bW4pO1xuICAgICAgdmFsdWUgPSB0aGlzLl9nZXRWYWx1ZShyb3csIGNvbHVtbik7XG5cbiAgICAgIGlmIChpc192YWxpZF9tb21lbnRfb2JqZWN0KHZhbHVlKSAmJiAhZmlsdGVyQnlEYXRlKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuZm9ybWF0KGRhdGVGb3JtYXQpO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50UXVlcnkgPSB0aGlzLm9wdHMuZmlsdGVyQnlDb2x1bW4gPyBxdWVyeVtjb2x1bW5dIDogcXVlcnk7XG4gICAgICBjdXJyZW50UXVlcnkgPSBzZXRDdXJyZW50UXVlcnkoY3VycmVudFF1ZXJ5KTtcblxuICAgICAgaWYgKGN1cnJlbnRRdWVyeSkge1xuICAgICAgICBpZiAodGhpcy5vcHRzLmZpbHRlckFsZ29yaXRobVtjb2x1bW5dKSB7XG4gICAgICAgICAgaWYgKHRoaXMub3B0cy5maWx0ZXJBbGdvcml0aG1bY29sdW1uXShyb3csIHRoaXMub3B0cy5maWx0ZXJCeUNvbHVtbiA/IHF1ZXJ5W2NvbHVtbl0gOiBxdWVyeSkpIGZvdW5kKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGZvdW5kTWF0Y2goY3VycmVudFF1ZXJ5LCB2YWx1ZSwgaXNMaXN0RmlsdGVyKSkgZm91bmQrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0uYmluZCh0aGlzKSk7XG4gICAgcmV0dXJuIGZvdW5kID49IHRvdGFsUXVlcmllcztcbiAgfS5iaW5kKHRoaXMpKTtcbn07XG5cbmZ1bmN0aW9uIHNldEN1cnJlbnRRdWVyeShxdWVyeSkge1xuICBpZiAoIXF1ZXJ5KSByZXR1cm4gJyc7XG4gIGlmICh0eXBlb2YgcXVlcnkgPT0gJ3N0cmluZycpIHJldHVybiBxdWVyeS50b0xvd2VyQ2FzZSgpOyAvLyBEYXRlIFJhbmdlXG5cbiAgcmV0dXJuIHF1ZXJ5O1xufVxuXG5mdW5jdGlvbiBmb3VuZE1hdGNoKHF1ZXJ5LCB2YWx1ZSwgaXNMaXN0RmlsdGVyKSB7XG4gIGlmIChbJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbiddLmluZGV4T2YoX3R5cGVvZih2YWx1ZSkpID4gLTEpIHtcbiAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSkudG9Mb3dlckNhc2UoKTtcbiAgfSAvLyBMaXN0IEZpbHRlclxuXG5cbiAgaWYgKGlzTGlzdEZpbHRlcikge1xuICAgIHJldHVybiB2YWx1ZSA9PSBxdWVyeTtcbiAgfSAvL1RleHQgRmlsdGVyXG5cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZS5pbmRleE9mKHF1ZXJ5KSA+IC0xO1xuICB9IC8vIERhdGUgcmFuZ2VcblxuXG4gIGlmIChpc192YWxpZF9tb21lbnRfb2JqZWN0KHZhbHVlKSkge1xuICAgIHZhciBzdGFydCA9IG1vbWVudChxdWVyeS5zdGFydCwgJ1lZWVktTU0tREQgSEg6bW06c3MnKTtcbiAgICB2YXIgZW5kID0gbW9tZW50KHF1ZXJ5LmVuZCwgJ1lZWVktTU0tREQgSEg6bW06c3MnKTtcbiAgICByZXR1cm4gdmFsdWUgPj0gc3RhcnQgJiYgdmFsdWUgPD0gZW5kO1xuICB9XG5cbiAgaWYgKF90eXBlb2YodmFsdWUpID09PSAnb2JqZWN0Jykge1xuICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgaWYgKGZvdW5kTWF0Y2gocXVlcnksIHZhbHVlW2tleV0pKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdmFsdWUgPj0gc3RhcnQgJiYgdmFsdWUgPD0gZW5kO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgdmFyIGMgPSB0aGlzLm9wdHMuY29sdW1uc0NsYXNzZXM7XG4gIHJldHVybiBjLmhhc093blByb3BlcnR5KGNvbHVtbikgPyBjW2NvbHVtbl0gOiAnJztcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICB2YXIgdXNlck11bHRpU29ydCA9IE9iamVjdC5rZXlzKHRoaXMudXNlck11bHRpU29ydGluZyk7XG4gIGlmICghdXNlck11bHRpU29ydC5sZW5ndGggfHwgdGhpcy5vcmRlckJ5LmNvbHVtbiA9PT0gY29sdW1uKSByZXR1cm4gdGhpcy5vcmRlckJ5LmNvbHVtbiA9PT0gY29sdW1uO1xuICByZXR1cm4gISF0aGlzLnVzZXJNdWx0aVNvcnRpbmdbdXNlck11bHRpU29ydFswXV0uZmlsdGVyKGZ1bmN0aW9uIChjb2wpIHtcbiAgICByZXR1cm4gY29sLmNvbHVtbiA9PSBjb2x1bW47XG4gIH0pLmxlbmd0aDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICBpZiAodGhpcy5vcHRzLmRhdGVGb3JtYXRQZXJDb2x1bW4uaGFzT3duUHJvcGVydHkoY29sdW1uKSkge1xuICAgIHJldHVybiB0aGlzLm9wdHMuZGF0ZUZvcm1hdFBlckNvbHVtbltjb2x1bW5dO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMub3B0cy5kYXRlRm9ybWF0O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29sdW1uLCBhc2NlbmRpbmcpIHtcbiAgdmFyIG11bHRpSW5kZXggPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IC0xO1xuICB2YXIgc29ydCA9IHRoaXMuZGVmYXVsdFNvcnQ7XG4gIHZhciBtdWx0aVNvcnQgPSB0aGlzLnVzZXJNdWx0aVNvcnRpbmdbdGhpcy5jdXJyZW50bHlTb3J0aW5nLmNvbHVtbl0gPyB0aGlzLnVzZXJNdWx0aVNvcnRpbmdbdGhpcy5jdXJyZW50bHlTb3J0aW5nLmNvbHVtbl0gOiB0aGlzLm9wdHMubXVsdGlTb3J0aW5nW3RoaXMuY3VycmVudGx5U29ydGluZy5jb2x1bW5dO1xuICB2YXIgYXNjID0gdGhpcy5jdXJyZW50bHlTb3J0aW5nLmFzY2VuZGluZztcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICB2YXIgYVZhbCA9IHNlbGYuX2dldFZhbHVlKGEsIGNvbHVtbikgfHwgJyc7XG4gICAgdmFyIGJWYWwgPSBzZWxmLl9nZXRWYWx1ZShiLCBjb2x1bW4pIHx8ICcnO1xuICAgIHZhciBkaXIgPSBhc2NlbmRpbmcgPyAxIDogLTE7XG4gICAgdmFyIHNlY29uZGFyeUFzYztcbiAgICBpZiAodHlwZW9mIGFWYWwgPT09ICdzdHJpbmcnKSBhVmFsID0gYVZhbC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh0eXBlb2YgYlZhbCA9PT0gJ3N0cmluZycpIGJWYWwgPSBiVmFsLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoYVZhbCA9PT0gYlZhbCAmJiBtdWx0aVNvcnQgJiYgbXVsdGlTb3J0W211bHRpSW5kZXggKyAxXSkge1xuICAgICAgdmFyIHNvcnREYXRhID0gbXVsdGlTb3J0W211bHRpSW5kZXggKyAxXTtcblxuICAgICAgaWYgKHR5cGVvZiBzb3J0RGF0YS5hc2NlbmRpbmcgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHNlY29uZGFyeUFzYyA9IHNvcnREYXRhLmFzY2VuZGluZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlY29uZGFyeUFzYyA9IHNvcnREYXRhLm1hdGNoRGlyID8gYXNjIDogIWFzYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNvcnQoc29ydERhdGEuY29sdW1uLCBzZWNvbmRhcnlBc2MsIG11bHRpSW5kZXggKyAxKShhLCBiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYVZhbCA+IGJWYWwgPyBkaXIgOiAtZGlyO1xuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9idXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi9idXNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXZlbnQsIHBheWxvYWQpIHtcbiAgaWYgKHRoaXMudnVleCkge1xuICAgIGlmIChldmVudC5zcGxpdCgnOjonKS5sZW5ndGggPiAxKSByZXR1cm47XG4gICAgdGhpcy5jb21taXQoZXZlbnQudG9VcHBlckNhc2UoKS5yZXBsYWNlKCctJywgJ18nKSwgcGF5bG9hZCk7XG4gIH1cblxuICB0aGlzLiRlbWl0KGV2ZW50LCBwYXlsb2FkKTtcblxuICBfYnVzW1wiZGVmYXVsdFwiXS4kZW1pdChcInZ1ZS10YWJsZXMuXCIuY29uY2F0KGV2ZW50KSwgcGF5bG9hZCk7XG5cbiAgaWYgKHRoaXMubmFtZSkge1xuICAgIF9idXNbXCJkZWZhdWx0XCJdLiRlbWl0KFwidnVlLXRhYmxlcy5cIi5jb25jYXQodGhpcy5uYW1lLCBcIi5cIikuY29uY2F0KGV2ZW50KSwgcGF5bG9hZCk7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRleHQsIHJlcGxhY2VtZW50cykge1xuICBpZiAoIXRoaXMub3B0cy50ZXh0cykgcmV0dXJuICcnO1xuICB2YXIgdGV4dCA9IHRoaXMub3B0cy50ZXh0c1t0ZXh0XTtcbiAgaWYgKHJlcGxhY2VtZW50cykgZm9yICh2YXIga2V5IGluIHJlcGxhY2VtZW50cykge1xuICAgIC8vIGNvbnNvbGUubG9nKGtleSlcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCd7JyArIGtleSArICd9JywgcmVwbGFjZW1lbnRzW2tleV0pO1xuICB9XG4gIHJldHVybiB0ZXh0O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29sdW1uKSB7XG4gIGlmICghdGhpcy5vcHRzLmZpbHRlcmFibGUpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzLm9wdHMuZmlsdGVyYWJsZSA9PSAnYm9vbGVhbicgJiYgdGhpcy5vcHRzLmZpbHRlcmFibGUgfHwgdGhpcy5vcHRzLmZpbHRlcmFibGUuaW5kZXhPZihjb2x1bW4pID4gLTE7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoLCByb3csIGluZGV4KSB7XG4gIC8vIHNjb3BlZCBzbG90XG4gIGlmICh0aGlzLiRzY29wZWRTbG90cy5jaGlsZF9yb3cpIHJldHVybiB0aGlzLiRzY29wZWRTbG90cy5jaGlsZF9yb3coe1xuICAgIHJvdzogcm93LFxuICAgIGluZGV4OiBpbmRleFxuICB9KTtcbiAgdmFyIGNoaWxkUm93ID0gdGhpcy5vcHRzLmNoaWxkUm93OyAvLyBmdW5jdGlvblxuXG4gIGlmICh0eXBlb2YgY2hpbGRSb3cgPT09ICdmdW5jdGlvbicpIHJldHVybiBjaGlsZFJvdy5hcHBseSh0aGlzLCBbaCwgcm93XSk7IC8vIGNvbXBvbmVudFxuXG4gIHJldHVybiBoKGNoaWxkUm93LCB7XG4gICAgYXR0cnM6IHtcbiAgICAgIGRhdGE6IHJvd1xuICAgIH1cbiAgfSk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgcmV0dXJuICd2Zl9fJyArIGNvbHVtbi5zcGxpdCgnLicpLmpvaW4oJ0BAQCcpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxudmFyIG1lcmdlID0gcmVxdWlyZSgnbWVyZ2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocHJvbWlzZU9ubHkpIHtcbiAgdmFyIF9kYXRhO1xuXG4gIHZhciBhZGRpdGlvbmFsRGF0YSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gIHZhciBlbWl0TG9hZGluZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogdHJ1ZTtcbiAgdmFyIGtleXMgPSB0aGlzLm9wdHMucmVxdWVzdEtleXM7XG4gIHZhciBkYXRhID0gKF9kYXRhID0ge30sIF9kZWZpbmVQcm9wZXJ0eShfZGF0YSwga2V5cy5xdWVyeSwgdGhpcy5maWx0ZXJlZFF1ZXJ5KSwgX2RlZmluZVByb3BlcnR5KF9kYXRhLCBrZXlzLmxpbWl0LCB0aGlzLmxpbWl0KSwgX2RlZmluZVByb3BlcnR5KF9kYXRhLCBrZXlzLmFzY2VuZGluZywgdGhpcy5vcmRlckJ5LmFzY2VuZGluZyA/IDEgOiAwKSwgX2RlZmluZVByb3BlcnR5KF9kYXRhLCBrZXlzLnBhZ2UsIHRoaXMucGFnZSksIF9kZWZpbmVQcm9wZXJ0eShfZGF0YSwga2V5cy5ieUNvbHVtbiwgdGhpcy5vcHRzLmZpbHRlckJ5Q29sdW1uID8gMSA6IDApLCBfZGF0YSk7XG4gIGlmICh0aGlzLm9yZGVyQnkuaGFzT3duUHJvcGVydHkoJ2NvbHVtbicpICYmIHRoaXMub3JkZXJCeS5jb2x1bW4pIGRhdGFba2V5cy5vcmRlckJ5XSA9IHRoaXMub3JkZXJCeS5jb2x1bW47XG4gIGRhdGEgPSBtZXJnZShkYXRhLCB0aGlzLm9wdHMucGFyYW1zLCB0aGlzLmN1c3RvbVF1ZXJpZXMsIGFkZGl0aW9uYWxEYXRhKTtcblxuICBpZiAodGhpcy5oYXNNdWx0aVNvcnQgJiYgdGhpcy5vcmRlckJ5LmNvbHVtbiAmJiB0aGlzLnVzZXJNdWx0aVNvcnRpbmdbdGhpcy5vcmRlckJ5LmNvbHVtbl0pIHtcbiAgICBkYXRhLm11bHRpU29ydCA9IHRoaXMudXNlck11bHRpU29ydGluZ1t0aGlzLm9yZGVyQnkuY29sdW1uXTtcbiAgfVxuXG4gIGRhdGEgPSB0aGlzLm9wdHMucmVxdWVzdEFkYXB0ZXIoZGF0YSk7XG5cbiAgaWYgKGVtaXRMb2FkaW5nKSB7XG4gICAgdGhpcy5kaXNwYXRjaCgnbG9hZGluZycsIGRhdGEpO1xuICB9XG5cbiAgdmFyIHByb21pc2UgPSB0aGlzLnNlbmRSZXF1ZXN0KGRhdGEpO1xuICBpZiAocHJvbWlzZU9ubHkpIHJldHVybiBwcm9taXNlO1xuICByZXR1cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgIHJldHVybiB0aGlzLnNldERhdGEocmVzcG9uc2UpO1xuICB9LmJpbmQodGhpcykpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgaWYgKHRoaXMuJHNjb3BlZFNsb3RzICYmIHRoaXMuJHNjb3BlZFNsb3RzWydfX2dyb3VwX21ldGEnXSkge1xuICAgIHZhciBkYXRhID0gdGhpcy5vcHRzLmdyb3VwTWV0YS5maW5kKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHJldHVybiB2YWwudmFsdWUgPT09IHZhbHVlO1xuICAgIH0pO1xuICAgIGlmICghZGF0YSkgcmV0dXJuICcnO1xuICAgIHJldHVybiB0aGlzLiRzY29wZWRTbG90c1snX19ncm91cF9tZXRhJ10oZGF0YSk7XG4gIH1cblxuICByZXR1cm4gJyc7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgaCkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykgcmV0dXJuICcnO1xuICB2YXIgZGVyaXZlZEhlYWRpbmdUb29sdGlwID0gJyc7XG4gIGlmICghdGhpcy5vcHRzLmhlYWRpbmdzVG9vbHRpcHMuaGFzT3duUHJvcGVydHkodmFsdWUpKSByZXR1cm4gZGVyaXZlZEhlYWRpbmdUb29sdGlwO1xuXG4gIGlmICh0eXBlb2YgdGhpcy5vcHRzLmhlYWRpbmdzVG9vbHRpcHNbdmFsdWVdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKGgpIHJldHVybiB0aGlzLm9wdHMuaGVhZGluZ3NUb29sdGlwc1t2YWx1ZV0uY2FsbCh0aGlzLiRwYXJlbnQsIGgpO1xuICAgIHJldHVybiBkZXJpdmVkSGVhZGluZ1Rvb2x0aXA7XG4gIH1cblxuICByZXR1cm4gdGhpcy5vcHRzLmhlYWRpbmdzVG9vbHRpcHNbdmFsdWVdO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF91Y2ZpcnN0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vaGVscGVycy91Y2ZpcnN0XCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSByZXR1cm4gJyc7XG5cbiAgaWYgKHR5cGVvZiB0aGlzLiRzbG90c1tcImhfX1wiLmNvbmNhdCh2YWx1ZSldICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB0aGlzLiRzbG90c1tcImhfX1wiLmNvbmNhdCh2YWx1ZSldO1xuICB9XG5cbiAgdmFyIGRlcml2ZWRIZWFkaW5nID0gKDAsIF91Y2ZpcnN0W1wiZGVmYXVsdFwiXSkodmFsdWUuc3BsaXQoXCJfXCIpLmpvaW4oXCIgXCIpKTtcbiAgaWYgKCF0aGlzLm9wdHMuaGVhZGluZ3MuaGFzT3duUHJvcGVydHkodmFsdWUpKSByZXR1cm4gZGVyaXZlZEhlYWRpbmc7XG5cbiAgaWYgKHR5cGVvZiB0aGlzLm9wdHMuaGVhZGluZ3NbdmFsdWVdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKGgpIHJldHVybiB0aGlzLm9wdHMuaGVhZGluZ3NbdmFsdWVdLmNhbGwodGhpcy4kcGFyZW50LCBoKTtcbiAgICByZXR1cm4gZGVyaXZlZEhlYWRpbmc7XG4gIH1cblxuICByZXR1cm4gdGhpcy5vcHRzLmhlYWRpbmdzW3ZhbHVlXTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICBpZiAodHlwZW9mIHRoaXMub3B0cy5pbml0RmlsdGVyc1tjb2x1bW5dICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB0aGlzLm9wdHMuaW5pdEZpbHRlcnNbY29sdW1uXTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdGhpcy5xdWVyeVtjb2x1bW5dICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnF1ZXJ5W2NvbHVtbl0uc3RhcnQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnQ6IG1vbWVudCh0aGlzLnF1ZXJ5W2NvbHVtbl0uc3RhcnQsICdZWVlZLU1NLUREIEhIOm1tOnNzJyksXG4gICAgICBlbmQ6IG1vbWVudCh0aGlzLnF1ZXJ5W2NvbHVtbl0uZW5kLCAnWVlZWS1NTS1ERCBISDptbTpzcycpXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFuYW1lKSByZXR1cm4gbmFtZTtcbiAgbmFtZSA9IG5hbWUuc3BsaXQoJ19fJyk7XG4gIG5hbWUuc2hpZnQoKTtcbiAgcmV0dXJuIG5hbWUuam9pbignX18nKS5zcGxpdCgnQEBAJykuam9pbignLicpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIHJvd3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IG51bGw7XG5cbiAgaWYgKCF0aGlzLm9wdHMuY2hpbGRSb3cgfHwgdHlwZW9mIHRoaXMub3B0cy5jaGlsZFJvdyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFcnJvcigndnVlLXRhYmxlcy0yOiBDaGlsZCByb3cgdW5kZWZpbmVkIG9yIG5vdCBhIGNvbXBvbmVudCcpO1xuICB9XG5cbiAgdmFyIFJvd3MgPSByb3dzID8gdGhpcy5vcGVuQ2hpbGRSb3dzLmZpbHRlcihmdW5jdGlvbiAocm93KSB7XG4gICAgcmV0dXJuIHJvd3MuaW5jbHVkZXMocm93KTtcbiAgfSkgOiB0aGlzLm9wZW5DaGlsZFJvd3M7XG4gIGlmICghUm93cy5sZW5ndGgpIHJldHVybiBbXTtcbiAgdmFyIGNvbXBvbmVudHMgPSB0aGlzLiRjaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGNoaWxkLiRvcHRpb25zLm5hbWUgPT09ICdDaGlsZFJvdycgJiYgUm93cy5pbmNsdWRlcyhjaGlsZC5kYXRhW190aGlzLm9wdHMudW5pcXVlS2V5XSk7XG4gIH0pO1xuICByZXR1cm4gY29tcG9uZW50cztcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gIGlmICh0eXBlb2YgYXhpb3MgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgcmV0dXJuIHJlc3BvbnNlO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29sdW1uKSB7XG4gIHZhciBhc2NlbmRpbmcgPSB0aGlzLm9yZGVyQnkuYXNjZW5kaW5nO1xuICB0aGlzLmN1cnJlbnRseVNvcnRpbmcgPSB7XG4gICAgY29sdW1uOiBjb2x1bW4sXG4gICAgYXNjZW5kaW5nOiBhc2NlbmRpbmdcbiAgfTtcbiAgaWYgKHR5cGVvZiB0aGlzLm9wdHMuY3VzdG9tU29ydGluZ1tjb2x1bW5dID09ICd1bmRlZmluZWQnKSByZXR1cm4gdGhpcy5kZWZhdWx0U29ydChjb2x1bW4sIGFzY2VuZGluZyk7XG4gIHJldHVybiB0aGlzLm9wdHMuY3VzdG9tU29ydGluZ1tjb2x1bW5dKGFzY2VuZGluZyk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbikge1xuICBpZiAoY29sdW1uLmluZGV4T2YoJy4nKSA9PT0gLTEpIHJldHVybiByb3dbY29sdW1uXTtcbiAgdmFyIHAgPSBjb2x1bW4uc3BsaXQoJy4nKTtcbiAgdmFyIHZhbHVlID0gcm93W3BbMF1dO1xuICBpZiAoIXZhbHVlKSByZXR1cm4gJyc7XG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFsdWUgPSB2YWx1ZVtwW2ldXTsgLy8gSWYgdGhlIG5lc3RlZCBzdHJ1Y3R1cmUgZG9lc24ndCBleGlzdCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nXG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykgcmV0dXJuICcnO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIGludGVyc2VjdGlvbiA9IHJlcXVpcmUoJ2FycmF5LWludGVyc2VjdCcpW1wiZGVmYXVsdFwiXTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBvcHRzID0gdGhpcy5vcHRzO1xuICByZXR1cm4gb3B0cy5kYXRlQ29sdW1ucy5sZW5ndGggJiYgb3B0cy5maWx0ZXJCeUNvbHVtbiAmJiAodHlwZW9mIG9wdHMuZmlsdGVyYWJsZSA9PSAnYm9vbGVhbicgJiYgb3B0cy5maWx0ZXJhYmxlIHx8IF90eXBlb2Yob3B0cy5maWx0ZXJhYmxlKSA9PSAnb2JqZWN0JyAmJiBpbnRlcnNlY3Rpb24ob3B0cy5maWx0ZXJhYmxlLCBvcHRzLmRhdGVDb2x1bW5zKS5sZW5ndGgpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjdXN0b21RdWVyaWVzID0ge307XG4gIHZhciBpbml0ID0gdGhpcy5vcHRzLmluaXRGaWx0ZXJzO1xuICB2YXIga2V5O1xuICB0aGlzLm9wdHMuY3VzdG9tRmlsdGVycy5mb3JFYWNoKGZ1bmN0aW9uIChmaWx0ZXIpIHtcbiAgICBrZXkgPSB0aGlzLnNvdXJjZSA9PSAnY2xpZW50JyA/IGZpbHRlci5uYW1lIDogZmlsdGVyO1xuICAgIGN1c3RvbVF1ZXJpZXNba2V5XSA9IGluaXQuaGFzT3duUHJvcGVydHkoa2V5KSA/IGluaXRba2V5XSA6ICcnO1xuICB9LmJpbmQodGhpcykpO1xuICByZXR1cm4gY3VzdG9tUXVlcmllcztcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBtZXJnZSA9IHJlcXVpcmUoJ21lcmdlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICBpZiAodHlwZW9mICQgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiAkKHRoaXMuJGVsKS5kYXRlcmFuZ2VwaWNrZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgY29uc29sZS5lcnJvcignRGF0ZSBmaWx0ZXJzIHJlcXVpcmUganF1ZXJ5IGFuZCBkYXRlcmFuZ2VwaWNrZXInKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZWw7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdmFyIHF1ZXJ5ID0gdGhpcy52dWV4ID8gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KSkgOiB0aGlzLnF1ZXJ5O1xuICB2YXIgY29sdW1uT3B0aW9ucztcbiAgdmFyIGRwT3B0aW9ucztcblxuICB2YXIgc2VhcmNoID0gZnVuY3Rpb24gc2VhcmNoKHF1ZXJ5LCBlKSB7XG4gICAgcmV0dXJuIHRoYXQuc291cmNlID09ICdjbGllbnQnID8gdGhhdC5zZWFyY2godGhhdC5kYXRhLCBlKSA6IHRoYXQuc2VydmVyU2VhcmNoKHF1ZXJ5LCBlKTtcbiAgfTtcblxuICB2YXIgZGF0ZXBpY2tlck9wdGlvbnMgPSBtZXJnZS5yZWN1cnNpdmUodGhpcy5vcHRzLmRhdGVwaWNrZXJPcHRpb25zLCB7XG4gICAgYXV0b1VwZGF0ZUlucHV0OiBmYWxzZSxcbiAgICBzaW5nbGVEYXRlUGlja2VyOiBmYWxzZVxuICB9KTtcbiAgdGhhdC5kYXRlcGlja2VyQ29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICB2YXIgcmFuZ2UgPSB0aGF0Ll9nZXRJbml0aWFsRGF0ZVJhbmdlKGNvbHVtbik7XG5cbiAgICBpZiAocmFuZ2UpIHtcbiAgICAgIHRoYXQuX3NldERhdGVwaWNrZXJUZXh0KGNvbHVtbiwgcmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG5cbiAgICAgIHJhbmdlID0ge1xuICAgICAgICBzdGFydERhdGU6IHJhbmdlLnN0YXJ0LFxuICAgICAgICBlbmREYXRlOiByYW5nZS5lbmRcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmdlID0ge307XG4gICAgfVxuXG4gICAgZWwgPSAkKHRoYXQuJGVsKS5maW5kKFwiI1Z1ZVRhYmxlc19fXCIgKyAkLmVzY2FwZVNlbGVjdG9yKGNvbHVtbikgKyBcIi1maWx0ZXJcIik7XG4gICAgY29sdW1uT3B0aW9ucyA9IHR5cGVvZiB0aGF0Lm9wdHMuZGF0ZXBpY2tlclBlckNvbHVtbk9wdGlvbnNbY29sdW1uXSAhPT0gJ3VuZGVmaW5lZCcgPyB0aGF0Lm9wdHMuZGF0ZXBpY2tlclBlckNvbHVtbk9wdGlvbnNbY29sdW1uXSA6IHt9O1xuICAgIGNvbHVtbk9wdGlvbnMgPSBtZXJnZS5yZWN1cnNpdmUoY29sdW1uT3B0aW9ucywge1xuICAgICAgbG9jYWxlOiB7XG4gICAgICAgIGZvcm1hdDogdGhhdC5kYXRlRm9ybWF0KGNvbHVtbilcbiAgICAgIH1cbiAgICB9KTtcbiAgICBkcE9wdGlvbnMgPSBtZXJnZSh0cnVlLCBkYXRlcGlja2VyT3B0aW9ucyk7XG5cbiAgICBpZiAoY29sdW1uT3B0aW9ucy5yYW5nZXMgPT09IGZhbHNlKSB7XG4gICAgICBkcE9wdGlvbnMucmFuZ2VzID0ge307XG4gICAgfVxuXG4gICAgZWwuZGF0ZXJhbmdlcGlja2VyKG1lcmdlLnJlY3Vyc2l2ZShkcE9wdGlvbnMsIGNvbHVtbk9wdGlvbnMsIHJhbmdlKSk7XG4gICAgZWwub24oJ2FwcGx5LmRhdGVyYW5nZXBpY2tlcicsIGZ1bmN0aW9uIChldiwgcGlja2VyKSB7XG4gICAgICBxdWVyeVtjb2x1bW5dID0ge1xuICAgICAgICBzdGFydDogcGlja2VyLnN0YXJ0RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKSxcbiAgICAgICAgZW5kOiBwaWNrZXIuZW5kRGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKVxuICAgICAgfTtcbiAgICAgIGlmICghdGhhdC52dWV4KSB0aGF0LnF1ZXJ5ID0gcXVlcnk7XG5cbiAgICAgIHRoYXQuX3NldERhdGVwaWNrZXJUZXh0KGNvbHVtbiwgcGlja2VyLnN0YXJ0RGF0ZSwgcGlja2VyLmVuZERhdGUpO1xuXG4gICAgICB0aGF0LnVwZGF0ZVN0YXRlKCdxdWVyeScsIHF1ZXJ5KTtcbiAgICAgIHNlYXJjaChxdWVyeSwge1xuICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICBuYW1lOiB0aGF0Ll9nZXRDb2x1bW5OYW1lKGNvbHVtbiksXG4gICAgICAgICAgdmFsdWU6IHF1ZXJ5W2NvbHVtbl1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZWwub24oJ2NhbmNlbC5kYXRlcmFuZ2VwaWNrZXInLCBmdW5jdGlvbiAoZXYsIHBpY2tlcikge1xuICAgICAgcXVlcnlbY29sdW1uXSA9ICcnO1xuICAgICAgaWYgKCF0aGF0LnZ1ZXgpIHRoYXQucXVlcnkgPSBxdWVyeTtcbiAgICAgIHBpY2tlci5zZXRTdGFydERhdGUobW9tZW50KCkpO1xuICAgICAgcGlja2VyLnNldEVuZERhdGUobW9tZW50KCkpO1xuICAgICAgdGhhdC51cGRhdGVTdGF0ZSgncXVlcnknLCBxdWVyeSk7XG4gICAgICAkKHRoaXMpLmh0bWwoXCI8c3BhbiBjbGFzcz0nVnVlVGFibGVzX19maWx0ZXItcGxhY2Vob2xkZXInPlwiICsgdGhhdC5kaXNwbGF5KCdmaWx0ZXJCeScsIHtcbiAgICAgICAgY29sdW1uOiB0aGF0LmdldEhlYWRpbmcoY29sdW1uKVxuICAgICAgfSkgKyBcIjwvc3Bhbj5cIik7XG4gICAgICBzZWFyY2gocXVlcnksIHtcbiAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgbmFtZTogdGhhdC5fZ2V0Q29sdW1uTmFtZShjb2x1bW4pLFxuICAgICAgICAgIHZhbHVlOiBxdWVyeVtjb2x1bW5dXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBtZXJnZSA9IHJlcXVpcmUoJ21lcmdlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRlZmF1bHRzLCBnbG9iYWxPcHRpb25zLCBsb2NhbE9wdGlvbnMpIHtcbiAgaWYgKGdsb2JhbE9wdGlvbnMpIGRlZmF1bHRzID0gbWVyZ2UucmVjdXJzaXZlKGRlZmF1bHRzLCBnbG9iYWxPcHRpb25zKTtcbiAgbG9jYWxPcHRpb25zID0gbWVyZ2UucmVjdXJzaXZlKGRlZmF1bHRzLCBsb2NhbE9wdGlvbnMpO1xuICByZXR1cm4gbG9jYWxPcHRpb25zO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy5vcHRzLm9yZGVyQnkpIHJldHVybjtcbiAgdGhpcy5vcmRlckJ5LmNvbHVtbiA9IHRoaXMub3B0cy5vcmRlckJ5LmNvbHVtbjtcbiAgdGhpcy5vcmRlckJ5LmFzY2VuZGluZyA9IHRoaXMub3B0cy5vcmRlckJ5Lmhhc093blByb3BlcnR5KCdhc2NlbmRpbmcnKSA/IHRoaXMub3B0cy5vcmRlckJ5LmFzY2VuZGluZyA6IHRydWU7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5wYWdlID0gMTtcblxuICBpZiAoIXRoaXMub3B0cy5wYWdpbmF0aW9uLmRyb3Bkb3duKSB7XG4gICAgdGhpcy4kcmVmcy5wYWdpbmF0aW9uLnNldFBhZ2UoMSk7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaW5pdCA9IHRoaXMub3B0cy5pbml0RmlsdGVycztcbiAgaWYgKCF0aGlzLm9wdHMuZmlsdGVyQnlDb2x1bW4pIHJldHVybiBpbml0Lmhhc093blByb3BlcnR5KCdHRU5FUklDJykgPyBpbml0LkdFTkVSSUMgOiAnJztcbiAgdmFyIHF1ZXJ5ID0ge307XG4gIHZhciBmaWx0ZXJhYmxlID0gdGhpcy5vcHRzLmZpbHRlcmFibGUgJiYgX3R5cGVvZih0aGlzLm9wdHMuZmlsdGVyYWJsZSkgPT0gJ29iamVjdCcgPyB0aGlzLm9wdHMuZmlsdGVyYWJsZSA6IHRoaXMuY29sdW1ucztcbiAgZmlsdGVyYWJsZS5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICBxdWVyeVtjb2x1bW5dID0gZ2V0SW5pdGlhbFZhbHVlKGluaXQsIGNvbHVtbik7XG4gIH0uYmluZCh0aGlzKSk7XG4gIHJldHVybiBxdWVyeTtcbn07XG5cbmZ1bmN0aW9uIGdldEluaXRpYWxWYWx1ZShpbml0LCBjb2x1bW4pIHtcbiAgaWYgKCFpbml0Lmhhc093blByb3BlcnR5KGNvbHVtbikpIHJldHVybiAnJztcbiAgaWYgKHR5cGVvZiBpbml0W2NvbHVtbl0uc3RhcnQgPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBpbml0W2NvbHVtbl07XG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IGluaXRbY29sdW1uXS5zdGFydC5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKSxcbiAgICBlbmQ6IGluaXRbY29sdW1uXS5lbmQuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzJylcbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IHtcbiAgICBwYWdlOiAxLFxuICAgIHF1ZXJ5OiB0aGlzLnF1ZXJ5LFxuICAgIG9yZGVyQnk6IHRoaXMub3JkZXJCeSxcbiAgICBwZXJQYWdlOiB0aGlzLm9wdHMucGVyUGFnZSxcbiAgICBjdXN0b21RdWVyaWVzOiB0aGlzLmN1c3RvbVF1ZXJpZXNcbiAgfTtcbiAgdGhpcy5zdG9yYWdlLnNldEl0ZW0odGhpcy5zdGF0ZUtleSwgSlNPTi5zdHJpbmdpZnkoc3RhdGUpKTtcbiAgcmV0dXJuIHN0YXRlO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29sdW1uKSB7XG4gIHJldHVybiAhdGhpcy5vcHRzLmRlc2NPcmRlckNvbHVtbnMuaW5jbHVkZXMoY29sdW1uKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICByZXR1cm4gdGhpcy5xdWVyeS5oYXNPd25Qcm9wZXJ0eShjb2x1bW4pICYmIHRoaXMub3B0cy5kYXRlQ29sdW1ucy5pbmRleE9mKGNvbHVtbikgPiAtMTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICByZXR1cm4gdGhpcy5xdWVyeS5oYXNPd25Qcm9wZXJ0eShjb2x1bW4pICYmIHRoaXMub3B0cy5saXN0Q29sdW1ucy5oYXNPd25Qcm9wZXJ0eShjb2x1bW4pO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29sdW1uKSB7XG4gIHJldHVybiB0aGlzLnF1ZXJ5Lmhhc093blByb3BlcnR5KGNvbHVtbikgJiYgdGhpcy5vcHRzLmRhdGVDb2x1bW5zLmluZGV4T2YoY29sdW1uKSA9PSAtMSAmJiAhdGhpcy5vcHRzLmxpc3RDb2x1bW5zLmhhc093blByb3BlcnR5KGNvbHVtbik7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChwYWdlKSB7XG4gIGlmICh0aGlzLnZ1ZXgpIHJldHVybjtcbiAgdGhpcy5zZXRQYWdlKHBhZ2UpO1xuICB0aGlzLmRpc3BhdGNoKCdwYWdpbmF0aW9uJywgcGFnZSk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgcmV0dXJuIHRoaXMudXNlckNvbHVtbnNEaXNwbGF5Lmxlbmd0aCA9PT0gMSAmJiB0aGlzLnVzZXJDb2x1bW5zRGlzcGxheVswXSA9PT0gY29sdW1uO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29sTmFtZSwgZXYpIHtcbiAgaWYgKCF0aGlzLnNvcnRhYmxlKGNvbE5hbWUpKSByZXR1cm47XG5cbiAgaWYgKGV2ICYmIGV2LnNoaWZ0S2V5ICYmIHRoaXMub3JkZXJCeS5jb2x1bW4gJiYgdGhpcy5oYXNNdWx0aVNvcnQpIHtcbiAgICB0aGlzLnNldFVzZXJNdWx0aVNvcnQoY29sTmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy51c2VyTXVsdGlTb3J0aW5nID0ge307XG4gICAgdGhpcy5vcmRlckJ5LmFzY2VuZGluZyA9IGNvbE5hbWUgPT0gdGhpcy5vcmRlckJ5LmNvbHVtbiA/ICF0aGlzLm9yZGVyQnkuYXNjZW5kaW5nIDogdGhpcy5faW5pdGlhbE9yZGVyQXNjZW5kaW5nKGNvbE5hbWUpO1xuICAgIHRoaXMub3JkZXJCeS5jb2x1bW4gPSBjb2xOYW1lO1xuICAgIHRoaXMudXBkYXRlU3RhdGUoJ29yZGVyQnknLCB0aGlzLm9yZGVyQnkpO1xuICAgIHRoaXMuZGlzcGF0Y2goJ3NvcnRlZCcsIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5vcmRlckJ5KSkpO1xuICB9XG5cbiAgaWYgKHRoaXMuc291cmNlID09ICdzZXJ2ZXInKSB7XG4gICAgdGhpcy5nZXREYXRhKCk7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnNlcnZlclNlYXJjaCgpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9idXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi9idXNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIGV2ZW50ID0gJ3Z1ZS10YWJsZXMnO1xuICBpZiAodGhpcy5uYW1lKSBldmVudCArPSAnLicgKyB0aGlzLm5hbWU7XG4gIHRoaXMub3B0cy5jdXN0b21GaWx0ZXJzLmZvckVhY2goZnVuY3Rpb24gKGZpbHRlcikge1xuICAgIF9idXNbXCJkZWZhdWx0XCJdLiRvZmYoXCJcIi5jb25jYXQoZXZlbnQsIFwiLmZpbHRlcjo6XCIpLmNvbmNhdChmaWx0ZXIubmFtZSkpO1xuXG4gICAgX2J1c1tcImRlZmF1bHRcIl0uJG9uKFwiXCIuY29uY2F0KGV2ZW50LCBcIi5maWx0ZXI6OlwiKS5jb25jYXQoZmlsdGVyLm5hbWUpLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIF90aGlzLmN1c3RvbVF1ZXJpZXNbZmlsdGVyLm5hbWVdID0gdmFsdWU7XG5cbiAgICAgIF90aGlzLnVwZGF0ZVN0YXRlKCdjdXN0b21RdWVyaWVzJywgX3RoaXMuY3VzdG9tUXVlcmllcyk7XG4gICAgfSk7XG4gIH0pO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9idXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi9idXNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBldmVudCA9ICd2dWUtdGFibGVzJztcbiAgaWYgKHRoaXMubmFtZSkgZXZlbnQgKz0gJy4nICsgdGhpcy5uYW1lO1xuICB0aGlzLm9wdHMuY3VzdG9tRmlsdGVycy5mb3JFYWNoKGZ1bmN0aW9uIChmaWx0ZXIpIHtcbiAgICBfYnVzW1wiZGVmYXVsdFwiXS4kb2ZmKFwiXCIuY29uY2F0KGV2ZW50LCBcIi5maWx0ZXI6OlwiKS5jb25jYXQoZmlsdGVyKSk7XG5cbiAgICBfYnVzW1wiZGVmYXVsdFwiXS4kb24oXCJcIi5jb25jYXQoZXZlbnQsIFwiLmZpbHRlcjo6XCIpLmNvbmNhdChmaWx0ZXIpLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHRoaXMuY3VzdG9tUXVlcmllc1tmaWx0ZXJdID0gdmFsdWU7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlKCdjdXN0b21RdWVyaWVzJywgdGhpcy5jdXN0b21RdWVyaWVzKTtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH0uYmluZCh0aGlzKSk7XG4gIH0uYmluZCh0aGlzKSk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbiwgaW5kZXgsIGgpIHtcbiAgdmFyIHZhbHVlID0gdGhpcy5fZ2V0VmFsdWUocm93LCBjb2x1bW4pO1xuXG4gIGlmICh0aGlzLnRlbXBsYXRlc0tleXMuaW5kZXhPZihjb2x1bW4pID09IC0xKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgIXRoaXMub3B0cy5oaWdobGlnaHRNYXRjaGVzIHx8IHRoaXMuZmlsdGVyYWJsZUNvbHVtbnMuaW5kZXhPZihjb2x1bW4pID09PSAtMSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodE1hdGNoKHZhbHVlLCBjb2x1bW4sIGgpO1xuICB9XG5cbiAgdmFyIHRlbXBsYXRlID0gdGhpcy5vcHRzLnRlbXBsYXRlc1tjb2x1bW5dO1xuICB0ZW1wbGF0ZSA9IHR5cGVvZiB0ZW1wbGF0ZSA9PSAnZnVuY3Rpb24nID8gdGVtcGxhdGUuYXBwbHkodGhpcy4kcm9vdCwgW2gsIHJvdywgaW5kZXgsIGNvbHVtbl0pIDogaCh0ZW1wbGF0ZSwge1xuICAgIGF0dHJzOiB7XG4gICAgICBkYXRhOiByb3csXG4gICAgICBjb2x1bW46IGNvbHVtbixcbiAgICAgIGluZGV4OiBpbmRleFxuICAgIH1cbiAgfSk7XG4gIHJldHVybiB0ZW1wbGF0ZTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICBmb3IgKHZhciBrZXkgaW4gdGhpcy5xdWVyeSkge1xuICAgIHRoaXMucXVlcnlba2V5XSA9ICcnO1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyb3csIGluZGV4LCBldmVudCkge1xuICB2YXIgZGF0YTtcbiAgdmFyIGlkID0gdGhpcy5vcHRzLnVuaXF1ZUtleTtcblxuICBpZiAodGhpcy5zb3VyY2UgPT0gJ2NsaWVudCcgJiYgdHlwZW9mIHJvd1tpZF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZGF0YSA9IHRoaXMudGFibGVEYXRhLmZpbHRlcihmdW5jdGlvbiAocikge1xuICAgICAgcmV0dXJuIHJvd1tpZF0gPT09IHJbaWRdO1xuICAgIH0pWzBdO1xuICB9IGVsc2Uge1xuICAgIGRhdGEgPSByb3c7XG4gIH1cblxuICB0aGlzLmRpc3BhdGNoKCdyb3ctY2xpY2snLCB7XG4gICAgcm93OiBkYXRhLFxuICAgIGluZGV4OiBpbmRleCxcbiAgICBldmVudDogZXZlbnRcbiAgfSk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIGlmICh0eXBlb2YgdGhpcy5vcHRzLnJlcXVlc3RGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0aGlzLm9wdHMucmVxdWVzdEZ1bmN0aW9uLmNhbGwodGhpcywgZGF0YSk7XG4gIH1cblxuICBpZiAodHlwZW9mIGF4aW9zICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIGF4aW9zLmdldCh0aGlzLnVybCwge1xuICAgIHBhcmFtczogZGF0YVxuICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uIChlKSB7XG4gICAgdGhpcy5kaXNwYXRjaCgnZXJyb3InLCBlKTtcbiAgfS5iaW5kKHRoaXMpKTtcbiAgaWYgKHR5cGVvZiB0aGlzLiRodHRwICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KHRoaXMudXJsLCB7XG4gICAgcGFyYW1zOiBkYXRhXG4gIH0pLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICByZXR1cm4gZGF0YS5qc29uKCk7XG4gIH0uYmluZCh0aGlzKSwgZnVuY3Rpb24gKGUpIHtcbiAgICB0aGlzLmRpc3BhdGNoKCdlcnJvcicsIGUpO1xuICB9LmJpbmQodGhpcykpO1xuICBpZiAodHlwZW9mICQgIT0gJ3VuZGVmaW5lZCcpIHJldHVybiAkLmdldEpTT04odGhpcy51cmwsIGRhdGEpLmZhaWwoZnVuY3Rpb24gKGUpIHtcbiAgICB0aGlzLmRpc3BhdGNoKCdlcnJvcicsIGUpO1xuICB9LmJpbmQodGhpcykpO1xuICB0aHJvdyBcInZ1ZS10YWJsZXM6IE5vIHN1cHBvcnRlZCBhamF4IGxpYnJhcnkgd2FzIGZvdW5kLiAoalF1ZXJ5LCBheGlvcyBvciB2dWUtcmVzb3VyY2UpLiBUbyB1c2UgYSBkaWZmZXJlbnQgbGlicmFyeSB5b3UgY2FuIHdyaXRlIHlvdXIgb3duIHJlcXVlc3QgZnVuY3Rpb24gKHNlZSB0aGUgYHJlcXVlc3RGdW5jdGlvbmAgb3B0aW9uKVwiO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZSwgZGF0ZUV2ZW50KSB7XG4gIC8vIHdlIG5lZWQgdG8gaGFuZGxlIHRoZSBzdG9yZSB0aGlzLnF1ZXJ5IHRvIG1ha2Ugc3VyZSB3ZSdyZSBub3QgbXV0YXRpbmcgb3V0c2lkZSBvZiBpdFxuICB2YXIgcXVlcnkgPSB0aGlzLnZ1ZXggPyBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMucXVlcnkpKSA6IHRoaXMucXVlcnk7IC8vIGluIGNhc2Ugd2UgcGFzcyBhbiBvYmplY3QgbWFudWFsbHkgKG1vc3RseSB1c2VkIGZvciBpbml0LWRhdGUtZmlsdGVycyBzaG91bGQgcmVmYWN0b3JcblxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsIC0xKSA9PSAnT2JqZWN0Jykge1xuICAgIHF1ZXJ5ID0gdGhpcy52dWV4ID8gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlKSkgOiBlO1xuICAgIGlmICghdGhpcy52dWV4KSB0aGlzLnF1ZXJ5ID0gcXVlcnk7XG4gICAgdmFyIG5hbWUgPSBkYXRlRXZlbnQudGFyZ2V0Lm5hbWU7XG4gICAgdmFyIHZhbHVlID0gZGF0ZUV2ZW50LnRhcmdldC52YWx1ZTtcblxuICAgIGlmIChuYW1lKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoKCdmaWx0ZXInLCB7XG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgfSk7XG4gICAgICB0aGlzLmRpc3BhdGNoKFwiZmlsdGVyOjpcIi5jb25jYXQobmFtZSksIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwYXRjaCgnZmlsdGVyJywgdmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlU3RhdGUoJ3F1ZXJ5JywgcXVlcnkpO1xuICB9IGVsc2UgaWYgKGUpIHtcbiAgICB2YXIgX25hbWUgPSB0aGlzLmdldE5hbWUoZS50YXJnZXQubmFtZSk7XG5cbiAgICB2YXIgX3ZhbHVlID0gZS50YXJnZXQudmFsdWU7XG5cbiAgICBpZiAoX25hbWUpIHtcbiAgICAgIHF1ZXJ5W19uYW1lXSA9IF92YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcXVlcnkgPSBfdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnZ1ZXgpIHRoaXMucXVlcnkgPSBxdWVyeTtcblxuICAgIGlmIChfbmFtZSkge1xuICAgICAgdGhpcy5kaXNwYXRjaCgnZmlsdGVyJywge1xuICAgICAgICBuYW1lOiBfbmFtZSxcbiAgICAgICAgdmFsdWU6IF92YWx1ZVxuICAgICAgfSk7XG4gICAgICB0aGlzLmRpc3BhdGNoKFwiZmlsdGVyOjpcIi5jb25jYXQoX25hbWUpLCBfdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc3BhdGNoKCdmaWx0ZXInLCBfdmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlU3RhdGUoJ3F1ZXJ5JywgcXVlcnkpO1xuICB9XG5cbiAgcmV0dXJuIHNlYXJjaCh0aGlzLCBxdWVyeSk7XG59O1xuXG5mdW5jdGlvbiBzZWFyY2godGhhdCwgcXVlcnkpIHtcbiAgaWYgKHRoYXQudnVleCkge1xuICAgIHRoYXQuY29tbWl0KCdTRVRfRklMVEVSJywgcXVlcnkpO1xuICB9IGVsc2Uge1xuICAgIHRoYXQuaW5pdFBhZ2luYXRpb24oKTtcblxuICAgIGlmICh0aGF0Lm9wdHMucGFnaW5hdGlvbi5kcm9wZG93bikge1xuICAgICAgdGhhdC5nZXREYXRhKCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG5vRGVib3VuY2UoZSwgbmFtZSwgb3B0cykge1xuICByZXR1cm4gIWUgfHwgbmFtZSAmJiAob3B0cy5kYXRlQ29sdW1ucy5pbmRleE9mKG5hbWUpID4gLTEgfHwgT2JqZWN0LmtleXMob3B0cy5saXN0Q29sdW1ucykuaW5kZXhPZihuYW1lKSA+IC0xKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgaWYgKHRoaXMub3B0cy5jb2x1bW5zRHJvcGRvd24pIHtcbiAgICB2YXIgc3RvcFByb3AgPSBmdW5jdGlvbiBzdG9wUHJvcChlKSB7XG4gICAgICByZXR1cm4gZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9O1xuXG4gICAgdmFyIGhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKCkge1xuICAgICAgaWYgKF90aGlzLmRpc3BsYXlDb2x1bW5zRHJvcGRvd24pIHtcbiAgICAgICAgX3RoaXMuZGlzcGxheUNvbHVtbnNEcm9wZG93biA9IGZhbHNlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLiRyZWZzLmNvbHVtbnNkcm9wZG93bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHN0b3BQcm9wKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZXIpO1xuICAgIHRoaXMuJG9uY2UoJ2hvb2s6YmVmb3JlRGVzdHJveScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlcik7XG5cbiAgICAgIF90aGlzLiRyZWZzLmNvbHVtbnNkcm9wZG93bi5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHN0b3BQcm9wKTtcbiAgICB9KTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLm9wdHMucmVzcG9uc2VBZGFwdGVyLmNhbGwodGhpcywgcmVzcG9uc2UpO1xuICB0aGlzLmRhdGEgPSB0aGlzLmFwcGx5RmlsdGVycyhkYXRhLmRhdGEpO1xuXG4gIGlmIChpc05hTihkYXRhLmNvdW50KSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJ2dWUtdGFibGVzLTI6IGludmFsaWQgJ2NvdW50JyBwcm9wZXJ0eS4gRXhwZWN0ZWQgbnVtYmVyLCBnb3QgXCIuY29uY2F0KF90eXBlb2YoZGF0YS5jb3VudCkpKTtcbiAgICBjb25zb2xlLmVycm9yKCdjb3VudCBlcXVhbHMnLCBkYXRhLmNvdW50KTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgfVxuXG4gIHRoaXMuY291bnQgPSBwYXJzZUludChkYXRhLmNvdW50KTtcbiAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5kaXNwYXRjaCgnbG9hZGVkJywgcmVzcG9uc2UpO1xuICB9LmJpbmQodGhpcyksIDApO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29sdW1uLCBzdGFydCwgZW5kKSB7XG4gIHZhciBkYXRlRm9ybWF0ID0gdGhpcy5kYXRlRm9ybWF0KGNvbHVtbik7XG4gIHZhciBlbCA9IHR5cGVvZiBjb2x1bW4gPT09ICdzdHJpbmcnID8gJCh0aGlzLiRlbCkuZmluZChcIiNWdWVUYWJsZXNfX1wiICsgJC5lc2NhcGVTZWxlY3Rvcihjb2x1bW4pICsgXCItZmlsdGVyXCIpIDogY29sdW1uO1xuICBlbC50ZXh0KHN0YXJ0LmZvcm1hdChkYXRlRm9ybWF0KSArIFwiIC0gXCIgKyBlbmQuZm9ybWF0KGRhdGVGb3JtYXQpKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBtZXJnZSA9IHJlcXVpcmUoJ21lcmdlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZpbHRlcikge1xuICBpZiAoIXRoaXMub3B0cy5maWx0ZXJhYmxlKSB7XG4gICAgY29uc29sZS53YXJuKFwidnVlLXRhYmxlcy0yOiBVbmFibGUgdG8gc2V0IGZpbHRlci4gRmlsdGVyaW5nIGlzIGRpc2FibGVkIChmaWx0ZXJhYmxlOiBmYWxzZSlcIik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgO1xuXG4gIGlmICh0aGlzLm9wdHMuZmlsdGVyQnlDb2x1bW4gJiYgdHlwZW9mIGZpbHRlciA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zb2xlLndhcm4oXCJ2dWUtdGFibGVzLTI6IFVuYWJsZSB0byBzZXQgZmlsdGVyLiBGaWx0ZXIgdmFsdWUgbXVzdCBiZSBhbiBvYmplY3QgKGBmaWx0ZXJCeUNvbHVtbmAgaXMgc2V0IHRvIGB0cnVlYClcIik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgO1xuXG4gIGlmICghdGhpcy5vcHRzLmZpbHRlckJ5Q29sdW1uICYmIHR5cGVvZiBmaWx0ZXIgIT09ICdzdHJpbmcnKSB7XG4gICAgY29uc29sZS53YXJuKFwidnVlLXRhYmxlcy0yOiBVbmFibGUgdG8gc2V0IGZpbHRlci4gRmlsdGVyIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgKGBmaWx0ZXJCeUNvbHVtbmAgaXMgc2V0IHRvIGBmYWxzZWApXCIpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIDtcbiAgdmFyIG1lcmdlZEZpbHRlciA9IHRoaXMub3B0cy5maWx0ZXJCeUNvbHVtbiA/IG1lcmdlKHRoaXMucXVlcnksIGZpbHRlcikgOiBmaWx0ZXI7XG5cbiAgaWYgKHRoaXMudnVleCkge1xuICAgIHRoaXMuY29tbWl0KCdTRVRfRklMVEVSJywgbWVyZ2VkRmlsdGVyKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnF1ZXJ5ID0gbWVyZ2VkRmlsdGVyO1xuICAgIHRoaXMuc2V0UGFnZSgxLCB0cnVlKTtcbiAgfVxuXG4gIHRoaXMudXBkYXRlU3RhdGUoJ3F1ZXJ5JywgbWVyZ2VkRmlsdGVyKTtcblxuICB0aGlzLl9zZXRGaWx0ZXJzRE9NKGZpbHRlcik7XG5cbiAgaWYgKHRoaXMuc291cmNlID09ICdzZXJ2ZXInKSB7XG4gICAgdGhpcy5nZXREYXRhKCk7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gIHZhciBlbDtcblxuICBpZiAodGhpcy5vcHRzLmZpbHRlckJ5Q29sdW1uKSB7XG4gICAgZm9yICh2YXIgY29sdW1uIGluIHF1ZXJ5KSB7XG4gICAgICB2YXIgY29sdW1uTmFtZSA9IHRoaXMuX2dldENvbHVtbk5hbWUoY29sdW1uKTtcblxuICAgICAgaWYgKHRoaXMuaXNEYXRlRmlsdGVyKGNvbHVtbikpIHtcbiAgICAgICAgaWYgKHF1ZXJ5W2NvbHVtbl0gJiYgX3R5cGVvZihxdWVyeVtjb2x1bW5dKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB2YXIgc3RhcnQgPSB0eXBlb2YgcXVlcnlbY29sdW1uXS5zdGFydCA9PT0gJ3N0cmluZycgPyBtb21lbnQocXVlcnlbY29sdW1uXS5zdGFydCwgJ1lZWVktTU0tREQnKSA6IHF1ZXJ5W2NvbHVtbl0uc3RhcnQ7XG4gICAgICAgICAgdmFyIGVuZCA9IHR5cGVvZiBxdWVyeVtjb2x1bW5dLmVuZCA9PT0gJ3N0cmluZycgPyBtb21lbnQocXVlcnlbY29sdW1uXS5lbmQsICdZWVlZLU1NLUREJykgOiBxdWVyeVtjb2x1bW5dLmVuZDtcblxuICAgICAgICAgIHRoaXMuX3NldERhdGVwaWNrZXJUZXh0KGNvbHVtbiwgc3RhcnQsIGVuZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgJCh0aGlzLiRlbCkuZmluZChcIiNWdWVUYWJsZXNfX1wiICsgJC5lc2NhcGVTZWxlY3Rvcihjb2x1bW4pICsgXCItZmlsdGVyXCIpLmh0bWwoXCI8c3BhbiBjbGFzcz0nVnVlVGFibGVzX19maWx0ZXItcGxhY2Vob2xkZXInPlwiICsgdGhpcy5kaXNwbGF5KCdmaWx0ZXJCeScsIHtcbiAgICAgICAgICAgIGNvbHVtbjogdGhpcy5nZXRIZWFkaW5nKGNvbHVtbilcbiAgICAgICAgICB9KSArIFwiPC9zcGFuPlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBlbCA9IHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoXCJbbmFtZT0nXCIuY29uY2F0KGNvbHVtbk5hbWUsIFwiJ11cIikpO1xuXG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgZWwudmFsdWUgPSBxdWVyeVtjb2x1bW5dO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbHVtbnMuaW5kZXhPZihjb2x1bW4pID09PSAtMSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwidnVlLXRhYmxlcy0yOiBFcnJvciBpbiBzZXR0aW5nIGZpbHRlciB2YWx1ZS4gQ29sdW1uICdcIi5jb25jYXQoY29sdW1uLCBcIicgZG9lcyBub3QgZXhpc3QuXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGVsID0gdGhpcy4kZWwucXVlcnlTZWxlY3RvcignLlZ1ZVRhYmxlc19fc2VhcmNoX19pbnB1dCcpO1xuICAgIGlmIChlbCkgZWwudmFsdWUgPSBxdWVyeTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZSkge1xuICB0aGlzLmxpbWl0ID0gX3R5cGVvZihlKSA9PT0gJ29iamVjdCcgPyBlLnRhcmdldC52YWx1ZSA6IGU7XG4gIHRoaXMudXBkYXRlU3RhdGUoJ3BlclBhZ2UnLCB0aGlzLmxpbWl0KTtcbiAgdGhpcy5kaXNwYXRjaCgnbGltaXQnLCBwYXJzZUludCh0aGlzLmxpbWl0KSk7XG4gIHRoaXMuc2V0UGFnZSgxKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbHVtbiwgYXNjZW5kaW5nKSB7XG4gIHRoaXMub3JkZXJCeS5jb2x1bW4gPSBjb2x1bW47XG4gIHRoaXMub3JkZXJCeS5hc2NlbmRpbmcgPSBhc2NlbmRpbmc7XG4gIHRoaXMudXBkYXRlU3RhdGUoJ29yZGVyQnknLCB7XG4gICAgY29sdW1uOiBjb2x1bW4sXG4gICAgYXNjZW5kaW5nOiBhc2NlbmRpbmdcbiAgfSk7XG5cbiAgaWYgKHRoaXMuc291cmNlID09ICdzZXJ2ZXInKSB7XG4gICAgdGhpcy5nZXREYXRhKCk7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHBhZ2UsIHByZXZlbnRSZXF1ZXN0KSB7XG4gIHBhZ2UgPSBwYWdlID8gcGFnZSA6IHRoaXMuJHJlZnMucGFnZS52YWx1ZTtcbiAgaWYgKCF0aGlzLm9wdHMucGFnaW5hdGlvbi5kcm9wZG93bikgdGhpcy4kcmVmcy5wYWdpbmF0aW9uLlBhZ2UgPSBwYWdlO1xuICB0aGlzLnBhZ2UgPSBwYWdlO1xuICB0aGlzLnVwZGF0ZVN0YXRlKCdwYWdlJywgcGFnZSk7XG4gIGlmICh0aGlzLnNvdXJjZSA9PSAnc2VydmVyJyAmJiAhcHJldmVudFJlcXVlc3QpIHRoaXMuZ2V0RGF0YSgpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2Vjb25kYXJ5Q29sKSB7XG4gIHZhciBwcmltYXJ5Q29sID0gdGhpcy5vcmRlckJ5LmNvbHVtbjtcbiAgdmFyIHByaW1hcnlBc2MgPSB0aGlzLm9yZGVyQnkuYXNjZW5kaW5nO1xuICBpZiAoIXRoaXMudXNlck11bHRpU29ydGluZ1twcmltYXJ5Q29sXSkgdGhpcy51c2VyTXVsdGlTb3J0aW5nW3ByaW1hcnlDb2xdID0gW107XG4gIHZhciBtdWx0aSA9IHRoaXMudXNlck11bHRpU29ydGluZ1twcmltYXJ5Q29sXTtcblxuICBpZiAocHJpbWFyeUNvbCA9PT0gc2Vjb25kYXJ5Q29sKSB7XG4gICAgaWYgKCFtdWx0aS5sZW5ndGggfHwgcHJpbWFyeUFzYykge1xuICAgICAgLy8gcHJpbWFyeSBpcyB0aGUgb25seSBzb3J0ZWQgY29sdW1uIG9yIGlzIGFzY2VuZGluZ1xuICAgICAgdGhpcy5vcmRlckJ5LmFzY2VuZGluZyA9ICF0aGlzLm9yZGVyQnkuYXNjZW5kaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyByZW1vdmUgcHJpbWFyeSBjb2x1bW4gYW5kIG1ha2Ugc2Vjb25kYXJ5IHByaW1hcnlcbiAgICAgIHRoaXMub3JkZXJCeSA9IG11bHRpLnNoaWZ0KCk7XG4gICAgICB0aGlzLnVzZXJNdWx0aVNvcnRpbmcgPSB7fTtcbiAgICAgIHRoaXMudXNlck11bHRpU29ydGluZ1t0aGlzLm9yZGVyQnkuY29sdW1uXSA9IG11bHRpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgc2Vjb25kYXJ5ID0gbXVsdGkuZmlsdGVyKGZ1bmN0aW9uIChjb2wpIHtcbiAgICAgIHJldHVybiBjb2wuY29sdW1uID09IHNlY29uZGFyeUNvbDtcbiAgICB9KVswXTtcblxuICAgIGlmIChzZWNvbmRhcnkpIHtcbiAgICAgIGlmICghc2Vjb25kYXJ5LmFzY2VuZGluZykge1xuICAgICAgICAvLyByZW1vdmUgc29ydFxuICAgICAgICB0aGlzLnVzZXJNdWx0aVNvcnRpbmdbcHJpbWFyeUNvbF0gPSBtdWx0aS5maWx0ZXIoZnVuY3Rpb24gKGNvbCkge1xuICAgICAgICAgIHJldHVybiBjb2wuY29sdW1uICE9IHNlY29uZGFyeUNvbDtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdGhpcy51c2VyTXVsdGlTb3J0aW5nW3ByaW1hcnlDb2xdLmxlbmd0aCkgdGhpcy51c2VyTXVsdGlTb3J0aW5nID0ge307XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjaGFuZ2UgZGlyZWN0aW9uXG4gICAgICAgIHNlY29uZGFyeS5hc2NlbmRpbmcgPSAhc2Vjb25kYXJ5LmFzY2VuZGluZztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYWRkIHNvcnRcbiAgICAgIG11bHRpLnB1c2goe1xuICAgICAgICBjb2x1bW46IHNlY29uZGFyeUNvbCxcbiAgICAgICAgYXNjZW5kaW5nOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0gLy8gZm9yY2UgcmUtY29tcGlsYXRpb24gb2YgdGhlIGZpbHRlcmVkRGF0YSBjb21wdXRlZCBwcm9wZXJ0eVxuXG5cbiAgdGhpcy50aW1lID0gRGF0ZS5ub3coKTtcbiAgdGhpcy5kaXNwYXRjaCgnc29ydGVkJywgZ2V0TXVsdGlTb3J0RGF0YSh0aGlzLm9yZGVyQnksIHRoaXMudXNlck11bHRpU29ydGluZykpO1xufTtcblxuZnVuY3Rpb24gZ2V0TXVsdGlTb3J0RGF0YShtYWluLCBzZWNvbmRhcnkpIHtcbiAgdmFyIGNvbHMgPSBbSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShtYWluKSldO1xuICBjb2xzID0gY29scy5jb25jYXQoc2Vjb25kYXJ5W21haW4uY29sdW1uXSk7XG4gIHJldHVybiBjb2xzO1xufVxuXG47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICBpZiAodGhpcy5vcHRzLnZpc2libGVDb2x1bW5zKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0cy52aXNpYmxlQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4pO1xuICB9XG5cbiAgaWYgKHRoaXMub3B0cy5oaWRkZW5Db2x1bW5zKSB7XG4gICAgcmV0dXJuICF0aGlzLm9wdHMuaGlkZGVuQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4pO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgdmFyIGNscyA9IHRoaXMub3B0cy5zb3J0SWNvbi5iYXNlICsgJyAnO1xuICBpZiAoIXRoaXMuc29ydGFibGUoY29sdW1uKSkgcmV0dXJuO1xuXG4gIGlmICh0aGlzLm9wdHMuc29ydEljb24uaXMgJiYgIXRoaXMuX2N1cnJlbnRseVNvcnRlZChjb2x1bW4pKSB7XG4gICAgY2xzICs9IHRoaXMub3B0cy5zb3J0SWNvbi5pcyArICcgJztcbiAgfVxuXG4gIGlmICh0aGlzLmhhc011bHRpU29ydCAmJiB0aGlzLm9yZGVyQnkuY29sdW1uICYmIHRoaXMudXNlck11bHRpU29ydGluZ1t0aGlzLm9yZGVyQnkuY29sdW1uXSkge1xuICAgIHZhciBjb2wgPSB0aGlzLnVzZXJNdWx0aVNvcnRpbmdbdGhpcy5vcmRlckJ5LmNvbHVtbl0uZmlsdGVyKGZ1bmN0aW9uIChjKSB7XG4gICAgICByZXR1cm4gYy5jb2x1bW4gPT09IGNvbHVtbjtcbiAgICB9KVswXTtcbiAgICBpZiAoY29sKSBjbHMgKz0gY29sLmFzY2VuZGluZyA/IHRoaXMub3B0cy5zb3J0SWNvbi51cCA6IHRoaXMub3B0cy5zb3J0SWNvbi5kb3duO1xuICB9XG5cbiAgaWYgKGNvbHVtbiA9PSB0aGlzLm9yZGVyQnkuY29sdW1uKSB7XG4gICAgY2xzICs9IHRoaXMub3JkZXJCeS5hc2NlbmRpbmcgPT0gMSA/IHRoaXMub3B0cy5zb3J0SWNvbi51cCA6IHRoaXMub3B0cy5zb3J0SWNvbi5kb3duO1xuICB9XG5cbiAgcmV0dXJuIGNscztcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICB2YXIgYyA9IHRoaXMuc29ydGFibGUoY29sdW1uKSA/ICdWdWVUYWJsZXNfX3NvcnRhYmxlICcgOiAnJztcbiAgYyArPSB0aGlzLmNvbHVtbkNsYXNzKGNvbHVtbik7XG4gIHJldHVybiBjO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29sdW1uKSB7XG4gIHZhciBzb3J0QWxsID0gdHlwZW9mIHRoaXMub3B0cy5zb3J0YWJsZSA9PSAnYm9vbGVhbicgJiYgdGhpcy5vcHRzLnNvcnRhYmxlO1xuICBpZiAoc29ydEFsbCkgcmV0dXJuIHRydWU7XG4gIHJldHVybiB0aGlzLm9wdHMuc29ydGFibGUuaW5kZXhPZihjb2x1bW4pID4gLTE7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyb3dJZCwgZSkge1xuICBpZiAoZSkgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICBpZiAodGhpcy5vcGVuQ2hpbGRSb3dzLmluY2x1ZGVzKHJvd0lkKSkge1xuICAgIHZhciBpbmRleCA9IHRoaXMub3BlbkNoaWxkUm93cy5pbmRleE9mKHJvd0lkKTtcbiAgICB0aGlzLm9wZW5DaGlsZFJvd3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm9wZW5DaGlsZFJvd3MucHVzaChyb3dJZCk7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIGlmICghdGhpcy51c2VyQ29udHJvbHNDb2x1bW5zKSB7XG4gICAgdGhpcy51c2VyQ29sdW1uc0Rpc3BsYXkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuYWxsQ29sdW1ucykpO1xuICAgIHRoaXMudXNlckNvbnRyb2xzQ29sdW1ucyA9IHRydWU7XG4gIH1cblxuICBpZiAodGhpcy51c2VyQ29sdW1uc0Rpc3BsYXkuaW5jbHVkZXMoY29sdW1uKSkge1xuICAgIC8vIGNhbid0IGhhdmUgbm8gY29sdW1uc1xuICAgIGlmICh0aGlzLnVzZXJDb2x1bW5zRGlzcGxheS5sZW5ndGggPT09IDEpIHJldHVybjtcbiAgICB2YXIgaW5kZXggPSB0aGlzLnVzZXJDb2x1bW5zRGlzcGxheS5pbmRleE9mKGNvbHVtbik7XG4gICAgdGhpcy51c2VyQ29sdW1uc0Rpc3BsYXkuc3BsaWNlKGluZGV4LCAxKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnVzZXJDb2x1bW5zRGlzcGxheS5wdXNoKGNvbHVtbik7XG4gIH1cblxuICB0aGlzLnVwZGF0ZVN0YXRlKCd1c2VyQ29udHJvbHNDb2x1bW5zJywgdHJ1ZSk7XG4gIHRoaXMudXBkYXRlU3RhdGUoJ3VzZXJDb2x1bW5zRGlzcGxheScsIHRoaXMudXNlckNvbHVtbnNEaXNwbGF5KTtcbiAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgIF90aGlzLl9zZXRGaWx0ZXJzRE9NKF90aGlzLnF1ZXJ5KTtcbiAgfSk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5kaXNwbGF5Q29sdW1uc0Ryb3Bkb3duID0gIXRoaXMuZGlzcGxheUNvbHVtbnNEcm9wZG93bjtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5vcmRlckJ5LmNvbHVtbiAhPSB0aGlzLm9wdHMuZ3JvdXBCeSkge1xuICAgIHRoaXMuc2V0T3JkZXIodGhpcy5vcHRzLmdyb3VwQnksIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuc2V0T3JkZXIodGhpcy5vcHRzLmdyb3VwQnksICF0aGlzLm9yZGVyQnkuYXNjZW5kaW5nKTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChyb3csIGluZGV4KSB7XG4gICAgdGhpcy5vcHRzLmRhdGVDb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgcm93W2NvbHVtbl0gPSByb3dbY29sdW1uXSA/IG1vbWVudChyb3dbY29sdW1uXSwgdGhpcy5vcHRzLnRvTW9tZW50Rm9ybWF0KSA6ICcnO1xuICAgIH0uYmluZCh0aGlzKSk7XG4gIH0uYmluZCh0aGlzKSk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIGlmICghdGhpcy5vcHRzLnNhdmVTdGF0ZSB8fCAhdGhpcy5hY3RpdmVTdGF0ZSkgcmV0dXJuO1xuXG4gIHRyeSB7XG4gICAgdmFyIGN1cnJlbnRTdGF0ZSA9IEpTT04ucGFyc2UodGhpcy5zdG9yYWdlLmdldEl0ZW0odGhpcy5zdGF0ZUtleSkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdmFyIGN1cnJlbnRTdGF0ZSA9IHRoaXMuaW5pdFN0YXRlKCk7XG4gIH1cblxuICBjdXJyZW50U3RhdGVba2V5XSA9IHZhbHVlO1xuICB0aGlzLnN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0YXRlS2V5LCBKU09OLnN0cmluZ2lmeShjdXJyZW50U3RhdGUpKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfYnVzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vYnVzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHZhciBlbDtcblxuICBpZiAodGhpcy5vcHRzLmRlc3Ryb3lFdmVudEJ1cykge1xuICAgIF9idXNbXCJkZWZhdWx0XCJdLiRvZmYoKTtcblxuICAgIF9idXNbXCJkZWZhdWx0XCJdLiRkZXN0cm95KCk7XG4gIH1cblxuICBpZiAodGhpcy52dWV4ICYmICF0aGlzLm9wdHMucHJlc2VydmVTdGF0ZSkge1xuICAgIHRoaXMuJHN0b3JlLnVucmVnaXN0ZXJNb2R1bGUodGhpcy5uYW1lKTtcbiAgfVxuXG4gIGlmICh0aGlzLm9wdHMuZmlsdGVyQnlDb2x1bW4pIHtcbiAgICB0aGlzLmRhdGVwaWNrZXJDb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgZWwgPSAkKF90aGlzLiRlbCkuZmluZChcIiNWdWVUYWJsZXNfX1wiICsgJC5lc2NhcGVTZWxlY3Rvcihjb2x1bW4pICsgXCItZmlsdGVyXCIpLmRhdGEoJ2RhdGVyYW5nZXBpY2tlcicpO1xuICAgICAgaWYgKGVsKSBlbC5yZW1vdmUoKTtcbiAgICB9KTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGxpc3RDb2x1bW5zT2JqZWN0OiByZXF1aXJlKCcuLi9jb21wdXRlZC9saXN0LWNvbHVtbnMtb2JqZWN0JyksXG4gIGFsbENvbHVtbnM6IHJlcXVpcmUoJy4uL2NvbXB1dGVkL2FsbC1jb2x1bW5zJyksXG4gIHRlbXBsYXRlc0tleXM6IHJlcXVpcmUoJy4uL2NvbXB1dGVkL3RlbXBsYXRlcy1rZXlzJyksXG4gIG9wdHM6IHJlcXVpcmUoJy4uL2NvbXB1dGVkL29wdHMnKSxcbiAgdGFibGVEYXRhOiByZXF1aXJlKCcuLi9jb21wdXRlZC90YWJsZS1kYXRhJyksXG4gIHN0b3JhZ2U6IHJlcXVpcmUoJy4uL2NvbXB1dGVkL3N0b3JhZ2UnKSxcbiAgZmlsdGVyYWJsZUNvbHVtbnM6IHJlcXVpcmUoJy4uL2NvbXB1dGVkL2ZpbHRlcmFibGUtY29sdW1ucycpLFxuICBkYXRlcGlja2VyQ29sdW1uczogcmVxdWlyZSgnLi4vY29tcHV0ZWQvZGF0ZXBpY2tlci1jb2x1bW5zJyksXG4gIGhhc0NoaWxkUm93OiByZXF1aXJlKCcuLi9jb21wdXRlZC9oYXMtY2hpbGQtcm93JyksXG4gIGNvbHNwYW46IHJlcXVpcmUoJy4uL2NvbXB1dGVkL2NvbHNwYW4nKSxcbiAgaGFzR2VuZXJpY0ZpbHRlcjogcmVxdWlyZSgnLi4vY29tcHV0ZWQvaGFzLWdlbmVyaWMtZmlsdGVyJyksXG4gIHN0YXRlS2V5OiBmdW5jdGlvbiBzdGF0ZUtleSgpIHtcbiAgICB2YXIga2V5ID0gdGhpcy5uYW1lID8gdGhpcy5uYW1lIDogdGhpcy5pZDtcbiAgICByZXR1cm4gJ3Z1ZXRhYmxlc18nICsga2V5O1xuICB9LFxuICBQYWdlOiBmdW5jdGlvbiBQYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnBhZ2U7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBpc19lbXB0eSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXMtZW1wdHknKTtcblxudmFyIHJlZ2lzdGVyVnVleE1vZHVsZSA9IHJlcXVpcmUoJy4uL3N0YXRlL3JlZ2lzdGVyLW1vZHVsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzZWxmKSB7XG4gIGlmIChzZWxmLnZ1ZXgpIHtcbiAgICByZWdpc3RlclZ1ZXhNb2R1bGUoc2VsZik7XG4gIH0gZWxzZSB7XG4gICAgc2VsZi5saW1pdCA9IHNlbGYub3B0cy5wZXJQYWdlO1xuICB9XG5cbiAgaWYgKGlzX2VtcHR5KHNlbGYub3B0cy5jb2x1bW5zRGlzcGxheSkgfHwgdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcbiAgc2VsZi5jb2x1bW5zRGlzcGxheSA9IGdldENvbHVtbnNEaXNwbGF5KHNlbGYub3B0cy5jb2x1bW5zRGlzcGxheSk7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBmdW5jdGlvbiAoKSB7XG4gICAgc2VsZi53aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICB9LmJpbmQoc2VsZikpO1xufTtcblxuZnVuY3Rpb24gZ2V0Q29sdW1uc0Rpc3BsYXkoY29sdW1uc0Rpc3BsYXkpIHtcbiAgdmFyIHJlcyA9IHt9O1xuICB2YXIgcmFuZ2U7XG4gIHZhciBkZXZpY2U7XG4gIHZhciBvcGVyYXRvcjtcblxuICBmb3IgKHZhciBjb2x1bW4gaW4gY29sdW1uc0Rpc3BsYXkpIHtcbiAgICBvcGVyYXRvciA9IGdldE9wZXJhdG9yKGNvbHVtbnNEaXNwbGF5W2NvbHVtbl0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGRldmljZSA9IGdldERldmljZShjb2x1bW5zRGlzcGxheVtjb2x1bW5dKTtcbiAgICAgIHJhbmdlID0gZ2V0UmFuZ2UoZGV2aWNlLCBvcGVyYXRvcik7XG4gICAgICByZXNbY29sdW1uXSA9IHJhbmdlLmNvbmNhdChbb3BlcmF0b3JdKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybignVW5rbm93biBkZXZpY2UgJyArIGRldmljZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gZ2V0UmFuZ2UoZGV2aWNlLCBvcGVyYXRvcikge1xuICB2YXIgZGV2aWNlcyA9IHtcbiAgICBkZXNrdG9wOiBbMTAyNCwgbnVsbF0sXG4gICAgdGFibGV0OiBbNDgwLCAxMDI0XSxcbiAgICBtb2JpbGU6IFswLCA0ODBdLFxuICAgIHRhYmxldEw6IFs3NjgsIDEwMjRdLFxuICAgIHRhYmxldFA6IFs0ODAsIDc2OF0sXG4gICAgbW9iaWxlTDogWzMyMCwgNDgwXSxcbiAgICBtb2JpbGVQOiBbMCwgMzIwXVxuICB9O1xuXG4gIHN3aXRjaCAob3BlcmF0b3IpIHtcbiAgICBjYXNlICdtaW4nOlxuICAgICAgcmV0dXJuIFtkZXZpY2VzW2RldmljZV1bMF0sIG51bGxdO1xuXG4gICAgY2FzZSAnbWF4JzpcbiAgICAgIHJldHVybiBbMCwgZGV2aWNlc1tkZXZpY2VdWzFdXTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZGV2aWNlc1tkZXZpY2VdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldE9wZXJhdG9yKHZhbCkge1xuICB2YXIgcGllY2VzID0gdmFsLnNwbGl0KCdfJyk7XG4gIGlmIChbJ25vdCcsICdtaW4nLCAnbWF4J10uaW5kZXhPZihwaWVjZXNbMF0pID4gLTEpIHJldHVybiBwaWVjZXNbMF07XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0RGV2aWNlKHZhbCkge1xuICB2YXIgcGllY2VzID0gdmFsLnNwbGl0KCdfJyk7XG4gIHJldHVybiBwaWVjZXMubGVuZ3RoID4gMSA/IHBpZWNlc1sxXSA6IHBpZWNlc1swXTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB7XG4gICAgaWQ6IG1ha2VJZCgpLFxuICAgIGFsbEZpbHRlcmVkRGF0YTogW10sXG4gICAgb3BlbkNoaWxkUm93czogW10sXG4gICAgd2luZG93V2lkdGg6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LmlubmVyV2lkdGggOiBudWxsLFxuICAgIHVzZXJNdWx0aVNvcnRpbmc6IHt9LFxuICAgIGVkaXRpbmc6IFtdXG4gIH07XG59O1xuXG5mdW5jdGlvbiBtYWtlSWQoKSB7XG4gIHZhciB0ZXh0ID0gXCJcIjtcbiAgdmFyIHBvc3NpYmxlID0gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OVwiO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgNTsgaSsrKSB7XG4gICAgdGV4dCArPSBwb3NzaWJsZS5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogcG9zc2libGUubGVuZ3RoKSk7XG4gIH1cblxuICByZXR1cm4gdGV4dDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGluaXRRdWVyeTogcmVxdWlyZSgnLi4vbWV0aG9kcy9pbml0LXF1ZXJ5JyksXG4gIHJlc2V0UXVlcnk6IHJlcXVpcmUoJy4uL21ldGhvZHMvcmVzZXQtcXVlcnknKSxcbiAgaW5pdEN1c3RvbUZpbHRlcnM6IHJlcXVpcmUoJy4uL21ldGhvZHMvaW5pdC1jdXN0b20tZmlsdGVycycpLFxuICBpbml0T3B0aW9uczogcmVxdWlyZSgnLi4vbWV0aG9kcy9pbml0LW9wdGlvbnMnKSxcbiAgc29ydGFibGVDbGFzczogcmVxdWlyZSgnLi4vbWV0aG9kcy9zb3J0YWJsZS1jbGFzcycpLFxuICBzb3J0YWJsZUNoZXZyb25DbGFzczogcmVxdWlyZSgnLi4vbWV0aG9kcy9zb3J0YWJsZS1jaGV2cm9uLWNsYXNzJyksXG4gIGRpc3BsYXk6IHJlcXVpcmUoJy4uL21ldGhvZHMvZGlzcGxheScpLFxuICBvcmRlckJ5Q29sdW1uOiByZXF1aXJlKCcuLi9tZXRob2RzL29yZGVyLWJ5LWNvbHVtbicpLFxuICBnZXRIZWFkaW5nOiByZXF1aXJlKCcuLi9tZXRob2RzL2dldC1oZWFkaW5nJyksXG4gIGdldEhlYWRpbmdUb29sdGlwOiByZXF1aXJlKCcuLi9tZXRob2RzL2dldC1oZWFkaW5nLXRvb2x0aXAnKSxcbiAgc29ydGFibGU6IHJlcXVpcmUoJy4uL21ldGhvZHMvc29ydGFibGUnKSxcbiAgc2VydmVyU2VhcmNoOiByZXF1aXJlKCcuLi9tZXRob2RzL3NlcnZlci1zZWFyY2gnKSxcbiAgaW5pdE9yZGVyQnk6IHJlcXVpcmUoJy4uL21ldGhvZHMvaW5pdC1vcmRlci1ieScpLFxuICBpbml0RGF0ZUZpbHRlcnM6IHJlcXVpcmUoJy4uL21ldGhvZHMvaW5pdC1kYXRlLWZpbHRlcnMnKSxcbiAgc2V0RmlsdGVyOiByZXF1aXJlKCcuLi9tZXRob2RzL3NldC1maWx0ZXInKSxcbiAgc2V0UGFnZTogcmVxdWlyZSgnLi4vbWV0aG9kcy9zZXQtcGFnZScpLFxuICBzZXRPcmRlcjogcmVxdWlyZSgnLi4vbWV0aG9kcy9zZXQtb3JkZXInKSxcbiAgaW5pdFBhZ2luYXRpb246IHJlcXVpcmUoJy4uL21ldGhvZHMvaW5pdC1wYWdpbmF0aW9uJyksXG4gIGZpbHRlcmFibGU6IHJlcXVpcmUoJy4uL21ldGhvZHMvZmlsdGVyYWJsZScpLFxuICBpc1RleHRGaWx0ZXI6IHJlcXVpcmUoJy4uL21ldGhvZHMvaXMtdGV4dC1maWx0ZXInKSxcbiAgaXNEYXRlRmlsdGVyOiByZXF1aXJlKCcuLi9tZXRob2RzL2lzLWRhdGUtZmlsdGVyJyksXG4gIGlzTGlzdEZpbHRlcjogcmVxdWlyZSgnLi4vbWV0aG9kcy9pcy1saXN0LWZpbHRlcicpLFxuICBoaWdobGlnaHRNYXRjaDogcmVxdWlyZSgnLi4vZmlsdGVycy9oaWdobGlnaHQtbWF0Y2hlcycpLFxuICBmb3JtYXREYXRlOiByZXF1aXJlKCcuLi9maWx0ZXJzL2Zvcm1hdC1kYXRlJyksXG4gIGhhc0RhdGVGaWx0ZXJzOiByZXF1aXJlKCcuLi9tZXRob2RzL2hhcy1kYXRlLWZpbHRlcnMnKSxcbiAgYXBwbHlGaWx0ZXJzOiByZXF1aXJlKCcuLi9tZXRob2RzL2FwcGx5LWZpbHRlcnMnKSxcbiAgb3B0aW9uVGV4dDogcmVxdWlyZSgnLi4vZmlsdGVycy9vcHRpb24tdGV4dCcpLFxuICByZW5kZXI6IHJlcXVpcmUoJy4uL21ldGhvZHMvcmVuZGVyJyksXG4gIHJvd1dhc0NsaWNrZWQ6IHJlcXVpcmUoJy4uL21ldGhvZHMvcm93LXdhcy1jbGlja2VkJyksXG4gIHNldExpbWl0OiByZXF1aXJlKCcuLi9tZXRob2RzL3NldC1saW1pdCcpLFxuICBnZXRPcGVuQ2hpbGRSb3dzOiByZXF1aXJlKCcuLi9tZXRob2RzL2dldC1vcGVuLWNoaWxkLXJvd3MnKSxcbiAgZGlzcGF0Y2g6IHJlcXVpcmUoJy4uL21ldGhvZHMvZGlzcGF0Y2gnKSxcbiAgdG9nZ2xlQ2hpbGRSb3c6IHJlcXVpcmUoJy4uL21ldGhvZHMvdG9nZ2xlLWNoaWxkLXJvdycpLFxuICBjaGlsZFJvd1RvZ2dsZXJDbGFzczogcmVxdWlyZSgnLi4vbWV0aG9kcy9jaGlsZC1yb3ctdG9nZ2xlci1jbGFzcycpLFxuICBzZW5kUmVxdWVzdDogcmVxdWlyZSgnLi4vbWV0aG9kcy9zZW5kLXJlcXVlc3QnKSxcbiAgZ2V0UmVzcG9uc2VEYXRhOiByZXF1aXJlKCcuLi9tZXRob2RzL2dldC1yZXNwb25zZS1kYXRhJyksXG4gIGdldFNvcnRGbjogcmVxdWlyZSgnLi4vbWV0aG9kcy9nZXQtc29ydC1mbicpLFxuICBpbml0U3RhdGU6IHJlcXVpcmUoJy4uL21ldGhvZHMvaW5pdC1zdGF0ZScpLFxuICB1cGRhdGVTdGF0ZTogcmVxdWlyZSgnLi4vbWV0aG9kcy91cGRhdGUtc3RhdGUnKSxcbiAgY29sdW1uQ2xhc3M6IHJlcXVpcmUoJy4uL21ldGhvZHMvY29sdW1uLWNsYXNzJyksXG4gIGdldE5hbWU6IHJlcXVpcmUoJy4uL21ldGhvZHMvZ2V0LW5hbWUnKSxcbiAgdG9nZ2xlQ29sdW1uOiByZXF1aXJlKCcuLi9tZXRob2RzL3RvZ2dsZS1jb2x1bW4nKSxcbiAgc2V0VXNlck11bHRpU29ydDogcmVxdWlyZSgnLi4vbWV0aG9kcy9zZXQtdXNlci1tdWx0aS1zb3J0JyksXG4gIF9jZWxsQ2xhc3NlczogcmVxdWlyZSgnLi4vbWV0aG9kcy9jZWxsLWNsYXNzZXMnKSxcbiAgX3NldEZpbHRlcnNET006IHJlcXVpcmUoJy4uL21ldGhvZHMvc2V0LWZpbHRlcnMtZG9tJyksXG4gIF9jdXJyZW50bHlTb3J0ZWQ6IHJlcXVpcmUoJy4uL21ldGhvZHMvY3VycmVudGx5LXNvcnRlZCcpLFxuICBfZ2V0Q2hpbGRSb3dUZW1wbGF0ZTogcmVxdWlyZSgnLi4vbWV0aG9kcy9nZXQtY2hpbGQtcm93LXRlbXBsYXRlJyksXG4gIF90b2dnbGVDb2x1bW5zRHJvcGRvd246IHJlcXVpcmUoJy4uL21ldGhvZHMvdG9nZ2xlLWNvbHVtbnMtZHJvcGRvd24nKSxcbiAgX29ubHlDb2x1bW46IHJlcXVpcmUoJy4uL21ldGhvZHMvb25seS1jb2x1bW4nKSxcbiAgX29uUGFnaW5hdGlvbjogcmVxdWlyZSgnLi4vbWV0aG9kcy9vbi1wYWdpbmF0aW9uJyksXG4gIF90b2dnbGVHcm91cERpcmVjdGlvbjogcmVxdWlyZSgnLi4vbWV0aG9kcy90b2dnbGUtZ3JvdXAtZGlyZWN0aW9uJyksXG4gIF9nZXRJbml0aWFsRGF0ZVJhbmdlOiByZXF1aXJlKCcuLi9tZXRob2RzL2dldC1pbml0aWFsLWRhdGUtcmFuZ2UnKSxcbiAgX3NldERhdGVwaWNrZXJUZXh0OiByZXF1aXJlKCcuLi9tZXRob2RzL3NldC1kYXRlcGlja2VyLXRleHQnKSxcbiAgX2luaXRpYWxPcmRlckFzY2VuZGluZzogcmVxdWlyZSgnLi4vbWV0aG9kcy9pbml0aWFsLW9yZGVyLWFzY2VuZGluZycpLFxuICBkYXRlRm9ybWF0OiByZXF1aXJlKCcuLi9tZXRob2RzL2RhdGUtZm9ybWF0JyksXG4gIF9zZXRDb2x1bW5zRHJvcGRvd25DbG9zZUxpc3RlbmVyOiByZXF1aXJlKCcuLi9tZXRob2RzL3NldC1jb2x1bW5zLWRyb3Bkb3duLWNsb3NlLWxpc3RlbmVyJyksXG4gIF9nZXRWYWx1ZTogcmVxdWlyZSgnLi4vbWV0aG9kcy9nZXQtdmFsdWUnKSxcbiAgX2dldENvbHVtbk5hbWU6IHJlcXVpcmUoJy4uL21ldGhvZHMvZ2V0LWNvbHVtbi1uYW1lJyksXG4gIF9zaG91bGRTaG93Q29sdW1uT25Jbml0OiByZXF1aXJlKCcuLi9tZXRob2RzL3Nob3VsZC1zaG93LWNvbHVtbi1vbi1pbml0Jylcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJtZXJnZVwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChjbGFzc2VzKSB7XG4gICAgaWYgKCFfdGhpcy5vcHRzLmZpbHRlckJ5Q29sdW1uIHx8ICFfdGhpcy5vcHRzLmZpbHRlcmFibGUpIHJldHVybiAnJztcblxuICAgIHZhciB0ZXh0RmlsdGVyID0gcmVxdWlyZSgnLi90ZXh0LWZpbHRlcicpLmNhbGwoX3RoaXMsIGgsIGNsYXNzZXMuaW5wdXQpO1xuXG4gICAgdmFyIGRhdGVGaWx0ZXIgPSByZXF1aXJlKCcuL2RhdGUtZmlsdGVyJykuY2FsbChfdGhpcywgaCk7XG5cbiAgICB2YXIgbGlzdEZpbHRlciA9IHJlcXVpcmUoJy4vbGlzdC1maWx0ZXInKS5jYWxsKF90aGlzLCBoLCBjbGFzc2VzLnNlbGVjdCk7XG5cbiAgICB2YXIgZmlsdGVycyA9IFtdO1xuICAgIHZhciBmaWx0ZXI7XG4gICAgaWYgKF90aGlzLmhhc0NoaWxkUm93ICYmIF90aGlzLm9wdHMuY2hpbGRSb3dUb2dnbGVyRmlyc3QgJiYgX3RoaXMub3B0cy5zaG93Q2hpbGRSb3dUb2dnbGVyKSBmaWx0ZXJzLnB1c2goaChcInRoXCIpKTtcblxuICAgIF90aGlzLmFsbENvbHVtbnMubWFwKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgIHZhciBmaWx0ZXIgPSAnJztcblxuICAgICAgaWYgKF90aGlzLmZpbHRlcmFibGUoY29sdW1uKSkge1xuICAgICAgICBzd2l0Y2ggKHRydWUpIHtcbiAgICAgICAgICBjYXNlIF90aGlzLmlzVGV4dEZpbHRlcihjb2x1bW4pOlxuICAgICAgICAgICAgZmlsdGVyID0gdGV4dEZpbHRlcihjb2x1bW4pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF90aGlzLmlzRGF0ZUZpbHRlcihjb2x1bW4pOlxuICAgICAgICAgICAgZmlsdGVyID0gZGF0ZUZpbHRlcihjb2x1bW4pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF90aGlzLmlzTGlzdEZpbHRlcihjb2x1bW4pOlxuICAgICAgICAgICAgZmlsdGVyID0gbGlzdEZpbHRlcihjb2x1bW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBfdGhpcy4kc2xvdHNbXCJmaWx0ZXJfX1wiLmNvbmNhdChjb2x1bW4pXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgZmlsdGVyID0gZmlsdGVyID8gaChcImRpdlwiLCBbZmlsdGVyLCBfdGhpcy4kc2xvdHNbXCJmaWx0ZXJfX1wiLmNvbmNhdChjb2x1bW4pXV0pIDogX3RoaXMuJHNsb3RzW1wiZmlsdGVyX19cIi5jb25jYXQoY29sdW1uKV07XG4gICAgICB9XG5cbiAgICAgIGZpbHRlcnMucHVzaChoKFwidGhcIiwge1xuICAgICAgICBcImNsYXNzXCI6IF90aGlzLmNvbHVtbkNsYXNzKGNvbHVtbilcbiAgICAgIH0sIFtoKFwiZGl2XCIsIF9kZWZpbmVQcm9wZXJ0eSh7XG4gICAgICAgIFwiY2xhc3NcIjogXCJWdWVUYWJsZXNfX2NvbHVtbi1maWx0ZXJcIlxuICAgICAgfSwgXCJjbGFzc1wiLCAnVnVlVGFibGVzX18nICsgY29sdW1uICsgJy1maWx0ZXItd3JhcHBlcicpLCBbZmlsdGVyXSldKSk7XG4gICAgfSk7XG5cbiAgICBpZiAoX3RoaXMuaGFzQ2hpbGRSb3cgJiYgIV90aGlzLm9wdHMuY2hpbGRSb3dUb2dnbGVyRmlyc3QgJiYgX3RoaXMub3B0cy5zaG93Q2hpbGRSb3dUb2dnbGVyKSBmaWx0ZXJzLnB1c2goaChcInRoXCIpKTtcbiAgICByZXR1cm4gaChcInRyXCIsIHtcbiAgICAgIFwiY2xhc3NcIjogXCJWdWVUYWJsZXNfX2ZpbHRlcnMtcm93XCJcbiAgICB9LCBbZmlsdGVyc10pO1xuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGRyb3Bkb3duV3JhcHBlciA9IHJlcXVpcmUoJy4vZHJvcGRvd24td3JhcHBlcicpO1xuXG52YXIgZHJvcGRvd25JdGVtV3JhcHBlciA9IHJlcXVpcmUoJy4vZHJvcGRvd24taXRlbS13cmFwcGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGgpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICByZXR1cm4gZnVuY3Rpb24gKGNsYXNzZXMpIHtcbiAgICB2YXIgY29scyA9IF90aGlzLmNvbHVtbnMubWFwKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgIHJldHVybiBkcm9wZG93bkl0ZW1XcmFwcGVyKGgsIGNsYXNzZXMsIGgoXCJhXCIsIHtcbiAgICAgICAgXCJjbGFzc1wiOiBjbGFzc2VzLmRyb3Bkb3duLml0ZW0sXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgaHJlZjogXCIjXCJcbiAgICAgICAgfSxcbiAgICAgICAgb246IHtcbiAgICAgICAgICBcImNsaWNrXCI6IGZ1bmN0aW9uIGNsaWNrKCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzLnRvZ2dsZUNvbHVtbihjb2x1bW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgW2goXCJpbnB1dFwiLCB7XG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICAgIGRpc2FibGVkOiBfdGhpcy5fb25seUNvbHVtbihjb2x1bW4pXG4gICAgICAgIH0sXG4gICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgXCJ2YWx1ZVwiOiBjb2x1bW4sXG4gICAgICAgICAgXCJjaGVja2VkXCI6IF90aGlzLmFsbENvbHVtbnMuaW5jbHVkZXMoY29sdW1uKVxuICAgICAgICB9XG4gICAgICB9KSwgX3RoaXMuZ2V0SGVhZGluZyhjb2x1bW4pXSkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGgoXCJkaXZcIiwge1xuICAgICAgcmVmOiBcImNvbHVtbnNkcm9wZG93blwiLFxuICAgICAgXCJjbGFzc1wiOiBcIlwiLmNvbmNhdChjbGFzc2VzLmRyb3Bkb3duLmNvbnRhaW5lciwgXCIgXCIpLmNvbmNhdChjbGFzc2VzLnJpZ2h0LCBcIiBWdWVUYWJsZXNfX2NvbHVtbnMtZHJvcGRvd25cIilcbiAgICB9LCBbaChcImJ1dHRvblwiLCB7XG4gICAgICBhdHRyczoge1xuICAgICAgICB0eXBlOiBcImJ1dHRvblwiXG4gICAgICB9LFxuICAgICAgXCJjbGFzc1wiOiBcIlwiLmNvbmNhdChjbGFzc2VzLmJ1dHRvbiwgXCIgXCIpLmNvbmNhdChjbGFzc2VzLmRyb3Bkb3duLnRyaWdnZXIpLFxuICAgICAgb246IHtcbiAgICAgICAgXCJjbGlja1wiOiBfdGhpcy5fdG9nZ2xlQ29sdW1uc0Ryb3Bkb3duLmJpbmQoX3RoaXMpXG4gICAgICB9XG4gICAgfSwgW190aGlzLmRpc3BsYXkoJ2NvbHVtbnMnKSwgaChcInNwYW5cIiwge1xuICAgICAgXCJjbGFzc1wiOiBcIlwiLmNvbmNhdChjbGFzc2VzLmljb24sIFwiIFwiKS5jb25jYXQoY2xhc3Nlcy5zbWFsbClcbiAgICB9LCBbaChcImlcIiwge1xuICAgICAgXCJjbGFzc1wiOiBjbGFzc2VzLmRyb3Bkb3duLmNhcmV0XG4gICAgfSldKV0pLCBkcm9wZG93bldyYXBwZXIuY2FsbChfdGhpcywgaCwgY2xhc3NlcywgY29scyldKTtcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGgpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICByZXR1cm4gZnVuY3Rpb24gKGNvbHVtbikge1xuICAgIHJldHVybiBoKFwiZGl2XCIsIHtcbiAgICAgIFwiY2xhc3NcIjogXCJWdWVUYWJsZXNfX2RhdGUtZmlsdGVyXCIsXG4gICAgICBhdHRyczoge1xuICAgICAgICBpZDogJ1Z1ZVRhYmxlc19fJyArIGNvbHVtbiArICctZmlsdGVyJ1xuICAgICAgfVxuICAgIH0sIFtoKFwic3BhblwiLCB7XG4gICAgICBcImNsYXNzXCI6IFwiVnVlVGFibGVzX19maWx0ZXItcGxhY2Vob2xkZXJcIlxuICAgIH0sIFtfdGhpcy5kaXNwbGF5KCdmaWx0ZXJCeScsIHtcbiAgICAgIGNvbHVtbjogX3RoaXMuZ2V0SGVhZGluZyhjb2x1bW4pXG4gICAgfSldKV0pO1xuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaCwgY2xhc3NlcywgaXRlbSkge1xuICBpZiAoY2xhc3Nlcy5mcmFtZXdvcmsgPT09ICdidWxtYScpIHtcbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIHJldHVybiBoKFwibGlcIiwgW2l0ZW1dKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGgpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmIChfdGhpcy5jb3VudCA+IDAgJiYgX3RoaXMub3B0cy5wYWdpbmF0aW9uLmRyb3Bkb3duKSB7XG4gICAgICB2YXIgcGVyUGFnZSA9IHBhcnNlSW50KF90aGlzLmxpbWl0KTtcbiAgICAgIHZhciBmcm9tID0gKF90aGlzLlBhZ2UgLSAxKSAqIHBlclBhZ2UgKyAxO1xuICAgICAgdmFyIHRvID0gX3RoaXMuUGFnZSA9PSBfdGhpcy50b3RhbFBhZ2VzID8gX3RoaXMuY291bnQgOiBmcm9tICsgcGVyUGFnZSAtIDE7XG5cbiAgICAgIHZhciBwYXJ0cyA9IF90aGlzLm9wdHMudGV4dHMuY291bnQuc3BsaXQoJ3wnKTtcblxuICAgICAgdmFyIGkgPSBNYXRoLm1pbihfdGhpcy5jb3VudCA9PSAxID8gMiA6IF90aGlzLnRvdGFsUGFnZXMgPT0gMSA/IDEgOiAwLCBwYXJ0cy5sZW5ndGggLSAxKTtcbiAgICAgIHZhciBjb3VudCA9IHBhcnRzW2ldLnJlcGxhY2UoJ3tjb3VudH0nLCBfdGhpcy5jb3VudCkucmVwbGFjZSgne2Zyb219JywgZnJvbSkucmVwbGFjZSgne3RvfScsIHRvKTtcbiAgICAgIHJldHVybiBoKFwiZGl2XCIsIHtcbiAgICAgICAgXCJjbGFzc1wiOiBcIlZ1ZVBhZ2luYXRpb25cIlxuICAgICAgfSwgW2goXCJwXCIsIHtcbiAgICAgICAgXCJjbGFzc1wiOiBcIlZ1ZVBhZ2luYXRpb25fX2NvdW50XCJcbiAgICAgIH0sIFtjb3VudF0pXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGRlYm91bmNlID0gcmVxdWlyZSgnZGVib3VuY2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaCkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoc2VsZWN0Q2xhc3MsIGlkKSB7XG4gICAgdmFyIHBhZ2VzID0gW107XG4gICAgdmFyIHNlbGVjdGVkO1xuXG4gICAgZm9yICh2YXIgcGFnID0gMTsgcGFnIDw9IF90aGlzLnRvdGFsUGFnZXM7IHBhZysrKSB7XG4gICAgICB2YXIgc2VsZWN0ZWQgPSBfdGhpcy5wYWdlID09IHBhZztcbiAgICAgIHBhZ2VzLnB1c2goaChcIm9wdGlvblwiLCB7XG4gICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgXCJ2YWx1ZVwiOiBwYWcsXG4gICAgICAgICAgXCJzZWxlY3RlZFwiOiBzZWxlY3RlZFxuICAgICAgICB9XG4gICAgICB9LCBbcGFnXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBoKFwic2VsZWN0XCIsIHtcbiAgICAgIFwiY2xhc3NcIjogXCJcIi5jb25jYXQoc2VsZWN0Q2xhc3MsIFwiIGRyb3Bkb3duLXBhZ2luYXRpb25cIiksXG4gICAgICBkaXJlY3RpdmVzOiBbe1xuICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgdmFsdWU6IF90aGlzLnRvdGFsUGFnZXMgPiAxXG4gICAgICB9XSxcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIG5hbWU6IFwicGFnZVwiLFxuICAgICAgICBpZDogaWRcbiAgICAgIH0sXG4gICAgICByZWY6IFwicGFnZVwiLFxuICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgXCJ2YWx1ZVwiOiBfdGhpcy5wYWdlXG4gICAgICB9LFxuICAgICAgb246IHtcbiAgICAgICAgXCJjaGFuZ2VcIjogX3RoaXMuc2V0UGFnZS5iaW5kKF90aGlzLCBudWxsLCBmYWxzZSlcbiAgICAgIH1cbiAgICB9LCBbcGFnZXNdKTtcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGgsIGNsYXNzZXMsIGNvbHVtbnMpIHtcbiAgaWYgKGNsYXNzZXMuZnJhbWV3b3JrID09PSAnYnVsbWEnKSB7XG4gICAgcmV0dXJuIGgoXCJkaXZcIiwge1xuICAgICAgXCJjbGFzc1wiOiBjbGFzc2VzLmRyb3Bkb3duLm1lbnUsXG4gICAgICBzdHlsZTogdGhpcy5kaXNwbGF5Q29sdW1uc0Ryb3Bkb3duID8gJ2Rpc3BsYXk6YmxvY2snIDogJ2Rpc3BsYXk6bm9uZSdcbiAgICB9LCBbaChcImRpdlwiLCB7XG4gICAgICBcImNsYXNzXCI6IGNsYXNzZXMuZHJvcGRvd24uY29udGVudFxuICAgIH0sIFtjb2x1bW5zXSldKTtcbiAgfVxuXG4gIGlmIChjbGFzc2VzLmZyYW1ld29yayA9PT0gJ2Jvb3RzdHJhcDQnKSB7XG4gICAgcmV0dXJuIGgoXCJkaXZcIiwge1xuICAgICAgXCJjbGFzc1wiOiBjbGFzc2VzLmRyb3Bkb3duLm1lbnUsXG4gICAgICBzdHlsZTogdGhpcy5kaXNwbGF5Q29sdW1uc0Ryb3Bkb3duID8gJ2Rpc3BsYXk6YmxvY2snIDogJ2Rpc3BsYXk6bm9uZSdcbiAgICB9LCBbY29sdW1uc10pO1xuICB9XG5cbiAgcmV0dXJuIGgoXCJ1bFwiLCB7XG4gICAgXCJjbGFzc1wiOiBjbGFzc2VzLmRyb3Bkb3duLm1lbnUsXG4gICAgc3R5bGU6IHRoaXMuZGlzcGxheUNvbHVtbnNEcm9wZG93biA/ICdkaXNwbGF5OmJsb2NrJyA6ICdkaXNwbGF5Om5vbmUnXG4gIH0sIFtjb2x1bW5zXSk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChyaWdodCkge1xuICAgIHZhciB0aGF0ID0gX3RoaXM7XG5cbiAgICB2YXIgc29ydENvbnRyb2wgPSByZXF1aXJlKFwiLi9zb3J0LWNvbnRyb2xcIikoaCwgcmlnaHQpO1xuXG4gICAgdmFyIGhlYWRpbmdzID0gW107XG4gICAgaWYgKF90aGlzLmhhc0NoaWxkUm93ICYmIF90aGlzLm9wdHMuY2hpbGRSb3dUb2dnbGVyRmlyc3QgJiYgX3RoaXMub3B0cy5zaG93Q2hpbGRSb3dUb2dnbGVyKSBoZWFkaW5ncy5wdXNoKGgoXCJ0aFwiKSk7XG5cbiAgICBfdGhpcy5hbGxDb2x1bW5zLm1hcChmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICBoZWFkaW5ncy5wdXNoKGgoXCJ0aFwiLCB7XG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgXCJrZXlwcmVzc1wiOiBmdW5jdGlvbiBrZXlwcmVzcyhlKSB7XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIikge1xuICAgICAgICAgICAgICB0aGF0Lm9yZGVyQnlDb2x1bW4uYmluZCh0aGF0LCBjb2x1bW4sIGUpKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImNsaWNrXCI6IGZ1bmN0aW9uIGNsaWNrKGUpIHtcbiAgICAgICAgICAgIGlmIChlLnRhcmdldC5jbGFzc05hbWUgIT09IFwicmVzaXplLWhhbmRsZVwiKSB7XG4gICAgICAgICAgICAgIHRoYXQub3JkZXJCeUNvbHVtbi5iaW5kKHRoYXQsIGNvbHVtbiwgZSkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiY2xhc3NcIjogdGhpcy5zb3J0YWJsZUNsYXNzKGNvbHVtbiksXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdGFiaW5kZXg6IFwiMFwiXG4gICAgICAgIH1cbiAgICAgIH0sIFtoKFwic3BhblwiLCB7XG4gICAgICAgIFwiY2xhc3NcIjogXCJWdWVUYWJsZXNfX2hlYWRpbmdcIixcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB0aXRsZTogdGhpcy5nZXRIZWFkaW5nVG9vbHRpcChjb2x1bW4sIGgpXG4gICAgICAgIH1cbiAgICAgIH0sIFt0aGlzLmdldEhlYWRpbmcoY29sdW1uLCBoKV0pLCBzb3J0Q29udHJvbC5jYWxsKHRoaXMsIGNvbHVtbildKSk7XG4gICAgfS5iaW5kKF90aGlzKSk7XG5cbiAgICBpZiAoX3RoaXMuaGFzQ2hpbGRSb3cgJiYgIV90aGlzLm9wdHMuY2hpbGRSb3dUb2dnbGVyRmlyc3QgJiYgX3RoaXMub3B0cy5zaG93Q2hpbGRSb3dUb2dnbGVyKSBoZWFkaW5ncy5wdXNoKGgoXCJ0aFwiKSk7XG4gICAgcmV0dXJuIGhlYWRpbmdzO1xuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaCwgc2VsZWN0Q2xhc3MpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICByZXR1cm4gZnVuY3Rpb24gKGNvbHVtbikge1xuICAgIHZhciBvcHRpb25zID0gW107XG4gICAgdmFyIHNlbGVjdGVkO1xuICAgIHZhciBzZWFyY2ggPSBfdGhpcy5zb3VyY2UgPT0gJ2NsaWVudCcgPyBfdGhpcy5zZWFyY2guYmluZChfdGhpcywgX3RoaXMuZGF0YSkgOiBfdGhpcy5zZXJ2ZXJTZWFyY2guYmluZChfdGhpcyk7XG5cbiAgICB2YXIgZGlzcGxheWFibGUgPSBfdGhpcy5vcHRzLmxpc3RDb2x1bW5zW2NvbHVtbl0uZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gIWl0ZW0uaGlkZTtcbiAgICB9KTtcblxuICAgIGRpc3BsYXlhYmxlLm1hcChmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICBzZWxlY3RlZCA9IG9wdGlvbi5pZCA9PSBfdGhpcy5xdWVyeVtjb2x1bW5dICYmIF90aGlzLnF1ZXJ5W2NvbHVtbl0gIT09ICcnO1xuICAgICAgb3B0aW9ucy5wdXNoKGgoXCJvcHRpb25cIiwge1xuICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgIFwidmFsdWVcIjogb3B0aW9uLmlkLFxuICAgICAgICAgIFwic2VsZWN0ZWRcIjogc2VsZWN0ZWRcbiAgICAgICAgfVxuICAgICAgfSwgW29wdGlvbi50ZXh0XSkpO1xuICAgIH0pO1xuICAgIHJldHVybiBoKFwiZGl2XCIsIHtcbiAgICAgIFwiY2xhc3NcIjogXCJWdWVUYWJsZXNfX2xpc3QtZmlsdGVyXCIsXG4gICAgICBhdHRyczoge1xuICAgICAgICBpZDogJ1Z1ZVRhYmxlc19fJyArIGNvbHVtbiArICctZmlsdGVyJ1xuICAgICAgfVxuICAgIH0sIFtoKFwic2VsZWN0XCIsIHtcbiAgICAgIFwiY2xhc3NcIjogc2VsZWN0Q2xhc3MsXG4gICAgICBvbjoge1xuICAgICAgICBcImNoYW5nZVwiOiBzZWFyY2hcbiAgICAgIH0sXG4gICAgICBhdHRyczoge1xuICAgICAgICBuYW1lOiBfdGhpcy5fZ2V0Q29sdW1uTmFtZShjb2x1bW4pXG4gICAgICB9LFxuICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgXCJ2YWx1ZVwiOiBfdGhpcy5xdWVyeVtjb2x1bW5dXG4gICAgICB9XG4gICAgfSwgW2goXCJvcHRpb25cIiwge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgdmFsdWU6IFwiXCJcbiAgICAgIH1cbiAgICB9LCBbX3RoaXMuZGlzcGxheSgnZGVmYXVsdE9wdGlvbicsIHtcbiAgICAgIGNvbHVtbjogX3RoaXMub3B0cy5oZWFkaW5nc1tjb2x1bW5dID8gX3RoaXMub3B0cy5oZWFkaW5nc1tjb2x1bW5dIDogY29sdW1uXG4gICAgfSldKSwgb3B0aW9uc10pXSk7XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgZGVib3VuY2UgPSByZXF1aXJlKCdkZWJvdW5jZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChjbGFzc2VzLCBpZCkge1xuICAgIHZhciBzZWFyY2ggPSBfdGhpcy5zb3VyY2UgPT0gJ2NsaWVudCcgPyBfdGhpcy5zZWFyY2guYmluZChfdGhpcywgX3RoaXMuZGF0YSkgOiBfdGhpcy5zZXJ2ZXJTZWFyY2guYmluZChfdGhpcyk7XG4gICAgcmV0dXJuIGgoXCJpbnB1dFwiLCB7XG4gICAgICBcImNsYXNzXCI6IFwiVnVlVGFibGVzX19zZWFyY2hfX2lucHV0IFwiLmNvbmNhdChjbGFzc2VzLmlucHV0LCBcIiBcIikuY29uY2F0KGNsYXNzZXMuc21hbGwpLFxuICAgICAgYXR0cnM6IHtcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBfdGhpcy5kaXNwbGF5KCdmaWx0ZXJQbGFjZWhvbGRlcicpLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIGF1dG9jb21wbGV0ZTogXCJvZmZcIlxuICAgICAgfSxcbiAgICAgIG9uOiB7XG4gICAgICAgIFwia2V5dXBcIjogX3RoaXMub3B0cy5kZWJvdW5jZSA/IGRlYm91bmNlKHNlYXJjaCwgX3RoaXMub3B0cy5kZWJvdW5jZSkgOiBzZWFyY2hcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGgpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICByZXR1cm4gZnVuY3Rpb24gKHRoZW1lKSB7XG4gICAgaWYgKF90aGlzLm9wdHMucGFnaW5hdGlvbiAmJiBfdGhpcy5vcHRzLnBhZ2luYXRpb24uZHJvcGRvd24pIHJldHVybiAnJztcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHRoZW1lOiB0aGVtZSxcbiAgICAgIGNodW5rOiBfdGhpcy5vcHRzLnBhZ2luYXRpb24uY2h1bmssXG4gICAgICBjaHVua3NOYXZpZ2F0aW9uOiBfdGhpcy5vcHRzLnBhZ2luYXRpb24ubmF2LFxuICAgICAgZWRnZU5hdmlnYXRpb246IF90aGlzLm9wdHMucGFnaW5hdGlvbi5lZGdlLFxuICAgICAgdGV4dHM6IHtcbiAgICAgICAgY291bnQ6IF90aGlzLm9wdHMudGV4dHMuY291bnQsXG4gICAgICAgIGZpcnN0OiBfdGhpcy5vcHRzLnRleHRzLmZpcnN0LFxuICAgICAgICBsYXN0OiBfdGhpcy5vcHRzLnRleHRzLmxhc3RcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBuYW1lID0gX3RoaXMudnVleCA/IF90aGlzLm5hbWUgOiBfdGhpcy5pZDtcbiAgICByZXR1cm4gaChcInBhZ2luYXRpb25cIiwge1xuICAgICAgcmVmOiBcInBhZ2luYXRpb25cIixcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgIFwiZm9yXCI6IG5hbWUsXG4gICAgICAgIHZ1ZXg6IF90aGlzLnZ1ZXgsXG4gICAgICAgIHJlY29yZHM6IF90aGlzLmNvdW50LFxuICAgICAgICBcInBlci1wYWdlXCI6IHBhcnNlSW50KF90aGlzLmxpbWl0KVxuICAgICAgfSxcbiAgICAgIG9uOiB7XG4gICAgICAgIFwicGFnaW5hdGVcIjogX3RoaXMuX29uUGFnaW5hdGlvbi5iaW5kKF90aGlzKVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaCkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHZhciBwZXJwYWdlVmFsdWVzID0gW107XG4gIHRoaXMub3B0cy5wZXJQYWdlVmFsdWVzLmV2ZXJ5KGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHZhciBpc0xhc3RFbnRyeSA9IHZhbHVlID49IF90aGlzLmNvdW50O1xuICAgIHZhciBzZWxlY3RlZCA9IF90aGlzLmxpbWl0ID09IHZhbHVlIHx8IGlzTGFzdEVudHJ5ICYmIF90aGlzLmxpbWl0ID4gdmFsdWU7XG4gICAgcGVycGFnZVZhbHVlcy5wdXNoKGgoXCJvcHRpb25cIiwge1xuICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgXCJ2YWx1ZVwiOiB2YWx1ZSxcbiAgICAgICAgXCJzZWxlY3RlZFwiOiBzZWxlY3RlZFxuICAgICAgfVxuICAgIH0sIFt2YWx1ZV0pKTtcbiAgICByZXR1cm4gIWlzTGFzdEVudHJ5O1xuICB9KTtcbiAgcmV0dXJuIHBlcnBhZ2VWYWx1ZXM7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChwZXJwYWdlVmFsdWVzLCBjbHMsIGlkKSB7XG4gICAgcmV0dXJuIGgoXCJzZWxlY3RcIiwge1xuICAgICAgXCJjbGFzc1wiOiBjbHMsXG4gICAgICBhdHRyczoge1xuICAgICAgICBuYW1lOiBcImxpbWl0XCIsXG4gICAgICAgIGlkOiBpZFxuICAgICAgfSxcbiAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgIFwidmFsdWVcIjogX3RoaXMubGltaXRcbiAgICAgIH0sXG4gICAgICBvbjoge1xuICAgICAgICBcImNoYW5nZVwiOiBfdGhpcy5zZXRMaW1pdC5iaW5kKF90aGlzKVxuICAgICAgfVxuICAgIH0sIFtwZXJwYWdlVmFsdWVzXSk7XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2JhYmVsSGVscGVyVnVlSnN4TWVyZ2VQcm9wcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcImJhYmVsLWhlbHBlci12dWUtanN4LW1lcmdlLXByb3BzXCIpKTtcblxudmFyIF9jbG9uZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcImNsb25lXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGgpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICByZXR1cm4gZnVuY3Rpb24gKGNsYXNzZXMpIHtcbiAgICB2YXIgZGF0YTtcblxuICAgIGlmIChfdGhpcy5zb3VyY2UgPT09ICdjbGllbnQnKSB7XG4gICAgICBkYXRhID0gX3RoaXMuZmlsdGVyZWREYXRhO1xuXG4gICAgICBpZiAoIWRhdGEubGVuZ3RoICYmIF90aGlzLnNvdXJjZSA9PT0gJ2NsaWVudCcgJiYgX3RoaXMucGFnZSAhPT0gMSkge1xuICAgICAgICAvLyBkYXRhIHdhcyBkeW5hbWljYWxseSByZW1vdmVkIGdvIHRvIGxhc3QgcGFnZVxuICAgICAgICBfdGhpcy5zZXRQYWdlKF90aGlzLnRvdGFsUGFnZXMgPyBfdGhpcy50b3RhbFBhZ2VzIDogMSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEgPSBfdGhpcy50YWJsZURhdGE7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICB2YXIgY29sc3BhbiA9IF90aGlzLmFsbENvbHVtbnMubGVuZ3RoO1xuICAgICAgaWYgKF90aGlzLmhhc0NoaWxkUm93ICYmIF90aGlzLm9wdHMuc2hvd0NoaWxkUm93VG9nZ2xlcikgY29sc3BhbisrO1xuICAgICAgcmV0dXJuIGgoXCJ0clwiLCB7XG4gICAgICAgIFwiY2xhc3NcIjogXCJWdWVUYWJsZXNfX25vLXJlc3VsdHNcIlxuICAgICAgfSwgW2goXCJ0ZFwiLCB7XG4gICAgICAgIFwiY2xhc3NcIjogXCJ0ZXh0LWNlbnRlclwiLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHRhYmluZGV4OiBcIjBcIixcbiAgICAgICAgICBjb2xzcGFuOiBfdGhpcy5jb2xzcGFuXG4gICAgICAgIH1cbiAgICAgIH0sIFtfdGhpcy5kaXNwbGF5KF90aGlzLmxvYWRpbmcgPyAnbG9hZGluZycgOiAnbm9SZXN1bHRzJyldKV0pO1xuICAgIH1cblxuICAgIHZhciByb3dzID0gW107XG4gICAgdmFyIGNvbHVtbnM7XG4gICAgdmFyIHJvd0tleSA9IF90aGlzLm9wdHMudW5pcXVlS2V5O1xuICAgIHZhciByb3dBdHRyaWJ1dGVzO1xuICAgIHZhciByb3dDbGFzcztcbiAgICB2YXIgcmVjb3JkQ291bnQgPSAoX3RoaXMuUGFnZSAtIDEpICogX3RoaXMubGltaXQ7XG4gICAgdmFyIGN1cnJlbnRHcm91cDtcbiAgICB2YXIgZ3JvdXBTbG90O1xuICAgIHZhciBncm91cFZhbHVlO1xuICAgIHZhciBncm91cEJ5Q29udGVudDtcbiAgICBkYXRhLm1hcChmdW5jdGlvbiAocm93LCBpbmRleCkge1xuICAgICAgaWYgKF90aGlzLm9wdHMuZ3JvdXBCeSAmJiBfdGhpcy5zb3VyY2UgPT09ICdjbGllbnQnICYmIHJvd1tfdGhpcy5vcHRzLmdyb3VwQnldICE9PSBjdXJyZW50R3JvdXApIHtcbiAgICAgICAgZ3JvdXBTbG90ID0gX3RoaXMuZ2V0R3JvdXBTbG90KHJvd1tfdGhpcy5vcHRzLmdyb3VwQnldKTtcbiAgICAgICAgZ3JvdXBWYWx1ZSA9IHJvd1tfdGhpcy5vcHRzLmdyb3VwQnldO1xuICAgICAgICBncm91cEJ5Q29udGVudCA9IF90aGlzLm9wdHMudG9nZ2xlR3JvdXBzID8gaChcImJ1dHRvblwiLCB7XG4gICAgICAgICAgXCJjbGFzc1wiOiBjbGFzc2VzLmJ1dHRvbixcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgXCJjbGlja1wiOiBfdGhpcy50b2dnbGVHcm91cC5iaW5kKF90aGlzLCBncm91cFZhbHVlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSwgW2dyb3VwVmFsdWUsIGgoXCJzcGFuXCIsIHtcbiAgICAgICAgICBcImNsYXNzXCI6IF90aGlzLmdyb3VwVG9nZ2xlSWNvbihncm91cFZhbHVlKVxuICAgICAgICB9KV0pIDogZ3JvdXBWYWx1ZTtcbiAgICAgICAgcm93cy5wdXNoKGgoXCJ0clwiLCB7XG4gICAgICAgICAgXCJjbGFzc1wiOiBjbGFzc2VzLmdyb3VwVHIsXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIFwiY2xpY2tcIjogX3RoaXMuX3RvZ2dsZUdyb3VwRGlyZWN0aW9uLmJpbmQoX3RoaXMpXG4gICAgICAgICAgfVxuICAgICAgICB9LCBbaChcInRkXCIsIHtcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgY29sc3BhbjogX3RoaXMuY29sc3BhblxuICAgICAgICAgIH1cbiAgICAgICAgfSwgW2dyb3VwQnlDb250ZW50LCBncm91cFNsb3RdKV0pKTtcbiAgICAgICAgY3VycmVudEdyb3VwID0gcm93W190aGlzLm9wdHMuZ3JvdXBCeV07XG4gICAgICB9XG5cbiAgICAgIGlmIChfdGhpcy5vcHRzLnRvZ2dsZUdyb3VwcyAmJiBfdGhpcy5jb2xsYXBzZWRHcm91cHMuaW5jbHVkZXMoY3VycmVudEdyb3VwKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGluZGV4ID0gcmVjb3JkQ291bnQgKyBpbmRleCArIDE7XG4gICAgICBjb2x1bW5zID0gW107XG4gICAgICB2YXIgdXBkYXRlO1xuICAgICAgdmFyIGlzRWRpdGluZztcbiAgICAgIHZhciBzZXRFZGl0aW5nO1xuICAgICAgdmFyIHJldmVydFZhbHVlO1xuXG4gICAgICBpZiAoX3RoaXMuaGFzQ2hpbGRSb3cgJiYgX3RoaXMub3B0cy5zaG93Q2hpbGRSb3dUb2dnbGVyKSB7XG4gICAgICAgIHZhciBjaGlsZFJvd1RvZ2dsZXIgPSBoKFwidGRcIiwge1xuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICB0YWJpbmRleDogXCIwXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBcImtleXByZXNzXCI6IGZ1bmN0aW9uIGtleXByZXNzKGUpIHtcbiAgICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMudG9nZ2xlQ2hpbGRSb3cuYmluZChfdGhpcywgcm93W3Jvd0tleV0pKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImNsaWNrXCI6IF90aGlzLnRvZ2dsZUNoaWxkUm93LmJpbmQoX3RoaXMsIHJvd1tyb3dLZXldKVxuICAgICAgICAgIH1cbiAgICAgICAgfSwgW2goXCJzcGFuXCIsIHtcbiAgICAgICAgICBcImNsYXNzXCI6IFwiVnVlVGFibGVzX19jaGlsZC1yb3ctdG9nZ2xlciBcIiArIF90aGlzLmNoaWxkUm93VG9nZ2xlckNsYXNzKHJvd1tyb3dLZXldKVxuICAgICAgICB9KV0pO1xuICAgICAgICBpZiAoX3RoaXMub3B0cy5jaGlsZFJvd1RvZ2dsZXJGaXJzdCkgY29sdW1ucy5wdXNoKGNoaWxkUm93VG9nZ2xlcik7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmFsbENvbHVtbnMubWFwKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgICAgdmFyIHJvd1RlbXBsYXRlID0gX3RoaXMuJHNjb3BlZFNsb3RzICYmIF90aGlzLiRzY29wZWRTbG90c1tjb2x1bW5dO1xuXG4gICAgICAgIGlmIChyb3dUZW1wbGF0ZSkge1xuICAgICAgICAgIHZhciByb3dUZW1wbGF0ZURhdGEgPSB7XG4gICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgICAgICAgaW5kZXg6IGluZGV4XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfdGhpcy5vcHRzLmVkaXRhYmxlQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4pKSB7XG4gICAgICAgICAgcm93VGVtcGxhdGVEYXRhLnVwZGF0ZSA9IHVwZGF0ZVZhbHVlKHJvdywgY29sdW1uKS5iaW5kKF90aGlzKTtcbiAgICAgICAgICByb3dUZW1wbGF0ZURhdGEuaXNFZGl0aW5nID0gZWRpdGluZyhyb3csIGNvbHVtbikuYmluZChfdGhpcyk7XG4gICAgICAgICAgcm93VGVtcGxhdGVEYXRhLnNldEVkaXRpbmcgPSBzZXRFZGl0KHJvdywgY29sdW1uKS5iaW5kKF90aGlzKTtcbiAgICAgICAgICByb3dUZW1wbGF0ZURhdGEucmV2ZXJ0VmFsdWUgPSByZXZlcnRWYWwocm93LCBjb2x1bW4pLmJpbmQoX3RoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29sdW1ucy5wdXNoKGgoXCJ0ZFwiLCB7XG4gICAgICAgICAgXCJjbGFzc1wiOiBcIlwiLmNvbmNhdChfdGhpcy5jb2x1bW5DbGFzcyhjb2x1bW4pLCBcIiBcIikuY29uY2F0KF90aGlzLl9jZWxsQ2xhc3Nlcyhjb2x1bW4sIHJvdykpLnRyaW0oKSxcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgdGFiaW5kZXg6IFwiMFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LCBbcm93VGVtcGxhdGUgPyByb3dUZW1wbGF0ZShyb3dUZW1wbGF0ZURhdGEpIDogX3RoaXMucmVuZGVyKHJvdywgY29sdW1uLCBpbmRleCwgaCldKSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKF90aGlzLmhhc0NoaWxkUm93ICYmICFfdGhpcy5vcHRzLmNoaWxkUm93VG9nZ2xlckZpcnN0ICYmIF90aGlzLm9wdHMuc2hvd0NoaWxkUm93VG9nZ2xlcikgY29sdW1ucy5wdXNoKGNoaWxkUm93VG9nZ2xlcik7XG4gICAgICByb3dDbGFzcyA9IF90aGlzLm9wdHMucm93Q2xhc3NDYWxsYmFjayA/IF90aGlzLm9wdHMucm93Q2xhc3NDYWxsYmFjayhyb3cpIDogJyc7XG4gICAgICByb3dBdHRyaWJ1dGVzID0gX3RoaXMub3B0cy5yb3dBdHRyaWJ1dGVzQ2FsbGJhY2sgPyBfdGhpcy5vcHRzLnJvd0F0dHJpYnV0ZXNDYWxsYmFjayhyb3cpIDoge307XG4gICAgICByb3dzLnB1c2goaChcInRyXCIsICgwLCBfYmFiZWxIZWxwZXJWdWVKc3hNZXJnZVByb3BzW1wiZGVmYXVsdFwiXSkoW3tcbiAgICAgICAgYXR0cnM6IHJvd0F0dHJpYnV0ZXNcbiAgICAgIH0sIHtcbiAgICAgICAgXCJjbGFzc1wiOiBcIlZ1ZVRhYmxlc19fcm93IFwiLmNvbmNhdChyb3dDbGFzcyksXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgXCJjbGlja1wiOiBfdGhpcy5yb3dXYXNDbGlja2VkLmJpbmQoX3RoaXMsIHJvdywgaW5kZXgpXG4gICAgICAgIH1cbiAgICAgIH1dKSwgW2NvbHVtbnMsIFwiIFwiXSkpO1xuICAgICAgcm93cy5wdXNoKF90aGlzLmhhc0NoaWxkUm93ICYmIF90aGlzLm9wZW5DaGlsZFJvd3MuaW5jbHVkZXMocm93W3Jvd0tleV0pID8gaChcInRyXCIsIHtcbiAgICAgICAgXCJjbGFzc1wiOiBcIlZ1ZVRhYmxlc19fY2hpbGQtcm93IFwiLmNvbmNhdChyb3dDbGFzcylcbiAgICAgIH0sIFtoKFwidGRcIiwge1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGNvbHNwYW46IF90aGlzLmNvbHNwYW4sXG4gICAgICAgICAgdGFiaW5kZXg6IFwiMFwiXG4gICAgICAgIH1cbiAgICAgIH0sIFtfdGhpcy5fZ2V0Q2hpbGRSb3dUZW1wbGF0ZShoLCByb3csIGluZGV4KV0pXSkgOiBoKCkpO1xuICAgIH0pO1xuICAgIHJldHVybiByb3dzO1xuICB9O1xufTtcblxuZnVuY3Rpb24gc2V0RWRpdChyb3csIGNvbHVtbikge1xuICByZXR1cm4gZnVuY3Rpb24gKGVkaXRpbmcpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIGlmIChlZGl0aW5nKSB7XG4gICAgICB0aGlzLmVkaXRpbmcucHVzaCh7XG4gICAgICAgIGlkOiByb3dbdGhpcy5vcHRzLnVuaXF1ZUtleV0sXG4gICAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgICBvcmlnaW5hbFZhbHVlOiByb3dbY29sdW1uXVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZWRpdGluZyA9IHRoaXMuZWRpdGluZy5maWx0ZXIoZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgcmV0dXJuIGUuaWQgIT09IHJvd1tfdGhpczIub3B0cy51bmlxdWVLZXldO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBlZGl0aW5nKHJvdywgY29sdW1uKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICByZXR1cm4gdGhpcy5lZGl0aW5nLmZpbmQoZnVuY3Rpb24gKGUpIHtcbiAgICAgIHJldHVybiBlLmlkID09PSByb3dbX3RoaXMzLm9wdHMudW5pcXVlS2V5XSAmJiBlLmNvbHVtbiA9PT0gY29sdW1uO1xuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiByZXZlcnRWYWwocm93LCBjb2x1bW4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgIHZhciBvcmlnVmFsID0gdGhpcy5lZGl0aW5nLmZpbmQoZnVuY3Rpb24gKGUpIHtcbiAgICAgIHJldHVybiBlLmlkID09PSByb3dbX3RoaXM0Lm9wdHMudW5pcXVlS2V5XTtcbiAgICB9KS5vcmlnaW5hbFZhbHVlO1xuICAgIHJvd1tjb2x1bW5dID0gb3JpZ1ZhbDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlVmFsdWUocm93LCBjb2x1bW4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICB2YXIgb2xkVmFsID0gcm93W2NvbHVtbl07XG4gICAgcm93W2NvbHVtbl0gPSBnZXRWYWx1ZShlKTtcbiAgICB2YXIgZGF0YSA9ICgwLCBfY2xvbmVbXCJkZWZhdWx0XCJdKSh0aGlzLmRhdGEpLm1hcChmdW5jdGlvbiAocikge1xuICAgICAgaWYgKHJbX3RoaXM1Lm9wdHMudW5pcXVlS2V5XSA9PT0gcm93W190aGlzNS5vcHRzLnVuaXF1ZUtleV0pIHtcbiAgICAgICAgcmV0dXJuIHJvdztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHI7XG4gICAgfSk7XG4gICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBkYXRhKTtcbiAgICB0aGlzLiRlbWl0KCd1cGRhdGUnLCB7XG4gICAgICByb3c6IHJvdyxcbiAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgb2xkVmFsOiBvbGRWYWwsXG4gICAgICBuZXdWYWw6IHJvd1tjb2x1bW5dXG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlKHZhbCkge1xuICBpZiAodmFsLnRhcmdldCkge1xuICAgIHJldHVybiB2YWwudGFyZ2V0LnR5cGUgPT09ICdjaGVja2JveCcgPyB2YWwudGFyZ2V0LmNoZWNrZWQgOiB2YWwudGFyZ2V0LnZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHZhbDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaCwgcmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICBpZiAoIXRoaXMuc29ydGFibGUoY29sdW1uKSkgcmV0dXJuICcnO1xuICAgIHJldHVybiBoKFwic3BhblwiLCB7XG4gICAgICBcImNsYXNzXCI6IFwiVnVlVGFibGVzX19zb3J0LWljb24gXCIuY29uY2F0KHJpZ2h0LCBcIiBcIikuY29uY2F0KHRoaXMuc29ydGFibGVDaGV2cm9uQ2xhc3MoY29sdW1uKSlcbiAgICB9KTtcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBkZWJvdW5jZSA9IHJlcXVpcmUoJ2RlYm91bmNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGgsIGlucHV0Q2xhc3MpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICB2YXIgc2VhcmNoID0gdGhpcy5zb3VyY2UgPT0gJ2NsaWVudCcgPyB0aGlzLnNlYXJjaC5iaW5kKHRoaXMsIHRoaXMuZGF0YSkgOiB0aGlzLnNlcnZlclNlYXJjaC5iaW5kKHRoaXMpO1xuXG4gIGlmICh0aGlzLm9wdHMuZGVib3VuY2UpIHtcbiAgICB2YXIgZGVib3VuY2VkU2VhcmNoID0gZGVib3VuY2Uoc2VhcmNoLCB0aGlzLm9wdHMuZGVib3VuY2UpO1xuXG4gICAgdmFyIG9uS2V5VXAgPSBmdW5jdGlvbiBvbktleVVwKGUpIHtcbiAgICAgIGlmIChlLmtleUNvZGUgPT09IDkpIHJldHVybjtcblxuICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgZGVib3VuY2VkU2VhcmNoLmNsZWFyKCk7XG4gICAgICAgIHNlYXJjaC5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWJvdW5jZWRTZWFyY2guYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGNvbHVtbikge1xuICAgIHJldHVybiBoKFwiaW5wdXRcIiwge1xuICAgICAgb246IHtcbiAgICAgICAgXCJrZXl1cFwiOiBfdGhpcy5vcHRzLmRlYm91bmNlID8gb25LZXlVcCA6IHNlYXJjaFxuICAgICAgfSxcbiAgICAgIFwiY2xhc3NcIjogaW5wdXRDbGFzcyxcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIG5hbWU6IF90aGlzLl9nZXRDb2x1bW5OYW1lKGNvbHVtbiksXG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICBwbGFjZWhvbGRlcjogX3RoaXMuZGlzcGxheSgnZmlsdGVyQnknLCB7XG4gICAgICAgICAgY29sdW1uOiBfdGhpcy5nZXRIZWFkaW5nKGNvbHVtbilcbiAgICAgICAgfSksXG4gICAgICAgIGF1dG9jb21wbGV0ZTogXCJvZmZcIlxuICAgICAgfVxuICAgIH0pO1xuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB7XG4gICAgYmVmb3JlRmlsdGVyczogdGhpcy4kc2xvdHMuYmVmb3JlRmlsdGVycyA/IHRoaXMuJHNsb3RzLmJlZm9yZUZpbHRlcnMgOiAnJyxcbiAgICBhZnRlckZpbHRlcnM6IHRoaXMuJHNsb3RzLmFmdGVyRmlsdGVycyA/IHRoaXMuJHNsb3RzLmFmdGVyRmlsdGVycyA6ICcnLFxuICAgIHByZXBlbmRIZWFkOiB0aGlzLiRzbG90cy5wcmVwZW5kSGVhZCA/IHRoaXMuJHNsb3RzLnByZXBlbmRIZWFkIDogJycsXG4gICAgYmVmb3JlQm9keTogdGhpcy4kc2xvdHMuYmVmb3JlQm9keSA/IHRoaXMuJHNsb3RzLmJlZm9yZUJvZHkgOiAnJyxcbiAgICBwcmVwZW5kQm9keTogdGhpcy4kc2xvdHMucHJlcGVuZEJvZHkgPyB0aGlzLiRzbG90cy5wcmVwZW5kQm9keSA6ICcnLFxuICAgIGFwcGVuZEJvZHk6IHRoaXMuJHNsb3RzLmFwcGVuZEJvZHkgPyB0aGlzLiRzbG90cy5hcHBlbmRCb2R5IDogJycsXG4gICAgYWZ0ZXJCb2R5OiB0aGlzLiRzbG90cy5hZnRlckJvZHkgPyB0aGlzLiRzbG90cy5hZnRlckJvZHkgOiAnJyxcbiAgICBiZWZvcmVGaWx0ZXI6IHRoaXMuJHNsb3RzLmJlZm9yZUZpbHRlciA/IHRoaXMuJHNsb3RzLmJlZm9yZUZpbHRlciA6ICcnLFxuICAgIGFmdGVyRmlsdGVyOiB0aGlzLiRzbG90cy5hZnRlckZpbHRlciA/IHRoaXMuJHNsb3RzLmFmdGVyRmlsdGVyIDogJycsXG4gICAgYWZ0ZXJGaWx0ZXJXcmFwcGVyOiB0aGlzLiRzbG90cy5hZnRlckZpbHRlcldyYXBwZXIgPyB0aGlzLiRzbG90cy5hZnRlckZpbHRlcldyYXBwZXIgOiAnJyxcbiAgICBiZWZvcmVTZWFyY2g6IHRoaXMuJHNsb3RzLmJlZm9yZVNlYXJjaCA/IHRoaXMuJHNsb3RzLmJlZm9yZVNlYXJjaCA6ICcnLFxuICAgIGJlZm9yZUxpbWl0OiB0aGlzLiRzbG90cy5iZWZvcmVMaW1pdCA/IHRoaXMuJHNsb3RzLmJlZm9yZUxpbWl0IDogJycsXG4gICAgYWZ0ZXJMaW1pdDogdGhpcy4kc2xvdHMuYWZ0ZXJMaW1pdCA/IHRoaXMuJHNsb3RzLmFmdGVyTGltaXQgOiAnJyxcbiAgICBiZWZvcmVUYWJsZTogdGhpcy4kc2xvdHMuYmVmb3JlVGFibGUgPyB0aGlzLiRzbG90cy5iZWZvcmVUYWJsZSA6ICcnLFxuICAgIGFmdGVyVGFibGU6IHRoaXMuJHNsb3RzLmFmdGVyVGFibGUgPyB0aGlzLiRzbG90cy5hZnRlclRhYmxlIDogJydcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuXG52YXIgX21lcmdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwibWVyZ2VcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gX2RlZmF1bHQodXNlVnVleCwgc291cmNlKSB7XG4gIHZhciBwYWdlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiAxO1xuICB2YXIgZGF0YSA9IHtcbiAgICB2dWV4OiB0cnVlLFxuICAgIGFjdGl2ZVN0YXRlOiBmYWxzZSxcbiAgICB1c2VyQ29sdW1uc0Rpc3BsYXk6IFtdLFxuICAgIHVzZXJDb250cm9sc0NvbHVtbnM6IGZhbHNlLFxuICAgIGRpc3BsYXlDb2x1bW5zRHJvcGRvd246IGZhbHNlLFxuICAgIGNvbGxhcHNlZEdyb3VwczogW11cbiAgfTtcbiAgaWYgKHVzZVZ1ZXgpIHJldHVybiBkYXRhO1xuICBkYXRhID0gKDAsIF9tZXJnZVtcImRlZmF1bHRcIl0pKGRhdGEsIHtcbiAgICB2dWV4OiBmYWxzZSxcbiAgICBjb3VudDogMCxcbiAgICBjdXN0b21RdWVyaWVzOiB7fSxcbiAgICBxdWVyeTogbnVsbCxcbiAgICBwYWdlOiBwYWdlLFxuICAgIGxpbWl0OiAxMCxcbiAgICB3aW5kb3dXaWR0aDogdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cuaW5uZXJXaWR0aCA6IG51bGwsXG4gICAgb3JkZXJCeToge1xuICAgICAgY29sdW1uOiBmYWxzZSxcbiAgICAgIGFzY2VuZGluZzogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIGlmIChzb3VyY2UgPT0gJ3NlcnZlcicpIGRhdGEuZGF0YSA9IFtdO1xuICByZXR1cm4gZGF0YTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gX2RlZmF1bHQ7XG5cbnZhciBfbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJtZXJnZVwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfZGVmYXVsdChzZWxmKSB7XG4gIHZhciBfcmVmLCBfbWVyZ2UkcmVjdXJzaXZlO1xuXG4gIHZhciBleHRyYSA9IHNlbGYuc291cmNlID09ICdzZXJ2ZXInID8gKF9yZWYgPSB7fSwgX2RlZmluZVByb3BlcnR5KF9yZWYsIFwiXCIuY29uY2F0KHNlbGYubmFtZSwgXCIvU0VUX0RBVEFcIiksIGZ1bmN0aW9uIFNFVF9EQVRBKHN0YXRlLCByZXNwb25zZSkge1xuICAgIHZhciBkYXRhID0gc2VsZi5vcHRzLnJlc3BvbnNlQWRhcHRlci5jYWxsKHNlbGYsIHJlc3BvbnNlKTtcbiAgICBzdGF0ZS5kYXRhID0gZGF0YS5kYXRhO1xuICAgIHN0YXRlLmNvdW50ID0gcGFyc2VJbnQoZGF0YS5jb3VudCk7XG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX3JlZiwgXCJcIi5jb25jYXQoc2VsZi5uYW1lLCBcIi9MT0FESU5HXCIpLCBmdW5jdGlvbiBMT0FESU5HKHN0YXRlLCBwYXlsb2FkKSB7fSksIF9kZWZpbmVQcm9wZXJ0eShfcmVmLCBcIlwiLmNvbmNhdChzZWxmLm5hbWUsIFwiL0xPQURFRFwiKSwgZnVuY3Rpb24gTE9BREVEKHN0YXRlLCBwYXlsb2FkKSB7fSksIF9kZWZpbmVQcm9wZXJ0eShfcmVmLCBcIlwiLmNvbmNhdChzZWxmLm5hbWUsIFwiL0VSUk9SXCIpLCBmdW5jdGlvbiBFUlJPUihzdGF0ZSwgcGF5bG9hZCkge30pLCBfcmVmKSA6IF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQoc2VsZi5uYW1lLCBcIi9TRVRfQ09VTlRcIiksIGZ1bmN0aW9uIFNFVF9DT1VOVChzdGF0ZSwgY291bnQpIHtcbiAgICBzdGF0ZS5jb3VudCA9IGNvdW50O1xuICB9KTtcbiAgcmV0dXJuIF9tZXJnZVtcImRlZmF1bHRcIl0ucmVjdXJzaXZlKHRydWUsIChfbWVyZ2UkcmVjdXJzaXZlID0ge30sIF9kZWZpbmVQcm9wZXJ0eShfbWVyZ2UkcmVjdXJzaXZlLCBcIlwiLmNvbmNhdChzZWxmLm5hbWUsIFwiL1BBR0lOQVRFXCIpLCBmdW5jdGlvbiBQQUdJTkFURShzdGF0ZSwgcGFnZSkge1xuICAgIHN0YXRlLnBhZ2UgPSBwYWdlO1xuICAgIHNlbGYudXBkYXRlU3RhdGUoJ3BhZ2UnLCBwYWdlKTtcbiAgICBpZiAoc2VsZi5zb3VyY2UgPT0gJ3NlcnZlcicpIHNlbGYuZ2V0RGF0YSgpO1xuICAgIHNlbGYuY29tbWl0KCdQQUdJTkFUSU9OJywgcGFnZSk7XG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX21lcmdlJHJlY3Vyc2l2ZSwgXCJcIi5jb25jYXQoc2VsZi5uYW1lLCBcIi9TRVRfRklMVEVSXCIpLCBmdW5jdGlvbiBTRVRfRklMVEVSKHN0YXRlLCBmaWx0ZXIpIHtcbiAgICBzdGF0ZS5wYWdlID0gMTtcbiAgICBzZWxmLnVwZGF0ZVN0YXRlKCdwYWdlJywgMSk7XG4gICAgc3RhdGUucXVlcnkgPSBmaWx0ZXI7XG5cbiAgICBpZiAoc2VsZi5zb3VyY2UgPT0gJ3NlcnZlcicpIHtcbiAgICAgIHNlbGYuZ2V0RGF0YSgpO1xuICAgIH1cbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfbWVyZ2UkcmVjdXJzaXZlLCBcIlwiLmNvbmNhdChzZWxmLm5hbWUsIFwiL1BBR0lOQVRJT05cIiksIGZ1bmN0aW9uIFBBR0lOQVRJT04oc3RhdGUsIHBhZ2UpIHt9KSwgX2RlZmluZVByb3BlcnR5KF9tZXJnZSRyZWN1cnNpdmUsIFwiXCIuY29uY2F0KHNlbGYubmFtZSwgXCIvU0VUX0NVU1RPTV9GSUxURVJcIiksIGZ1bmN0aW9uIFNFVF9DVVNUT01fRklMVEVSKHN0YXRlLCBfcmVmMykge1xuICAgIHZhciBmaWx0ZXIgPSBfcmVmMy5maWx0ZXIsXG4gICAgICAgIHZhbHVlID0gX3JlZjMudmFsdWU7XG4gICAgc3RhdGUuY3VzdG9tUXVlcmllc1tmaWx0ZXJdID0gdmFsdWU7XG4gICAgc3RhdGUucGFnZSA9IDE7XG4gICAgc2VsZi51cGRhdGVTdGF0ZSgncGFnZScsIDEpO1xuICAgIHNlbGYudXBkYXRlU3RhdGUoJ2N1c3RvbVF1ZXJpZXMnLCBzdGF0ZS5jdXN0b21RdWVyaWVzKTtcblxuICAgIGlmIChzZWxmLnNvdXJjZSA9PSAnc2VydmVyJykge1xuICAgICAgc2VsZi5nZXREYXRhKCk7XG4gICAgfVxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9tZXJnZSRyZWN1cnNpdmUsIFwiXCIuY29uY2F0KHNlbGYubmFtZSwgXCIvU0VUX1NUQVRFXCIpLCBmdW5jdGlvbiBTRVRfU1RBVEUoc3RhdGUsIF9yZWY0KSB7XG4gICAgdmFyIHBhZ2UgPSBfcmVmNC5wYWdlLFxuICAgICAgICBxdWVyeSA9IF9yZWY0LnF1ZXJ5LFxuICAgICAgICBjdXN0b21RdWVyaWVzID0gX3JlZjQuY3VzdG9tUXVlcmllcyxcbiAgICAgICAgbGltaXQgPSBfcmVmNC5saW1pdCxcbiAgICAgICAgb3JkZXJCeSA9IF9yZWY0Lm9yZGVyQnk7XG4gICAgc3RhdGUuY3VzdG9tUXVlcmllcyA9IGN1c3RvbVF1ZXJpZXM7XG4gICAgc3RhdGUucXVlcnkgPSBxdWVyeTtcbiAgICBzdGF0ZS5wYWdlID0gcGFnZTtcbiAgICBzdGF0ZS5saW1pdCA9IGxpbWl0O1xuICAgIHN0YXRlLmFzY2VuZGluZyA9IG9yZGVyQnkuYXNjZW5kaW5nO1xuICAgIHN0YXRlLnNvcnRCeSA9IG9yZGVyQnkuY29sdW1uO1xuICB9KSwgX2RlZmluZVByb3BlcnR5KF9tZXJnZSRyZWN1cnNpdmUsIFwiXCIuY29uY2F0KHNlbGYubmFtZSwgXCIvU0VUX0xJTUlUXCIpLCBmdW5jdGlvbiBTRVRfTElNSVQoc3RhdGUsIGxpbWl0KSB7XG4gICAgc3RhdGUucGFnZSA9IDE7XG4gICAgc2VsZi51cGRhdGVTdGF0ZSgncGFnZScsIDEpO1xuICAgIHN0YXRlLmxpbWl0ID0gbGltaXQ7XG4gICAgaWYgKHNlbGYuc291cmNlID09ICdzZXJ2ZXInKSBzZWxmLmdldERhdGEoKTtcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfbWVyZ2UkcmVjdXJzaXZlLCBcIlwiLmNvbmNhdChzZWxmLm5hbWUsIFwiL1NPUlRcIiksIGZ1bmN0aW9uIFNPUlQoc3RhdGUsIF9yZWY1KSB7XG4gICAgdmFyIGNvbHVtbiA9IF9yZWY1LmNvbHVtbixcbiAgICAgICAgYXNjZW5kaW5nID0gX3JlZjUuYXNjZW5kaW5nO1xuICAgIHN0YXRlLmFzY2VuZGluZyA9IGFzY2VuZGluZztcbiAgICBzdGF0ZS5zb3J0QnkgPSBjb2x1bW47XG4gICAgaWYgKHNlbGYuc291cmNlID09ICdzZXJ2ZXInKSBzZWxmLmdldERhdGEoKTtcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfbWVyZ2UkcmVjdXJzaXZlLCBcIlwiLmNvbmNhdChzZWxmLm5hbWUsIFwiL1NPUlRFRFwiKSwgZnVuY3Rpb24gU09SVEVEKHN0YXRlLCBkYXRhKSB7fSksIF9kZWZpbmVQcm9wZXJ0eShfbWVyZ2UkcmVjdXJzaXZlLCBcIlwiLmNvbmNhdChzZWxmLm5hbWUsIFwiL1JPV19DTElDS1wiKSwgZnVuY3Rpb24gUk9XX0NMSUNLKHN0YXRlLCByb3cpIHt9KSwgX2RlZmluZVByb3BlcnR5KF9tZXJnZSRyZWN1cnNpdmUsIFwiXCIuY29uY2F0KHNlbGYubmFtZSwgXCIvRklMVEVSXCIpLCBmdW5jdGlvbiBGSUxURVIoc3RhdGUsIHJvdykge30pLCBfZGVmaW5lUHJvcGVydHkoX21lcmdlJHJlY3Vyc2l2ZSwgXCJcIi5jb25jYXQoc2VsZi5uYW1lLCBcIi9MSU1JVFwiKSwgZnVuY3Rpb24gTElNSVQoc3RhdGUsIGxpbWl0KSB7fSksIF9tZXJnZSRyZWN1cnNpdmUpLCBleHRyYSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuXG5mdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgcmV0dXJuIHtcbiAgICBjb21wdXRlZDoge1xuICAgICAgQ29sdW1uczogZnVuY3Rpb24gQ29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucztcbiAgICAgIH1cbiAgICB9XG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfc3RhdGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3N0YXRlXCIpKTtcblxudmFyIF9tdXRhdGlvbnMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL211dGF0aW9uc1wiKSk7XG5cbnZhciBfbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJtZXJnZVwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzZWxmKSB7XG4gIHZhciBNb2R1bGUgPSB7XG4gICAgc3RhdGU6ICgwLCBfc3RhdGVbXCJkZWZhdWx0XCJdKShzZWxmKSxcbiAgICBtdXRhdGlvbnM6ICgwLCBfbXV0YXRpb25zW1wiZGVmYXVsdFwiXSkoc2VsZilcbiAgfTtcblxuICBpZiAoc2VsZi4kc3RvcmUgJiYgc2VsZi4kc3RvcmUuc3RhdGUgJiYgc2VsZi4kc3RvcmUuc3RhdGVbc2VsZi5uYW1lXSkge1xuICAgIE1vZHVsZS5zdGF0ZSA9IF9tZXJnZVtcImRlZmF1bHRcIl0ucmVjdXJzaXZlKE1vZHVsZS5zdGF0ZSwgc2VsZi4kc3RvcmUuc3RhdGVbc2VsZi5uYW1lXSk7XG4gICAgc2VsZi4kc3RvcmUudW5yZWdpc3Rlck1vZHVsZShzZWxmLm5hbWUpO1xuICB9XG5cbiAgc2VsZi4kc3RvcmUucmVnaXN0ZXJNb2R1bGUoc2VsZi5uYW1lLCBNb2R1bGUpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gX2RlZmF1bHQ7XG5cbnZhciBfbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJtZXJnZVwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfZGVmYXVsdChzZWxmKSB7XG4gIHZhciBzdGF0ZSA9IHtcbiAgICBwYWdlOiBzZWxmLm9wdHMuaW5pdGlhbFBhZ2UgPyBzZWxmLm9wdHMuaW5pdGlhbFBhZ2UgOiAxLFxuICAgIGxpbWl0OiBzZWxmLm9wdHMucGVyUGFnZSxcbiAgICBjb3VudDogc2VsZi5zb3VyY2UgPT0gJ3NlcnZlcicgPyAwIDogc2VsZi5kYXRhLmxlbmd0aCxcbiAgICBjb2x1bW5zOiBzZWxmLmNvbHVtbnMsXG4gICAgZGF0YTogc2VsZi5zb3VyY2UgPT0gJ2NsaWVudCcgPyBzZWxmLmRhdGEgOiBbXSxcbiAgICBxdWVyeTogc2VsZi5pbml0UXVlcnkoKSxcbiAgICBjdXN0b21RdWVyaWVzOiBzZWxmLmluaXRDdXN0b21GaWx0ZXJzKCksXG4gICAgc29ydEJ5OiBzZWxmLm9wdHMub3JkZXJCeSAmJiBzZWxmLm9wdHMub3JkZXJCeS5jb2x1bW4gPyBzZWxmLm9wdHMub3JkZXJCeS5jb2x1bW4gOiBmYWxzZSxcbiAgICBhc2NlbmRpbmc6IHNlbGYub3B0cy5vcmRlckJ5ICYmIHNlbGYub3B0cy5vcmRlckJ5Lmhhc093blByb3BlcnR5KCdhc2NlbmRpbmcnKSA/IHNlbGYub3B0cy5vcmRlckJ5LmFzY2VuZGluZyA6IHRydWVcbiAgfTtcblxuICBpZiAodHlwZW9mIHNlbGYuJHN0b3JlLnN0YXRlW3NlbGYubmFtZV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuICgwLCBfbWVyZ2VbXCJkZWZhdWx0XCJdKSh0cnVlLCBzZWxmLiRzdG9yZS5zdGF0ZVtzZWxmLm5hbWVdLCBzdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuXG52YXIgX21lcmdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwibWVyZ2VcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2RlZmF1bHQoc291cmNlKSB7XG4gIHZhciBleHRyYSA9IHNvdXJjZSA9PSAnc2VydmVyJyA/IHNlcnZlckV4dHJhKCkgOiBjbGllbnRFeHRyYSgpO1xuICByZXR1cm4gX21lcmdlW1wiZGVmYXVsdFwiXS5yZWN1cnNpdmUodHJ1ZSwge1xuICAgIHByb3BzOiB7XG4gICAgICBuYW1lOiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBzdGF0ZTogZnVuY3Rpb24gc3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5zdGF0ZVt0aGlzLm5hbWVdO1xuICAgICAgfSxcbiAgICAgIFBhZ2U6IGZ1bmN0aW9uIFBhZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnBhZ2U7XG4gICAgICB9LFxuICAgICAgY291bnQ6IGZ1bmN0aW9uIGNvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5jb3VudDtcbiAgICAgIH0sXG4gICAgICBDb2x1bW5zOiBmdW5jdGlvbiBDb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5jb2x1bW5zO1xuICAgICAgfSxcbiAgICAgIHRhYmxlRGF0YTogZnVuY3Rpb24gdGFibGVEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5kYXRhO1xuICAgICAgfSxcbiAgICAgIHBhZ2U6IGZ1bmN0aW9uIHBhZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnBhZ2U7XG4gICAgICB9LFxuICAgICAgbGltaXQ6IGZ1bmN0aW9uIGxpbWl0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5saW1pdDtcbiAgICAgIH0sXG4gICAgICBjdXN0b21RdWVyaWVzOiBmdW5jdGlvbiBjdXN0b21RdWVyaWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5jdXN0b21RdWVyaWVzO1xuICAgICAgfSxcbiAgICAgIHF1ZXJ5OiBmdW5jdGlvbiBxdWVyeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUucXVlcnk7XG4gICAgICB9LFxuICAgICAgb3JkZXJCeTogZnVuY3Rpb24gb3JkZXJCeSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb2x1bW46IHRoaXMuc3RhdGUuc29ydEJ5LFxuICAgICAgICAgIGFzY2VuZGluZzogdGhpcy5zdGF0ZS5hc2NlbmRpbmdcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGNvbW1pdDogZnVuY3Rpb24gY29tbWl0KGFjdGlvbiwgcGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kc3RvcmUuY29tbWl0KFwiXCIuY29uY2F0KHRoaXMubmFtZSwgXCIvXCIpLmNvbmNhdChhY3Rpb24pLCBwYXlsb2FkKTtcbiAgICAgIH0sXG4gICAgICBvcmRlckJ5Q29sdW1uOiBmdW5jdGlvbiBvcmRlckJ5Q29sdW1uKGNvbHVtbiwgZXYpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNvcnRhYmxlKGNvbHVtbikpIHJldHVybjtcblxuICAgICAgICBpZiAoZXYuc2hpZnRLZXkgJiYgdGhpcy5vcmRlckJ5LmNvbHVtbiAmJiB0aGlzLmhhc011bHRpU29ydCkge1xuICAgICAgICAgIHRoaXMuc2V0VXNlck11bHRpU29ydChjb2x1bW4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBhc2NlbmRpbmcgPSB0aGlzLm9yZGVyQnkuY29sdW1uID09PSBjb2x1bW4gPyAhdGhpcy5vcmRlckJ5LmFzY2VuZGluZyA6IHRoaXMuX2luaXRpYWxPcmRlckFzY2VuZGluZyhjb2x1bW4pO1xuICAgICAgICAgIHZhciBvcmRlckJ5ID0ge1xuICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4sXG4gICAgICAgICAgICBhc2NlbmRpbmc6IGFzY2VuZGluZ1xuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSgnb3JkZXJCeScsIG9yZGVyQnkpO1xuICAgICAgICAgIHRoaXMuY29tbWl0KCdTT1JUJywgb3JkZXJCeSk7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaCgnc29ydGVkJywgb3JkZXJCeSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzZXRMaW1pdDogZnVuY3Rpb24gc2V0TGltaXQoZSkge1xuICAgICAgICB2YXIgbGltaXQgPSBfdHlwZW9mKGUpID09PSAnb2JqZWN0JyA/IHBhcnNlSW50KGUudGFyZ2V0LnZhbHVlKSA6IGU7XG4gICAgICAgIHRoaXMudXBkYXRlU3RhdGUoJ3BlclBhZ2UnLCBsaW1pdCk7XG4gICAgICAgIHRoaXMuY29tbWl0KFwiU0VUX0xJTUlUXCIsIGxpbWl0KTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaChcImxpbWl0XCIsIGxpbWl0KTtcbiAgICAgIH0sXG4gICAgICBzZXRPcmRlcjogZnVuY3Rpb24gc2V0T3JkZXIoY29sdW1uLCBhc2NlbmRpbmcpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSgnb3JkZXJCeScsIHtcbiAgICAgICAgICBjb2x1bW46IGNvbHVtbixcbiAgICAgICAgICBhc2NlbmRpbmc6IGFzY2VuZGluZ1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb21taXQoJ1NPUlQnLCB7XG4gICAgICAgICAgY29sdW1uOiBjb2x1bW4sXG4gICAgICAgICAgYXNjZW5kaW5nOiBhc2NlbmRpbmdcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgc2V0UGFnZTogZnVuY3Rpb24gc2V0UGFnZShwYWdlKSB7XG4gICAgICAgIGlmICghcGFnZSkge1xuICAgICAgICAgIHBhZ2UgPSB0aGlzLiRyZWZzLnBhZ2UudmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMub3B0cy5wYWdpbmF0aW9uLmRyb3Bkb3duKSB0aGlzLiRyZWZzLnBhZ2luYXRpb24uUGFnZSA9IHBhZ2U7XG4gICAgICAgIHRoaXMuY29tbWl0KFwiUEFHSU5BVEVcIiwgcGFnZSk7XG4gICAgICB9XG4gICAgfVxuICB9LCBleHRyYSk7XG59XG5cbmZ1bmN0aW9uIHNlcnZlckV4dHJhKCkge1xuICByZXR1cm4ge1xuICAgIG1ldGhvZHM6IHtcbiAgICAgIHNldERhdGE6IGZ1bmN0aW9uIHNldERhdGEoZGF0YSkge1xuICAgICAgICB0aGlzLmNvbW1pdCgnU0VUX0RBVEEnLCBkYXRhKTtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaCgnbG9hZGVkJywgZGF0YSk7XG4gICAgICAgIH0uYmluZCh0aGlzKSwgMCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjbGllbnRFeHRyYSgpIHtcbiAgcmV0dXJuIHt9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBfZGVmYXVsdDtcblxudmFyIG1ldGhvZHMgPSByZXF1aXJlKFwiLi9taXhpbnMvbWV0aG9kc1wiKTtcblxudmFyIGNvbXB1dGVkID0gcmVxdWlyZShcIi4vbWl4aW5zL2NvbXB1dGVkXCIpO1xuXG52YXIgYmVmb3JlRGVzdHJveSA9IHJlcXVpcmUoXCIuL21peGlucy9iZWZvcmUtZGVzdHJveVwiKTtcblxuZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gIHJldHVybiB7XG4gICAgbWV0aG9kczogbWV0aG9kcyxcbiAgICBjb21wdXRlZDogY29tcHV0ZWQsXG4gICAgYmVmb3JlRGVzdHJveTogYmVmb3JlRGVzdHJveVxuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0ZW1wbGF0ZSwgdGhlbWUpIHtcbiAgdmFyIHRoZW1lcyA9IHtcbiAgICBib290c3RyYXAzOiByZXF1aXJlKCcuL3RoZW1lcy9ib290c3RyYXAzJykoKSxcbiAgICBib290c3RyYXA0OiByZXF1aXJlKCcuL3RoZW1lcy9ib290c3RyYXA0JykoKSxcbiAgICBidWxtYTogcmVxdWlyZSgnLi90aGVtZXMvYnVsbWEnKSgpXG4gIH07XG4gIHZhciB0ZW1wbGF0ZXMgPSB7XG4gICAgXCJkZWZhdWx0XCI6IHJlcXVpcmUoJy4vdGVtcGxhdGVzL2RlZmF1bHQnKSxcbiAgICBmb290ZXJQYWdpbmF0aW9uOiByZXF1aXJlKCcuL3RlbXBsYXRlcy9mb290ZXItcGFnaW5hdGlvbicpXG4gIH07XG4gIHJldHVybiBmdW5jdGlvbiAoaCkge1xuICAgIHZhciBtb2R1bGVzID0ge1xuICAgICAgcm93czogcmVxdWlyZSgnLi9tb2R1bGVzL3Jvd3MnKS5jYWxsKHRoaXMsIGgpLFxuICAgICAgbm9ybWFsRmlsdGVyOiByZXF1aXJlKCcuL21vZHVsZXMvbm9ybWFsLWZpbHRlcicpLmNhbGwodGhpcywgaCksXG4gICAgICBkcm9wZG93blBhZ2luYXRpb246IHJlcXVpcmUoJy4vbW9kdWxlcy9kcm9wZG93bi1wYWdpbmF0aW9uJykuY2FsbCh0aGlzLCBoKSxcbiAgICAgIGRyb3Bkb3duUGFnaW5hdGlvbkNvdW50OiByZXF1aXJlKCcuL21vZHVsZXMvZHJvcGRvd24tcGFnaW5hdGlvbi1jb3VudCcpLmNhbGwodGhpcywgaCksXG4gICAgICBjb2x1bW5GaWx0ZXJzOiByZXF1aXJlKCcuL21vZHVsZXMvY29sdW1uLWZpbHRlcnMnKS5jYWxsKHRoaXMsIGgpLFxuICAgICAgcGFnaW5hdGlvbjogcmVxdWlyZSgnLi9tb2R1bGVzL3BhZ2luYXRpb24nKS5jYWxsKHRoaXMsIGgpLFxuICAgICAgaGVhZGluZ3M6IHJlcXVpcmUoJy4vbW9kdWxlcy9oZWFkaW5ncycpLmNhbGwodGhpcywgaCksXG4gICAgICBwZXJQYWdlOiByZXF1aXJlKCcuL21vZHVsZXMvcGVyLXBhZ2UnKS5jYWxsKHRoaXMsIGgpLFxuICAgICAgY29sdW1uc0Ryb3Bkb3duOiByZXF1aXJlKCcuL21vZHVsZXMvY29sdW1ucy1kcm9wZG93bicpLmNhbGwodGhpcywgaClcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiB0ZW1wbGF0ZSA9PT0gJ3N0cmluZycgJiYgKCF0ZW1wbGF0ZXNbdGVtcGxhdGVdIHx8IHR5cGVvZiB0ZW1wbGF0ZXNbdGVtcGxhdGVdICE9PSAnZnVuY3Rpb24nKSkge1xuICAgICAgdGhyb3cgXCJ2dWUtdGFibGVzLTI6IFRlbXBsYXRlIFxcXCJcIi5jb25jYXQodGVtcGxhdGUsIFwiXFxcIiBkb2VzIG5vdCBleGlzdFwiKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRoZW1lID09PSAnc3RyaW5nJyAmJiAoIXRoZW1lc1t0aGVtZV0gfHwgX3R5cGVvZih0aGVtZXNbdGhlbWVdKSAhPT0gJ29iamVjdCcpKSB7XG4gICAgICB0aHJvdyBcInZ1ZS10YWJsZXMtMjogVGhlbWUgXFxcIlwiLmNvbmNhdCh0aGVtZSwgXCJcXFwiIGRvZXMgbm90IGV4aXN0XCIpO1xuICAgIH1cblxuICAgIHZhciB0cGwgPSB0eXBlb2YgdGVtcGxhdGUgPT09ICdzdHJpbmcnID8gdGVtcGxhdGVzW3RlbXBsYXRlXSA6IHRlbXBsYXRlO1xuICAgIHZhciB0aG0gPSB0eXBlb2YgdGhlbWUgPT09ICdzdHJpbmcnID8gdGhlbWVzW3RoZW1lXSA6IHRoZW1lKCk7XG5cbiAgICB2YXIgc2xvdHMgPSByZXF1aXJlKCcuL3Nsb3RzJykuY2FsbCh0aGlzKTtcblxuICAgIHJldHVybiB0cGwuY2FsbCh0aGlzLCBoLCBtb2R1bGVzLCB0aG0sIHNsb3RzKTtcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJtZXJnZVwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoLCBtb2R1bGVzLCBjbGFzc2VzLCBzbG90cykge1xuICB2YXIgZmlsdGVySWQgPSBcIlZ1ZVRhYmxlc19fc2VhcmNoX1wiICsgdGhpcy5pZDtcbiAgdmFyIGRkcElkID0gXCJWdWVUYWJsZXNfX2Ryb3Bkb3duLXBhZ2luYXRpb25fXCIgKyB0aGlzLmlkO1xuICB2YXIgcGVycGFnZUlkID0gXCJWdWVUYWJsZXNfX2xpbWl0X1wiICsgdGhpcy5pZDtcblxuICB2YXIgcGVycGFnZVZhbHVlcyA9IHJlcXVpcmUoXCIuLi9tb2R1bGVzL3Blci1wYWdlLXZhbHVlc1wiKS5jYWxsKHRoaXMsIGgpO1xuXG4gIHZhciBjYXB0aW9uID0gdGhpcy5vcHRzLmNhcHRpb24gPyBoKFwiY2FwdGlvblwiLCBbdGhpcy5vcHRzLmNhcHRpb25dKSA6ICcnO1xuICB2YXIgZ2VuZXJpY0ZpbHRlciA9IHRoaXMuaGFzR2VuZXJpY0ZpbHRlciA/IGgoXCJkaXZcIiwge1xuICAgIFwiY2xhc3NcIjogXCJWdWVUYWJsZXNfX3NlYXJjaC1maWVsZFwiXG4gIH0sIFtoKFwibGFiZWxcIiwge1xuICAgIGF0dHJzOiB7XG4gICAgICBcImZvclwiOiBmaWx0ZXJJZFxuICAgIH0sXG4gICAgXCJjbGFzc1wiOiBjbGFzc2VzLmxhYmVsXG4gIH0sIFt0aGlzLmRpc3BsYXkoXCJmaWx0ZXJcIildKSwgbW9kdWxlcy5ub3JtYWxGaWx0ZXIoY2xhc3NlcywgZmlsdGVySWQpXSkgOiBcIlwiO1xuICB2YXIgcGVycGFnZSA9ICF0aGlzLm9wdHMuaGlkZVBlclBhZ2VTZWxlY3QgJiYgKHBlcnBhZ2VWYWx1ZXMubGVuZ3RoID4gMSB8fCB0aGlzLm9wdHMuYWx3YXlzU2hvd1BlclBhZ2VTZWxlY3QpID8gaChcImRpdlwiLCB7XG4gICAgXCJjbGFzc1wiOiBcIlZ1ZVRhYmxlc19fbGltaXQtZmllbGRcIlxuICB9LCBbaChcImxhYmVsXCIsIHtcbiAgICBcImNsYXNzXCI6IGNsYXNzZXMubGFiZWwsXG4gICAgYXR0cnM6IHtcbiAgICAgIFwiZm9yXCI6IHBlcnBhZ2VJZFxuICAgIH1cbiAgfSwgW3RoaXMuZGlzcGxheShcImxpbWl0XCIpXSksIG1vZHVsZXMucGVyUGFnZShwZXJwYWdlVmFsdWVzLCBjbGFzc2VzLnNlbGVjdCwgcGVycGFnZUlkKV0pIDogXCJcIjtcbiAgdmFyIGRyb3Bkb3duUGFnaW5hdGlvbiA9IHRoaXMub3B0cy5wYWdpbmF0aW9uICYmIHRoaXMub3B0cy5wYWdpbmF0aW9uLmRyb3Bkb3duID8gaChcImRpdlwiLCB7XG4gICAgXCJjbGFzc1wiOiBcIlZ1ZVRhYmxlc19fcGFnaW5hdGlvbi13cmFwcGVyXCJcbiAgfSwgW2goXCJkaXZcIiwge1xuICAgIFwiY2xhc3NcIjogXCJcIi5jb25jYXQoY2xhc3Nlcy5maWVsZCwgXCIgXCIpLmNvbmNhdChjbGFzc2VzLmlubGluZSwgXCIgXCIpLmNvbmNhdChjbGFzc2VzLnJpZ2h0LCBcIiBWdWVUYWJsZXNfX2Ryb3Bkb3duLXBhZ2luYXRpb25cIiksXG4gICAgZGlyZWN0aXZlczogW3tcbiAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgdmFsdWU6IHRoaXMudG90YWxQYWdlcyA+IDFcbiAgICB9XVxuICB9LCBbaChcImxhYmVsXCIsIHtcbiAgICBhdHRyczoge1xuICAgICAgXCJmb3JcIjogZGRwSWRcbiAgICB9XG4gIH0sIFt0aGlzLmRpc3BsYXkoXCJwYWdlXCIpXSksIG1vZHVsZXMuZHJvcGRvd25QYWdpbmF0aW9uKGNsYXNzZXMuc2VsZWN0LCBkZHBJZCldKV0pIDogXCJcIjtcbiAgdmFyIGNvbHVtbnNEcm9wZG93biA9IHRoaXMub3B0cy5jb2x1bW5zRHJvcGRvd24gPyBoKFwiZGl2XCIsIHtcbiAgICBcImNsYXNzXCI6IFwiVnVlVGFibGVzX19jb2x1bW5zLWRyb3Bkb3duLXdyYXBwZXJcIlxuICB9LCBbbW9kdWxlcy5jb2x1bW5zRHJvcGRvd24oY2xhc3NlcyldKSA6IFwiXCI7XG4gIHZhciBmb290ZXJIZWFkaW5ncyA9IHRoaXMub3B0cy5mb290ZXJIZWFkaW5ncyA/IGgoXCJ0Zm9vdFwiLCBbaChcInRyXCIsIFttb2R1bGVzLmhlYWRpbmdzKGNsYXNzZXMucmlnaHQpXSldKSA6IFwiXCI7XG4gIHZhciBzaG91bGRTaG93VG9wID0gZ2VuZXJpY0ZpbHRlciB8fCBwZXJwYWdlIHx8IGRyb3Bkb3duUGFnaW5hdGlvbiB8fCBjb2x1bW5zRHJvcGRvd24gfHwgc2xvdHMuYmVmb3JlRmlsdGVyIHx8IHNsb3RzLmFmdGVyRmlsdGVyIHx8IHNsb3RzLmJlZm9yZUxpbWl0IHx8IHNsb3RzLmFmdGVyTGltaXQ7XG4gIHZhciB0YWJsZVRvcCA9IGgoXCJkaXZcIiwge1xuICAgIFwiY2xhc3NcIjogY2xhc3Nlcy5yb3csXG4gICAgZGlyZWN0aXZlczogW3tcbiAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgdmFsdWU6IHNob3VsZFNob3dUb3BcbiAgICB9XVxuICB9LCBbaChcImRpdlwiLCB7XG4gICAgXCJjbGFzc1wiOiBjbGFzc2VzLmNvbHVtblxuICB9LCBbaChcImRpdlwiLCB7XG4gICAgXCJjbGFzc1wiOiBcIlwiLmNvbmNhdChjbGFzc2VzLmZpZWxkLCBcIiBcIikuY29uY2F0KGNsYXNzZXMuaW5saW5lLCBcIiBcIikuY29uY2F0KGNsYXNzZXMubGVmdCwgXCIgVnVlVGFibGVzX19zZWFyY2hcIilcbiAgfSwgW3Nsb3RzLmJlZm9yZUZpbHRlciwgZ2VuZXJpY0ZpbHRlciwgc2xvdHMuYWZ0ZXJGaWx0ZXJdKSwgc2xvdHMuYWZ0ZXJGaWx0ZXJXcmFwcGVyLCBoKFwiZGl2XCIsIHtcbiAgICBcImNsYXNzXCI6IFwiXCIuY29uY2F0KGNsYXNzZXMuZmllbGQsIFwiIFwiKS5jb25jYXQoY2xhc3Nlcy5pbmxpbmUsIFwiIFwiKS5jb25jYXQoY2xhc3Nlcy5yaWdodCwgXCIgVnVlVGFibGVzX19saW1pdFwiKVxuICB9LCBbc2xvdHMuYmVmb3JlTGltaXQsIHBlcnBhZ2UsIHNsb3RzLmFmdGVyTGltaXRdKSwgZHJvcGRvd25QYWdpbmF0aW9uLCBjb2x1bW5zRHJvcGRvd25dKV0pO1xuICByZXR1cm4gaChcImRpdlwiLCB7XG4gICAgXCJjbGFzc1wiOiBcIlZ1ZVRhYmxlcyBWdWVUYWJsZXMtLVwiICsgdGhpcy5zb3VyY2VcbiAgfSwgW3RhYmxlVG9wLCBzbG90cy5iZWZvcmVUYWJsZSwgaChcImRpdlwiLCB7XG4gICAgXCJjbGFzc1wiOiBcInRhYmxlLXJlc3BvbnNpdmVcIlxuICB9LCBbaChcInRhYmxlXCIsIHtcbiAgICBcImNsYXNzXCI6IFwiVnVlVGFibGVzX190YWJsZSBcIi5jb25jYXQodGhpcy5vcHRzLnNraW4gPyB0aGlzLm9wdHMuc2tpbiA6IGNsYXNzZXMudGFibGUpLFxuICAgIGF0dHJzOiB7XG4gICAgICBzdW1tYXJ5OiB0aGlzLm9wdHMuc3VtbWFyeVxuICAgIH1cbiAgfSwgW2NhcHRpb24sIGgoXCJ0aGVhZFwiLCBbc2xvdHMucHJlcGVuZEhlYWQsIGgoXCJ0clwiLCBbbW9kdWxlcy5oZWFkaW5ncyhjbGFzc2VzLnJpZ2h0KV0pLCBzbG90cy5iZWZvcmVGaWx0ZXJzLCBtb2R1bGVzLmNvbHVtbkZpbHRlcnMoY2xhc3NlcyksIHNsb3RzLmFmdGVyRmlsdGVyc10pLCBmb290ZXJIZWFkaW5ncywgc2xvdHMuYmVmb3JlQm9keSwgaChcInRib2R5XCIsIFtzbG90cy5wcmVwZW5kQm9keSwgbW9kdWxlcy5yb3dzKGNsYXNzZXMpLCBzbG90cy5hcHBlbmRCb2R5XSksIHNsb3RzLmFmdGVyQm9keV0pXSksIHNsb3RzLmFmdGVyVGFibGUsIG1vZHVsZXMucGFnaW5hdGlvbigoMCwgX21lcmdlW1wiZGVmYXVsdFwiXSkoY2xhc3Nlcy5wYWdpbmF0aW9uLCB7XG4gICAgd3JhcHBlcjogXCJcIi5jb25jYXQoY2xhc3Nlcy5yb3csIFwiIFwiKS5jb25jYXQoY2xhc3Nlcy5jb2x1bW4sIFwiIFwiKS5jb25jYXQoY2xhc3Nlcy5jb250ZW50Q2VudGVyKSxcbiAgICBuYXY6IGNsYXNzZXMuY2VudGVyLFxuICAgIGNvdW50OiBcIlwiLmNvbmNhdChjbGFzc2VzLmNlbnRlciwgXCIgXCIpLmNvbmNhdChjbGFzc2VzLmNvbHVtbilcbiAgfSkpLCBtb2R1bGVzLmRyb3Bkb3duUGFnaW5hdGlvbkNvdW50KCldKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfbWVyZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJtZXJnZVwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoLCBtb2R1bGVzLCBjbGFzc2VzLCBzbG90cykge1xuICB2YXIgZmlsdGVySWQgPSAnVnVlVGFibGVzX19zZWFyY2hfJyArIHRoaXMuaWQ7XG4gIHZhciBwZXJwYWdlSWQgPSAnVnVlVGFibGVzX19saW1pdF8nICsgdGhpcy5pZDtcblxuICB2YXIgcGVycGFnZVZhbHVlcyA9IHJlcXVpcmUoJy4uL21vZHVsZXMvcGVyLXBhZ2UtdmFsdWVzJykuY2FsbCh0aGlzLCBoKTtcblxuICB2YXIgY2FwdGlvbiA9IHRoaXMub3B0cy5jYXB0aW9uID8gaChcImNhcHRpb25cIiwgW3RoaXMub3B0cy5jYXB0aW9uXSkgOiAnJztcbiAgdmFyIGdlbmVyaWNGaWx0ZXIgPSB0aGlzLmhhc0dlbmVyaWNGaWx0ZXIgPyBoKFwiZGl2XCIsIHtcbiAgICBcImNsYXNzXCI6IFwiVnVlVGFibGVzX19zZWFyY2gtZmllbGRcIlxuICB9LCBbaChcImxhYmVsXCIsIHtcbiAgICBhdHRyczoge1xuICAgICAgXCJmb3JcIjogZmlsdGVySWRcbiAgICB9LFxuICAgIFwiY2xhc3NcIjogY2xhc3Nlcy5sYWJlbFxuICB9LCBbdGhpcy5kaXNwbGF5KCdmaWx0ZXInKV0pLCBtb2R1bGVzLm5vcm1hbEZpbHRlcihjbGFzc2VzLCBmaWx0ZXJJZCldKSA6ICcnO1xuICB2YXIgcGVycGFnZSA9IHBlcnBhZ2VWYWx1ZXMubGVuZ3RoID4gMSA/IGgoXCJkaXZcIiwge1xuICAgIFwiY2xhc3NcIjogXCJWdWVUYWJsZXNfX2xpbWl0LWZpZWxkXCJcbiAgfSwgW2goXCJsYWJlbFwiLCB7XG4gICAgXCJjbGFzc1wiOiBjbGFzc2VzLmxhYmVsLFxuICAgIGF0dHJzOiB7XG4gICAgICBcImZvclwiOiBwZXJwYWdlSWRcbiAgICB9XG4gIH0sIFt0aGlzLmRpc3BsYXkoJ2xpbWl0JyldKSwgbW9kdWxlcy5wZXJQYWdlKHBlcnBhZ2VWYWx1ZXMsIGNsYXNzZXMuc2VsZWN0LCBwZXJwYWdlSWQpXSkgOiAnJztcbiAgdmFyIGNvbHVtbnNEcm9wZG93biA9IHRoaXMub3B0cy5jb2x1bW5zRHJvcGRvd24gPyBoKFwiZGl2XCIsIHtcbiAgICBcImNsYXNzXCI6IFwiVnVlVGFibGVzX19jb2x1bW5zLWRyb3Bkb3duLXdyYXBwZXJcIlxuICB9LCBbbW9kdWxlcy5jb2x1bW5zRHJvcGRvd24oY2xhc3NlcyldKSA6ICcnO1xuICB2YXIgc2hvdWxkU2hvd1RvcCA9IGdlbmVyaWNGaWx0ZXIgfHwgcGVycGFnZSB8fCBjb2x1bW5zRHJvcGRvd24gfHwgc2xvdHMuYmVmb3JlRmlsdGVyIHx8IHNsb3RzLmFmdGVyRmlsdGVyIHx8IHNsb3RzLmJlZm9yZUxpbWl0IHx8IHNsb3RzLmFmdGVyTGltaXQ7XG4gIHZhciB0YWJsZVRvcCA9IGgoXCJkaXZcIiwge1xuICAgIFwiY2xhc3NcIjogY2xhc3Nlcy5yb3csXG4gICAgZGlyZWN0aXZlczogW3tcbiAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgdmFsdWU6IHNob3VsZFNob3dUb3BcbiAgICB9XVxuICB9LCBbaChcImRpdlwiLCB7XG4gICAgXCJjbGFzc1wiOiBjbGFzc2VzLmNvbHVtblxuICB9LCBbaChcImRpdlwiLCB7XG4gICAgXCJjbGFzc1wiOiBcIlwiLmNvbmNhdChjbGFzc2VzLmZpZWxkLCBcIiBcIikuY29uY2F0KGNsYXNzZXMuaW5saW5lLCBcIiBcIikuY29uY2F0KGNsYXNzZXMubGVmdCwgXCIgVnVlVGFibGVzX19zZWFyY2hcIilcbiAgfSwgW3Nsb3RzLmJlZm9yZUZpbHRlciwgZ2VuZXJpY0ZpbHRlciwgc2xvdHMuYWZ0ZXJGaWx0ZXJdKSwgc2xvdHMuYWZ0ZXJGaWx0ZXJXcmFwcGVyLCBoKFwiZGl2XCIsIHtcbiAgICBcImNsYXNzXCI6IFwiXCIuY29uY2F0KGNsYXNzZXMuZmllbGQsIFwiIFwiKS5jb25jYXQoY2xhc3Nlcy5pbmxpbmUsIFwiIFwiKS5jb25jYXQoY2xhc3Nlcy5yaWdodCwgXCIgVnVlVGFibGVzX19saW1pdFwiKVxuICB9LCBbc2xvdHMuYmVmb3JlTGltaXQsIHBlcnBhZ2UsIHNsb3RzLmFmdGVyTGltaXRdKSwgY29sdW1uc0Ryb3Bkb3duXSldKTtcbiAgcmV0dXJuIGgoXCJkaXZcIiwge1xuICAgIFwiY2xhc3NcIjogXCJWdWVUYWJsZXMgVnVlVGFibGVzLS1cIiArIHRoaXMuc291cmNlXG4gIH0sIFt0YWJsZVRvcCwgc2xvdHMuYmVmb3JlVGFibGUsIGgoXCJkaXZcIiwge1xuICAgIFwiY2xhc3NcIjogXCJ0YWJsZS1yZXNwb25zaXZlXCJcbiAgfSwgW2goXCJ0YWJsZVwiLCB7XG4gICAgXCJjbGFzc1wiOiBcIlZ1ZVRhYmxlc19fdGFibGUgXCIuY29uY2F0KHRoaXMub3B0cy5za2luID8gdGhpcy5vcHRzLnNraW4gOiBjbGFzc2VzLnRhYmxlKSxcbiAgICBhdHRyczoge1xuICAgICAgc3VtbWFyeTogdGhpcy5vcHRzLnN1bW1hcnlcbiAgICB9XG4gIH0sIFtjYXB0aW9uLCBoKFwidGhlYWRcIiwgW3Nsb3RzLnByZXBlbmRIZWFkLCBoKFwidHJcIiwgW21vZHVsZXMuaGVhZGluZ3MoY2xhc3Nlcy5yaWdodCldKSwgc2xvdHMuYmVmb3JlRmlsdGVycywgbW9kdWxlcy5jb2x1bW5GaWx0ZXJzKGNsYXNzZXMpLCBzbG90cy5hZnRlckZpbHRlcnNdKSwgaChcInRmb290XCIsIFtoKFwidHJcIiwgW2goXCJ0ZFwiLCB7XG4gICAgYXR0cnM6IHtcbiAgICAgIGNvbHNwYW46IHRoaXMuY29sc3BhblxuICAgIH1cbiAgfSwgW21vZHVsZXMucGFnaW5hdGlvbigoMCwgX21lcmdlW1wiZGVmYXVsdFwiXSkoY2xhc3Nlcy5wYWdpbmF0aW9uLCB7XG4gICAgbGlzdDogXCJcIi5jb25jYXQoY2xhc3Nlcy5wYWdpbmF0aW9uLmxpc3QsIFwiIFwiKS5jb25jYXQoY2xhc3Nlcy5yaWdodCwgXCIgXCIpLmNvbmNhdChjbGFzc2VzLm5vbWFyZ2luKSxcbiAgICBjb3VudDogXCJcIi5jb25jYXQoY2xhc3Nlcy5sZWZ0KVxuICB9KSldKV0pXSksIHNsb3RzLmJlZm9yZUJvZHksIGgoXCJ0Ym9keVwiLCBbc2xvdHMucHJlcGVuZEJvZHksIG1vZHVsZXMucm93cyhjbGFzc2VzKSwgc2xvdHMuYXBwZW5kQm9keV0pLCBzbG90cy5hZnRlckJvZHldKV0pLCBzbG90cy5hZnRlclRhYmxlXSk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHtcbiAgICBmcmFtZXdvcms6ICdib290c3RyYXAzJyxcbiAgICB0YWJsZTogJ3RhYmxlIHRhYmxlLXN0cmlwZWQgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXInLFxuICAgIHJvdzogJ3JvdycsXG4gICAgY29sdW1uOiAnY29sLW1kLTEyJyxcbiAgICBsYWJlbDogJycsXG4gICAgaW5wdXQ6ICdmb3JtLWNvbnRyb2wnLFxuICAgIHNlbGVjdDogJ2Zvcm0tY29udHJvbCcsXG4gICAgZmllbGQ6ICdmb3JtLWdyb3VwJyxcbiAgICBpbmxpbmU6ICdmb3JtLWlubGluZScsXG4gICAgcmlnaHQ6ICdwdWxsLXJpZ2h0JyxcbiAgICBsZWZ0OiAncHVsbC1sZWZ0JyxcbiAgICBjZW50ZXI6ICd0ZXh0LWNlbnRlcicsXG4gICAgY29udGVudENlbnRlcjogJycsXG4gICAgc21hbGw6ICcnLFxuICAgIG5vbWFyZ2luOiAnJyxcbiAgICBncm91cFRyOiAnaW5mbycsXG4gICAgYnV0dG9uOiAnYnRuIGJ0bi1zZWNvbmRhcnknLFxuICAgIGRyb3Bkb3duOiB7XG4gICAgICBjb250YWluZXI6ICdkcm9wZG93bicsXG4gICAgICB0cmlnZ2VyOiAnZHJvcGRvd24tdG9nZ2xlJyxcbiAgICAgIG1lbnU6ICdkcm9wZG93bi1tZW51JyxcbiAgICAgIGNvbnRlbnQ6ICcnLFxuICAgICAgaXRlbTogJycsXG4gICAgICBjYXJldDogJ2NhcmV0J1xuICAgIH0sXG4gICAgcGFnaW5hdGlvbjoge1xuICAgICAgbmF2OiAnJyxcbiAgICAgIGNvdW50OiAnJyxcbiAgICAgIHdyYXBwZXI6ICcnLFxuICAgICAgbGlzdDogJ3BhZ2luYXRpb24nLFxuICAgICAgaXRlbTogJ3BhZ2UtaXRlbScsXG4gICAgICBsaW5rOiAncGFnZS1saW5rJyxcbiAgICAgIG5leHQ6ICcnLFxuICAgICAgcHJldjogJycsXG4gICAgICBhY3RpdmU6ICdhY3RpdmUnLFxuICAgICAgZGlzYWJsZWQ6ICdkaXNhYmxlZCdcbiAgICB9XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHtcbiAgICBmcmFtZXdvcms6ICdib290c3RyYXA0JyxcbiAgICB0YWJsZTogJ3RhYmxlIHRhYmxlLXN0cmlwZWQgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXInLFxuICAgIHJvdzogJ3JvdycsXG4gICAgY29sdW1uOiAnY29sLW1kLTEyJyxcbiAgICBsYWJlbDogJycsXG4gICAgaW5wdXQ6ICdmb3JtLWNvbnRyb2wnLFxuICAgIHNlbGVjdDogJ2Zvcm0tY29udHJvbCcsXG4gICAgZmllbGQ6ICdmb3JtLWdyb3VwJyxcbiAgICBpbmxpbmU6ICdmb3JtLWlubGluZScsXG4gICAgcmlnaHQ6ICdmbG9hdC1yaWdodCcsXG4gICAgbGVmdDogJ2Zsb2F0LWxlZnQnLFxuICAgIGNlbnRlcjogJ3RleHQtY2VudGVyJyxcbiAgICBjb250ZW50Q2VudGVyOiAnanVzdGlmeS1jb250ZW50LWNlbnRlcicsXG4gICAgbm9tYXJnaW46ICdtLTAnLFxuICAgIGdyb3VwVHI6ICd0YWJsZS1pbmZvJyxcbiAgICBzbWFsbDogJycsXG4gICAgYnV0dG9uOiAnYnRuIGJ0bi1zZWNvbmRhcnknLFxuICAgIGRyb3Bkb3duOiB7XG4gICAgICBjb250YWluZXI6ICdkcm9wZG93bicsXG4gICAgICB0cmlnZ2VyOiAnZHJvcGRvd24tdG9nZ2xlJyxcbiAgICAgIG1lbnU6ICdkcm9wZG93bi1tZW51JyxcbiAgICAgIGNvbnRlbnQ6ICcnLFxuICAgICAgaXRlbTogJ2Ryb3Bkb3duLWl0ZW0nLFxuICAgICAgY2FyZXQ6ICdjYXJldCdcbiAgICB9LFxuICAgIHBhZ2luYXRpb246IHtcbiAgICAgIG5hdjogJycsXG4gICAgICBjb3VudDogJycsXG4gICAgICB3cmFwcGVyOiAnJyxcbiAgICAgIGxpc3Q6ICdwYWdpbmF0aW9uJyxcbiAgICAgIGl0ZW06ICdwYWdlLWl0ZW0nLFxuICAgICAgbGluazogJ3BhZ2UtbGluaycsXG4gICAgICBuZXh0OiAnJyxcbiAgICAgIHByZXY6ICcnLFxuICAgICAgYWN0aXZlOiAnYWN0aXZlJyxcbiAgICAgIGRpc2FibGVkOiAnZGlzYWJsZWQnXG4gICAgfVxuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB7XG4gICAgZnJhbWV3b3JrOiAnYnVsbWEnLFxuICAgIHRhYmxlOiAndGFibGUgaXMtYm9yZGVyZWQgaXMtc3RyaXBlZCBpcy1ob3ZlcmFibGUgaXMtZnVsbHdpZHRoJyxcbiAgICByb3c6ICdjb2x1bW5zJyxcbiAgICBjb2x1bW46ICdjb2x1bW4gaXMtMTInLFxuICAgIGxhYmVsOiAnbGFiZWwnLFxuICAgIGlucHV0OiAnaW5wdXQnLFxuICAgIHNlbGVjdDogJ3NlbGVjdCcsXG4gICAgZmllbGQ6ICdmaWVsZCcsXG4gICAgaW5saW5lOiAnaXMtaG9yaXpvbnRhbCcsXG4gICAgcmlnaHQ6ICdpcy1wdWxsZWQtcmlnaHQnLFxuICAgIGxlZnQ6ICdpcy1wdWxsZWQtbGVmdCcsXG4gICAgY2VudGVyOiAnaGFzLXRleHQtY2VudGVyZWQnLFxuICAgIGNvbnRlbnRDZW50ZXI6ICdpcy1jZW50ZXJlZCcsXG4gICAgaWNvbjogJ2ljb24nLFxuICAgIHNtYWxsOiAnaXMtc21hbGwnLFxuICAgIG5vbWFyZ2luOiAnbWFyZ2lubGVzcycsXG4gICAgYnV0dG9uOiAnYnV0dG9uJyxcbiAgICBncm91cFRyOiAnaXMtc2VsZWN0ZWQnLFxuICAgIGRyb3Bkb3duOiB7XG4gICAgICBjb250YWluZXI6ICdkcm9wZG93bicsXG4gICAgICB0cmlnZ2VyOiAnZHJvcGRvd24tdHJpZ2dlcicsXG4gICAgICBtZW51OiAnZHJvcGRvd24tbWVudScsXG4gICAgICBjb250ZW50OiAnZHJvcGRvd24tY29udGVudCcsXG4gICAgICBpdGVtOiAnZHJvcGRvd24taXRlbScsXG4gICAgICBjYXJldDogJ2ZhIGZhLWFuZ2xlLWRvd24nXG4gICAgfSxcbiAgICBwYWdpbmF0aW9uOiB7XG4gICAgICBuYXY6ICcnLFxuICAgICAgY291bnQ6ICcnLFxuICAgICAgd3JhcHBlcjogJ3BhZ2luYXRpb24nLFxuICAgICAgbGlzdDogJ3BhZ2luYXRpb24tbGlzdCcsXG4gICAgICBpdGVtOiAnJyxcbiAgICAgIGxpbms6ICdwYWdpbmF0aW9uLWxpbmsnLFxuICAgICAgbmV4dDogJycsXG4gICAgICBwcmV2OiAnJyxcbiAgICAgIGFjdGl2ZTogJ2lzLWN1cnJlbnQnLFxuICAgICAgZGlzYWJsZWQ6ICcnXG4gICAgfVxuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF92dWVQYWdpbmF0aW9uID0gcmVxdWlyZShcInZ1ZS1wYWdpbmF0aW9uLTJcIik7XG5cbnZhciBfdnVleCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3RhdGUvdnVleFwiKSk7XG5cbnZhciBfbm9ybWFsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zdGF0ZS9ub3JtYWxcIikpO1xuXG52YXIgX21lcmdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwibWVyZ2VcIikpO1xuXG52YXIgX3RhYmxlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi90YWJsZVwiKSk7XG5cbnZhciBfZGF0YTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3N0YXRlL2RhdGFcIikpO1xuXG52YXIgX3Jlc2l6ZWFibGVDb2x1bW5zID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3Jlc2l6ZWFibGUtY29sdW1uc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG52YXIgX2RhdGEgPSByZXF1aXJlKFwiLi9taXhpbnMvZGF0YVwiKTtcblxudmFyIF9jcmVhdGVkID0gcmVxdWlyZShcIi4vbWl4aW5zL2NyZWF0ZWRcIik7XG5cbnZhciB0ZW1wbGF0ZUNvbXBpbGVyID0gcmVxdWlyZShcIi4vdGVtcGxhdGUtY29tcGlsZXJcIik7XG5cbmV4cG9ydHMuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUsIGdsb2JhbE9wdGlvbnMsIHVzZVZ1ZXgpIHtcbiAgdmFyIHRoZW1lID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBcImJvb3RzdHJhcDNcIjtcbiAgdmFyIHRlbXBsYXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiBcImRlZmF1bHRcIjtcblxuICB2YXIgY2xpZW50ID0gX21lcmdlW1wiZGVmYXVsdFwiXS5yZWN1cnNpdmUodHJ1ZSwgKDAsIF90YWJsZVtcImRlZmF1bHRcIl0pKCksIHtcbiAgICBuYW1lOiBcImNsaWVudC10YWJsZVwiLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgIFBhZ2luYXRpb246IF92dWVQYWdpbmF0aW9uLlBhZ2luYXRpb25cbiAgICB9LFxuICAgIHJlbmRlcjogdGVtcGxhdGVDb21waWxlci5jYWxsKHRoaXMsIHRlbXBsYXRlLCB0aGVtZSksXG4gICAgcHJvcHM6IHtcbiAgICAgIGNvbHVtbnM6IHtcbiAgICAgICAgdHlwZTogQXJyYXksXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICB9LFxuICAgICAgZGF0YToge1xuICAgICAgICB0eXBlOiBBcnJheSxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgIH0sXG4gICAgICBuYW1lOiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgICB9LFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgXCJkZWZhdWx0XCI6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcbiAgICAgIF9jcmVhdGVkKHRoaXMpO1xuXG4gICAgICBpZiAodGhpcy5vcHRzLnRvTW9tZW50Rm9ybWF0KSB0aGlzLnRyYW5zZm9ybURhdGVTdHJpbmdzVG9Nb21lbnQoKTtcblxuICAgICAgaWYgKCF0aGlzLnZ1ZXgpIHtcbiAgICAgICAgdGhpcy5pbml0T3JkZXJCeSgpO1xuICAgICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy5pbml0UXVlcnkoKTtcbiAgICAgICAgdGhpcy5jdXN0b21RdWVyaWVzID0gdGhpcy5pbml0Q3VzdG9tRmlsdGVycygpO1xuICAgICAgfVxuICAgIH0sXG4gICAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICAgIHRoaXMuX3NldEZpbHRlcnNET00odGhpcy5xdWVyeSk7XG5cbiAgICAgIGlmICh0aGlzLm9wdHMucmVzaXphYmxlQ29sdW1ucykge1xuICAgICAgICAoMCwgX3Jlc2l6ZWFibGVDb2x1bW5zW1wiZGVmYXVsdFwiXSkodGhpcy4kZWwucXVlcnlTZWxlY3RvcihcInRhYmxlXCIpLCB0aGlzLmhhc0NoaWxkUm93LCB0aGlzLm9wdHMuY2hpbGRSb3dUb2dnbGVyRmlyc3QpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zZXRDb2x1bW5zRHJvcGRvd25DbG9zZUxpc3RlbmVyKCk7XG5cbiAgICAgIGlmICghdGhpcy52dWV4KSB7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJDbGllbnRGaWx0ZXJzKCk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaW5pdGlhbFBhZ2UpIHRoaXMuc2V0UGFnZSh0aGlzLm9wdGlvbnMuaW5pdGlhbFBhZ2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRzLmdyb3VwQnkgJiYgIXRoaXMub3B0cy5vcmRlckJ5KSB7XG4gICAgICAgIHRoaXMub3JkZXJCeS5jb2x1bW4gPSB0aGlzLm9wdHMuZ3JvdXBCeTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2FkU3RhdGUoKTtcblxuICAgICAgaWYgKHRoaXMuaGFzRGF0ZUZpbHRlcnMoKSkge1xuICAgICAgICB0aGlzLmluaXREYXRlRmlsdGVycygpO1xuICAgICAgfVxuICAgIH0sXG4gICAgbW9kZWw6IHtcbiAgICAgIHByb3A6IFwiZGF0YVwiXG4gICAgfSxcbiAgICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgICAgcmV0dXJuIF9tZXJnZVtcImRlZmF1bHRcIl0ucmVjdXJzaXZlKF9kYXRhKCksIHtcbiAgICAgICAgc291cmNlOiBcImNsaWVudFwiLFxuICAgICAgICBnbG9iYWxPcHRpb25zOiBnbG9iYWxPcHRpb25zLFxuICAgICAgICBjdXJyZW50bHlTb3J0aW5nOiB7fSxcbiAgICAgICAgdGltZTogRGF0ZS5ub3coKVxuICAgICAgfSwgKDAsIF9kYXRhMltcImRlZmF1bHRcIl0pKHVzZVZ1ZXgsIFwiY2xpZW50XCIsIHRoaXMub3B0aW9ucy5pbml0aWFsUGFnZSkpO1xuICAgIH0sXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIHE6IHJlcXVpcmUoXCIuL2NvbXB1dGVkL3FcIiksXG4gICAgICBjdXN0b21ROiByZXF1aXJlKFwiLi9jb21wdXRlZC9jdXN0b20tcVwiKSxcbiAgICAgIHRvdGFsUGFnZXM6IHJlcXVpcmUoXCIuL2NvbXB1dGVkL3RvdGFsLXBhZ2VzXCIpLFxuICAgICAgZmlsdGVyZWREYXRhOiByZXF1aXJlKFwiLi9jb21wdXRlZC9maWx0ZXJlZC1kYXRhXCIpLFxuICAgICAgaGFzTXVsdGlTb3J0OiBmdW5jdGlvbiBoYXNNdWx0aVNvcnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdHMuY2xpZW50TXVsdGlTb3J0aW5nO1xuICAgICAgfVxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgdHJhbnNmb3JtRGF0ZVN0cmluZ3NUb01vbWVudDogcmVxdWlyZShcIi4vbWV0aG9kcy90cmFuc2Zvcm0tZGF0ZS1zdHJpbmdzLXRvLW1vbWVudFwiKSxcbiAgICAgIHJlZ2lzdGVyQ2xpZW50RmlsdGVyczogcmVxdWlyZShcIi4vbWV0aG9kcy9yZWdpc3Rlci1jbGllbnQtZmlsdGVyc1wiKSxcbiAgICAgIHNlYXJjaDogcmVxdWlyZShcIi4vbWV0aG9kcy9jbGllbnQtc2VhcmNoXCIpLFxuICAgICAgZGVmYXVsdFNvcnQ6IHJlcXVpcmUoXCIuL21ldGhvZHMvZGVmYXVsdC1zb3J0XCIpLFxuICAgICAgZ2V0R3JvdXBTbG90OiByZXF1aXJlKFwiLi9tZXRob2RzL2dldC1ncm91cC1zbG90XCIpLFxuICAgICAgdG9nZ2xlR3JvdXA6IGZ1bmN0aW9uIHRvZ2dsZUdyb3VwKGdyb3VwLCBlKSB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHZhciBpID0gdGhpcy5jb2xsYXBzZWRHcm91cHMuaW5kZXhPZihncm91cCk7XG5cbiAgICAgICAgaWYgKGkgPj0gMCkge1xuICAgICAgICAgIHRoaXMuY29sbGFwc2VkR3JvdXBzLnNwbGljZShpLCAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbGxhcHNlZEdyb3Vwcy5wdXNoKGdyb3VwKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGdyb3VwVG9nZ2xlSWNvbjogZnVuY3Rpb24gZ3JvdXBUb2dnbGVJY29uKGdyb3VwKSB7XG4gICAgICAgIHZhciBjbHMgPSB0aGlzLm9wdHMuc29ydEljb24uYmFzZSArIFwiIFwiO1xuICAgICAgICBjbHMgKz0gdGhpcy5jb2xsYXBzZWRHcm91cHMuaW5kZXhPZihncm91cCkgPiAtMSA/IHRoaXMub3B0cy5zb3J0SWNvbi5kb3duIDogdGhpcy5vcHRzLnNvcnRJY29uLnVwO1xuICAgICAgICByZXR1cm4gY2xzO1xuICAgICAgfSxcbiAgICAgIGxvYWRTdGF0ZTogZnVuY3Rpb24gbG9hZFN0YXRlKCkge1xuICAgICAgICBpZiAoIXRoaXMub3B0cy5zYXZlU3RhdGUpIHJldHVybjtcblxuICAgICAgICBpZiAoIXRoaXMuc3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RhdGVLZXkpKSB7XG4gICAgICAgICAgdGhpcy5pbml0U3RhdGUoKTtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVN0YXRlID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc3RhdGUgPSBKU09OLnBhcnNlKHRoaXMuc3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RhdGVLZXkpKTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5maWx0ZXJhYmxlKSB0aGlzLnNldEZpbHRlcihzdGF0ZS5xdWVyeSk7XG4gICAgICAgIHRoaXMuc2V0T3JkZXIoc3RhdGUub3JkZXJCeS5jb2x1bW4sIHN0YXRlLm9yZGVyQnkuYXNjZW5kaW5nKTtcblxuICAgICAgICBpZiAodGhpcy52dWV4KSB7XG4gICAgICAgICAgdGhpcy5jb21taXQoXCJTRVRfTElNSVRcIiwgc3RhdGUucGVyUGFnZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5saW1pdCA9IHN0YXRlLnBlclBhZ2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFBhZ2Uoc3RhdGUucGFnZSk7XG4gICAgICAgIHRoaXMuYWN0aXZlU3RhdGUgPSB0cnVlO1xuXG4gICAgICAgIGlmIChzdGF0ZS51c2VyQ29udHJvbHNDb2x1bW5zKSB7XG4gICAgICAgICAgdGhpcy51c2VyQ29sdW1uc0Rpc3BsYXkgPSBzdGF0ZS51c2VyQ29sdW1uc0Rpc3BsYXk7XG4gICAgICAgICAgdGhpcy51c2VyQ29udHJvbHNDb2x1bW5zID0gc3RhdGUudXNlckNvbnRyb2xzQ29sdW1ucztcbiAgICAgICAgfSAvLyBUT0RPOiBDdXN0b20gUXVlcmllc1xuXG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICB2YXIgc3RhdGUgPSB1c2VWdWV4ID8gKDAsIF92dWV4W1wiZGVmYXVsdFwiXSkoKSA6ICgwLCBfbm9ybWFsW1wiZGVmYXVsdFwiXSkoKTtcbiAgY2xpZW50ID0gX21lcmdlW1wiZGVmYXVsdFwiXS5yZWN1cnNpdmUoY2xpZW50LCBzdGF0ZSk7XG4gIFZ1ZS5jb21wb25lbnQoXCJ2LWNsaWVudC10YWJsZVwiLCBjbGllbnQpO1xuICByZXR1cm4gY2xpZW50O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9tZXJnZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIm1lcmdlXCIpKTtcblxudmFyIF9kYXRhMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3RhdGUvZGF0YVwiKSk7XG5cbnZhciBfdnVleCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3RhdGUvdnVleFwiKSk7XG5cbnZhciBfbm9ybWFsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zdGF0ZS9ub3JtYWxcIikpO1xuXG52YXIgX3RhYmxlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi90YWJsZVwiKSk7XG5cbnZhciBfdnVlUGFnaW5hdGlvbiA9IHJlcXVpcmUoXCJ2dWUtcGFnaW5hdGlvbi0yXCIpO1xuXG52YXIgX3Jlc2l6ZWFibGVDb2x1bW5zID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3Jlc2l6ZWFibGUtY29sdW1uc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG52YXIgX2RhdGEgPSByZXF1aXJlKFwiLi9taXhpbnMvZGF0YVwiKTtcblxudmFyIF9jcmVhdGVkID0gcmVxdWlyZShcIi4vbWl4aW5zL2NyZWF0ZWRcIik7XG5cbnZhciB0ZW1wbGF0ZUNvbXBpbGVyID0gcmVxdWlyZShcIi4vdGVtcGxhdGUtY29tcGlsZXJcIik7XG5cbmV4cG9ydHMuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUsIGdsb2JhbE9wdGlvbnMsIHVzZVZ1ZXgpIHtcbiAgdmFyIHRoZW1lID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBcImJvb3RzdHJhcDNcIjtcbiAgdmFyIHRlbXBsYXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiBcImRlZmF1bHRcIjtcbiAgdmFyIHN0YXRlID0gdXNlVnVleCA/ICgwLCBfdnVleFtcImRlZmF1bHRcIl0pKFwic2VydmVyXCIpIDogKDAsIF9ub3JtYWxbXCJkZWZhdWx0XCJdKSgpO1xuXG4gIHZhciBzZXJ2ZXIgPSBfbWVyZ2VbXCJkZWZhdWx0XCJdLnJlY3Vyc2l2ZSh0cnVlLCAoMCwgX3RhYmxlW1wiZGVmYXVsdFwiXSkoKSwge1xuICAgIG5hbWU6IFwic2VydmVyLXRhYmxlXCIsXG4gICAgY29tcG9uZW50czoge1xuICAgICAgUGFnaW5hdGlvbjogX3Z1ZVBhZ2luYXRpb24uUGFnaW5hdGlvblxuICAgIH0sXG4gICAgcmVuZGVyOiB0ZW1wbGF0ZUNvbXBpbGVyLmNhbGwodGhpcywgdGVtcGxhdGUsIHRoZW1lKSxcbiAgICBwcm9wczoge1xuICAgICAgY29sdW1uczoge1xuICAgICAgICB0eXBlOiBBcnJheSxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgIH0sXG4gICAgICB1cmw6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgICB9LFxuICAgICAgbmFtZToge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIFwiZGVmYXVsdFwiOiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG4gICAgICBpZiAoIXRoaXMub3B0cy5yZXF1ZXN0RnVuY3Rpb24gJiYgIXRoaXMudXJsKSB7XG4gICAgICAgIHRocm93ICd2dWUtdGFibGVzLTI6IHlvdSBtdXN0IHByb3ZpZGUgZWl0aGVyIGEgXCJ1cmxcIiBwcm9wIG9yIGEgY3VzdG9tIHJlcXVlc3QgZnVuY3Rpb24uIEFib3J0aW5nJztcbiAgICAgIH1cblxuICAgICAgX2NyZWF0ZWQodGhpcyk7XG5cbiAgICAgIGlmICghdGhpcy52dWV4KSB7XG4gICAgICAgIHRoaXMucXVlcnkgPSB0aGlzLmluaXRRdWVyeSgpO1xuICAgICAgICB0aGlzLmluaXRPcmRlckJ5KCk7XG4gICAgICAgIHRoaXMuY3VzdG9tUXVlcmllcyA9IHRoaXMuaW5pdEN1c3RvbUZpbHRlcnMoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0cy5zZW5kSW5pdGlhbFJlcXVlc3QpIHtcbiAgICAgICAgdGhpcy5sb2FkU3RhdGUoKTtcbiAgICAgICAgdGhpcy5nZXREYXRhKHRydWUpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRhKHJlc3BvbnNlKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgIGlmICh0aGlzLmhhc0RhdGVGaWx0ZXJzKCkpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB0aGlzLmluaXREYXRlRmlsdGVycygpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgICAgdGhpcy5fc2V0RmlsdGVyc0RPTSh0aGlzLnF1ZXJ5KTtcblxuICAgICAgaWYgKHRoaXMub3B0cy5yZXNpemFibGVDb2x1bW5zKSB7XG4gICAgICAgICgwLCBfcmVzaXplYWJsZUNvbHVtbnNbXCJkZWZhdWx0XCJdKSh0aGlzLiRlbC5xdWVyeVNlbGVjdG9yKFwidGFibGVcIiksIHRoaXMuaGFzQ2hpbGRSb3csIHRoaXMub3B0cy5jaGlsZFJvd1RvZ2dsZXJGaXJzdCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3NldENvbHVtbnNEcm9wZG93bkNsb3NlTGlzdGVuZXIoKTtcblxuICAgICAgaWYgKHRoaXMudnVleCkgcmV0dXJuO1xuICAgICAgdGhpcy5yZWdpc3RlclNlcnZlckZpbHRlcnMoKTtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaW5pdGlhbFBhZ2UpIHRoaXMuc2V0UGFnZSh0aGlzLm9wdGlvbnMuaW5pdGlhbFBhZ2UsIHRydWUpO1xuICAgIH0sXG4gICAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICAgIHJldHVybiBfbWVyZ2VbXCJkZWZhdWx0XCJdLnJlY3Vyc2l2ZShfZGF0YSgpLCB7XG4gICAgICAgIHNvdXJjZTogXCJzZXJ2ZXJcIixcbiAgICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgICAgbGFzdEtleVN0cm9rZUF0OiBmYWxzZSxcbiAgICAgICAgZ2xvYmFsT3B0aW9uczogZ2xvYmFsT3B0aW9uc1xuICAgICAgfSwgKDAsIF9kYXRhMltcImRlZmF1bHRcIl0pKHVzZVZ1ZXgsIFwic2VydmVyXCIsIHRoaXMub3B0aW9ucy5pbml0aWFsUGFnZSkpO1xuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgcmVmcmVzaDogcmVxdWlyZShcIi4vbWV0aG9kcy9yZWZyZXNoXCIpLFxuICAgICAgZ2V0RGF0YTogcmVxdWlyZShcIi4vbWV0aG9kcy9nZXQtZGF0YVwiKSxcbiAgICAgIHNldERhdGE6IHJlcXVpcmUoXCIuL21ldGhvZHMvc2V0LWRhdGFcIiksXG4gICAgICBzZXJ2ZXJTZWFyY2g6IHJlcXVpcmUoXCIuL21ldGhvZHMvc2VydmVyLXNlYXJjaFwiKSxcbiAgICAgIHJlZ2lzdGVyU2VydmVyRmlsdGVyczogcmVxdWlyZShcIi4vbWV0aG9kcy9yZWdpc3Rlci1zZXJ2ZXItZmlsdGVyc1wiKSxcbiAgICAgIGxvYWRTdGF0ZTogZnVuY3Rpb24gbG9hZFN0YXRlKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAgIGlmICghdGhpcy5vcHRzLnNhdmVTdGF0ZSkgcmV0dXJuO1xuXG4gICAgICAgIGlmICghdGhpcy5zdG9yYWdlLmdldEl0ZW0odGhpcy5zdGF0ZUtleSkpIHtcbiAgICAgICAgICB0aGlzLmluaXRTdGF0ZSgpO1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3RhdGUgPSB0cnVlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdGF0ZSA9IEpTT04ucGFyc2UodGhpcy5zdG9yYWdlLmdldEl0ZW0odGhpcy5zdGF0ZUtleSkpO1xuXG4gICAgICAgIGlmICh0aGlzLnZ1ZXgpIHtcbiAgICAgICAgICB0aGlzLmNvbW1pdChcIlNFVF9TVEFURVwiLCB7XG4gICAgICAgICAgICBxdWVyeTogc3RhdGUucXVlcnksXG4gICAgICAgICAgICBjdXN0b21RdWVyaWVzOiBzdGF0ZS5jdXN0b21RdWVyaWVzLFxuICAgICAgICAgICAgcGFnZTogc3RhdGUucGFnZSxcbiAgICAgICAgICAgIGxpbWl0OiBzdGF0ZS5wZXJQYWdlLFxuICAgICAgICAgICAgb3JkZXJCeTogc3RhdGUub3JkZXJCeVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucGFnZSA9IHN0YXRlLnBhZ2U7XG4gICAgICAgICAgdGhpcy5xdWVyeSA9IHN0YXRlLnF1ZXJ5O1xuICAgICAgICAgIHRoaXMuY3VzdG9tUXVlcmllcyA9IHN0YXRlLmN1c3RvbVF1ZXJpZXM7XG4gICAgICAgICAgdGhpcy5saW1pdCA9IHN0YXRlLnBlclBhZ2U7XG4gICAgICAgICAgdGhpcy5vcmRlckJ5ID0gc3RhdGUub3JkZXJCeTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5vcHRzLnBhZ2luYXRpb24uZHJvcGRvd24gJiYgdGhpcy4kcmVmcy5wYWdpbmF0aW9uKSB7XG4gICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy4kcmVmcy5wYWdpbmF0aW9uLlBhZ2UgPSBzdGF0ZS5wYWdlO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0cy5maWx0ZXJhYmxlKSB7XG4gICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fc2V0RmlsdGVyc0RPTShzdGF0ZS5xdWVyeSk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFjdGl2ZVN0YXRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHdhdGNoOiB7XG4gICAgICB1cmw6IGZ1bmN0aW9uIHVybCgpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBjb21wdXRlZDoge1xuICAgICAgdG90YWxQYWdlczogcmVxdWlyZShcIi4vY29tcHV0ZWQvdG90YWwtcGFnZXNcIiksXG4gICAgICBmaWx0ZXJlZFF1ZXJ5OiByZXF1aXJlKFwiLi9jb21wdXRlZC9maWx0ZXJlZC1xdWVyeVwiKSxcbiAgICAgIGhhc011bHRpU29ydDogZnVuY3Rpb24gaGFzTXVsdGlTb3J0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRzLnNlcnZlck11bHRpU29ydGluZztcbiAgICAgIH1cbiAgICB9XG4gIH0sIHN0YXRlKTtcblxuICBWdWUuY29tcG9uZW50KFwidi1zZXJ2ZXItdGFibGVcIiwgc2VydmVyKTtcbiAgcmV0dXJuIHNlcnZlcjtcbn07IiwidmFyIGNsb25lID0gKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBfaW5zdGFuY2VvZihvYmosIHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUgIT0gbnVsbCAmJiBvYmogaW5zdGFuY2VvZiB0eXBlO1xufVxuXG52YXIgbmF0aXZlTWFwO1xudHJ5IHtcbiAgbmF0aXZlTWFwID0gTWFwO1xufSBjYXRjaChfKSB7XG4gIC8vIG1heWJlIGEgcmVmZXJlbmNlIGVycm9yIGJlY2F1c2Ugbm8gYE1hcGAuIEdpdmUgaXQgYSBkdW1teSB2YWx1ZSB0aGF0IG5vXG4gIC8vIHZhbHVlIHdpbGwgZXZlciBiZSBhbiBpbnN0YW5jZW9mLlxuICBuYXRpdmVNYXAgPSBmdW5jdGlvbigpIHt9O1xufVxuXG52YXIgbmF0aXZlU2V0O1xudHJ5IHtcbiAgbmF0aXZlU2V0ID0gU2V0O1xufSBjYXRjaChfKSB7XG4gIG5hdGl2ZVNldCA9IGZ1bmN0aW9uKCkge307XG59XG5cbnZhciBuYXRpdmVQcm9taXNlO1xudHJ5IHtcbiAgbmF0aXZlUHJvbWlzZSA9IFByb21pc2U7XG59IGNhdGNoKF8pIHtcbiAgbmF0aXZlUHJvbWlzZSA9IGZ1bmN0aW9uKCkge307XG59XG5cbi8qKlxuICogQ2xvbmVzIChjb3BpZXMpIGFuIE9iamVjdCB1c2luZyBkZWVwIGNvcHlpbmcuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyBjaXJjdWxhciByZWZlcmVuY2VzIGJ5IGRlZmF1bHQsIGJ1dCBpZiB5b3UgYXJlIGNlcnRhaW5cbiAqIHRoZXJlIGFyZSBubyBjaXJjdWxhciByZWZlcmVuY2VzIGluIHlvdXIgb2JqZWN0LCB5b3UgY2FuIHNhdmUgc29tZSBDUFUgdGltZVxuICogYnkgY2FsbGluZyBjbG9uZShvYmosIGZhbHNlKS5cbiAqXG4gKiBDYXV0aW9uOiBpZiBgY2lyY3VsYXJgIGlzIGZhbHNlIGFuZCBgcGFyZW50YCBjb250YWlucyBjaXJjdWxhciByZWZlcmVuY2VzLFxuICogeW91ciBwcm9ncmFtIG1heSBlbnRlciBhbiBpbmZpbml0ZSBsb29wIGFuZCBjcmFzaC5cbiAqXG4gKiBAcGFyYW0gYHBhcmVudGAgLSB0aGUgb2JqZWN0IHRvIGJlIGNsb25lZFxuICogQHBhcmFtIGBjaXJjdWxhcmAgLSBzZXQgdG8gdHJ1ZSBpZiB0aGUgb2JqZWN0IHRvIGJlIGNsb25lZCBtYXkgY29udGFpblxuICogICAgY2lyY3VsYXIgcmVmZXJlbmNlcy4gKG9wdGlvbmFsIC0gdHJ1ZSBieSBkZWZhdWx0KVxuICogQHBhcmFtIGBkZXB0aGAgLSBzZXQgdG8gYSBudW1iZXIgaWYgdGhlIG9iamVjdCBpcyBvbmx5IHRvIGJlIGNsb25lZCB0b1xuICogICAgYSBwYXJ0aWN1bGFyIGRlcHRoLiAob3B0aW9uYWwgLSBkZWZhdWx0cyB0byBJbmZpbml0eSlcbiAqIEBwYXJhbSBgcHJvdG90eXBlYCAtIHNldHMgdGhlIHByb3RvdHlwZSB0byBiZSB1c2VkIHdoZW4gY2xvbmluZyBhbiBvYmplY3QuXG4gKiAgICAob3B0aW9uYWwgLSBkZWZhdWx0cyB0byBwYXJlbnQgcHJvdG90eXBlKS5cbiAqIEBwYXJhbSBgaW5jbHVkZU5vbkVudW1lcmFibGVgIC0gc2V0IHRvIHRydWUgaWYgdGhlIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXNcbiAqICAgIHNob3VsZCBiZSBjbG9uZWQgYXMgd2VsbC4gTm9uLWVudW1lcmFibGUgcHJvcGVydGllcyBvbiB0aGUgcHJvdG90eXBlXG4gKiAgICBjaGFpbiB3aWxsIGJlIGlnbm9yZWQuIChvcHRpb25hbCAtIGZhbHNlIGJ5IGRlZmF1bHQpXG4qL1xuZnVuY3Rpb24gY2xvbmUocGFyZW50LCBjaXJjdWxhciwgZGVwdGgsIHByb3RvdHlwZSwgaW5jbHVkZU5vbkVudW1lcmFibGUpIHtcbiAgaWYgKHR5cGVvZiBjaXJjdWxhciA9PT0gJ29iamVjdCcpIHtcbiAgICBkZXB0aCA9IGNpcmN1bGFyLmRlcHRoO1xuICAgIHByb3RvdHlwZSA9IGNpcmN1bGFyLnByb3RvdHlwZTtcbiAgICBpbmNsdWRlTm9uRW51bWVyYWJsZSA9IGNpcmN1bGFyLmluY2x1ZGVOb25FbnVtZXJhYmxlO1xuICAgIGNpcmN1bGFyID0gY2lyY3VsYXIuY2lyY3VsYXI7XG4gIH1cbiAgLy8gbWFpbnRhaW4gdHdvIGFycmF5cyBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcywgd2hlcmUgY29ycmVzcG9uZGluZyBwYXJlbnRzXG4gIC8vIGFuZCBjaGlsZHJlbiBoYXZlIHRoZSBzYW1lIGluZGV4XG4gIHZhciBhbGxQYXJlbnRzID0gW107XG4gIHZhciBhbGxDaGlsZHJlbiA9IFtdO1xuXG4gIHZhciB1c2VCdWZmZXIgPSB0eXBlb2YgQnVmZmVyICE9ICd1bmRlZmluZWQnO1xuXG4gIGlmICh0eXBlb2YgY2lyY3VsYXIgPT0gJ3VuZGVmaW5lZCcpXG4gICAgY2lyY3VsYXIgPSB0cnVlO1xuXG4gIGlmICh0eXBlb2YgZGVwdGggPT0gJ3VuZGVmaW5lZCcpXG4gICAgZGVwdGggPSBJbmZpbml0eTtcblxuICAvLyByZWN1cnNlIHRoaXMgZnVuY3Rpb24gc28gd2UgZG9uJ3QgcmVzZXQgYWxsUGFyZW50cyBhbmQgYWxsQ2hpbGRyZW5cbiAgZnVuY3Rpb24gX2Nsb25lKHBhcmVudCwgZGVwdGgpIHtcbiAgICAvLyBjbG9uaW5nIG51bGwgYWx3YXlzIHJldHVybnMgbnVsbFxuICAgIGlmIChwYXJlbnQgPT09IG51bGwpXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGlmIChkZXB0aCA9PT0gMClcbiAgICAgIHJldHVybiBwYXJlbnQ7XG5cbiAgICB2YXIgY2hpbGQ7XG4gICAgdmFyIHByb3RvO1xuICAgIGlmICh0eXBlb2YgcGFyZW50ICE9ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gcGFyZW50O1xuICAgIH1cblxuICAgIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIG5hdGl2ZU1hcCkpIHtcbiAgICAgIGNoaWxkID0gbmV3IG5hdGl2ZU1hcCgpO1xuICAgIH0gZWxzZSBpZiAoX2luc3RhbmNlb2YocGFyZW50LCBuYXRpdmVTZXQpKSB7XG4gICAgICBjaGlsZCA9IG5ldyBuYXRpdmVTZXQoKTtcbiAgICB9IGVsc2UgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgbmF0aXZlUHJvbWlzZSkpIHtcbiAgICAgIGNoaWxkID0gbmV3IG5hdGl2ZVByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBwYXJlbnQudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgIHJlc29sdmUoX2Nsb25lKHZhbHVlLCBkZXB0aCAtIDEpKTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KF9jbG9uZShlcnIsIGRlcHRoIC0gMSkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoY2xvbmUuX19pc0FycmF5KHBhcmVudCkpIHtcbiAgICAgIGNoaWxkID0gW107XG4gICAgfSBlbHNlIGlmIChjbG9uZS5fX2lzUmVnRXhwKHBhcmVudCkpIHtcbiAgICAgIGNoaWxkID0gbmV3IFJlZ0V4cChwYXJlbnQuc291cmNlLCBfX2dldFJlZ0V4cEZsYWdzKHBhcmVudCkpO1xuICAgICAgaWYgKHBhcmVudC5sYXN0SW5kZXgpIGNoaWxkLmxhc3RJbmRleCA9IHBhcmVudC5sYXN0SW5kZXg7XG4gICAgfSBlbHNlIGlmIChjbG9uZS5fX2lzRGF0ZShwYXJlbnQpKSB7XG4gICAgICBjaGlsZCA9IG5ldyBEYXRlKHBhcmVudC5nZXRUaW1lKCkpO1xuICAgIH0gZWxzZSBpZiAodXNlQnVmZmVyICYmIEJ1ZmZlci5pc0J1ZmZlcihwYXJlbnQpKSB7XG4gICAgICBpZiAoQnVmZmVyLmFsbG9jVW5zYWZlKSB7XG4gICAgICAgIC8vIE5vZGUuanMgPj0gNC41LjBcbiAgICAgICAgY2hpbGQgPSBCdWZmZXIuYWxsb2NVbnNhZmUocGFyZW50Lmxlbmd0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPbGRlciBOb2RlLmpzIHZlcnNpb25zXG4gICAgICAgIGNoaWxkID0gbmV3IEJ1ZmZlcihwYXJlbnQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIHBhcmVudC5jb3B5KGNoaWxkKTtcbiAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9IGVsc2UgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgRXJyb3IpKSB7XG4gICAgICBjaGlsZCA9IE9iamVjdC5jcmVhdGUocGFyZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiBwcm90b3R5cGUgPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocGFyZW50KTtcbiAgICAgICAgY2hpbGQgPSBPYmplY3QuY3JlYXRlKHByb3RvKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjaGlsZCA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlKTtcbiAgICAgICAgcHJvdG8gPSBwcm90b3R5cGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNpcmN1bGFyKSB7XG4gICAgICB2YXIgaW5kZXggPSBhbGxQYXJlbnRzLmluZGV4T2YocGFyZW50KTtcblxuICAgICAgaWYgKGluZGV4ICE9IC0xKSB7XG4gICAgICAgIHJldHVybiBhbGxDaGlsZHJlbltpbmRleF07XG4gICAgICB9XG4gICAgICBhbGxQYXJlbnRzLnB1c2gocGFyZW50KTtcbiAgICAgIGFsbENoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgIH1cblxuICAgIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIG5hdGl2ZU1hcCkpIHtcbiAgICAgIHBhcmVudC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgdmFyIGtleUNoaWxkID0gX2Nsb25lKGtleSwgZGVwdGggLSAxKTtcbiAgICAgICAgdmFyIHZhbHVlQ2hpbGQgPSBfY2xvbmUodmFsdWUsIGRlcHRoIC0gMSk7XG4gICAgICAgIGNoaWxkLnNldChrZXlDaGlsZCwgdmFsdWVDaGlsZCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgbmF0aXZlU2V0KSkge1xuICAgICAgcGFyZW50LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdmFyIGVudHJ5Q2hpbGQgPSBfY2xvbmUodmFsdWUsIGRlcHRoIC0gMSk7XG4gICAgICAgIGNoaWxkLmFkZChlbnRyeUNoaWxkKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgaW4gcGFyZW50KSB7XG4gICAgICB2YXIgYXR0cnM7XG4gICAgICBpZiAocHJvdG8pIHtcbiAgICAgICAgYXR0cnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGF0dHJzICYmIGF0dHJzLnNldCA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY2hpbGRbaV0gPSBfY2xvbmUocGFyZW50W2ldLCBkZXB0aCAtIDEpO1xuICAgIH1cblxuICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocGFyZW50KTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBEb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGNsb25pbmcgYSBzeW1ib2wgYmVjYXVzZSBpdCBpcyBhIHByaW1pdGl2ZSxcbiAgICAgICAgLy8gbGlrZSBhIG51bWJlciBvciBzdHJpbmcuXG4gICAgICAgIHZhciBzeW1ib2wgPSBzeW1ib2xzW2ldO1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocGFyZW50LCBzeW1ib2wpO1xuICAgICAgICBpZiAoZGVzY3JpcHRvciAmJiAhZGVzY3JpcHRvci5lbnVtZXJhYmxlICYmICFpbmNsdWRlTm9uRW51bWVyYWJsZSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNoaWxkW3N5bWJvbF0gPSBfY2xvbmUocGFyZW50W3N5bWJvbF0sIGRlcHRoIC0gMSk7XG4gICAgICAgIGlmICghZGVzY3JpcHRvci5lbnVtZXJhYmxlKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNoaWxkLCBzeW1ib2wsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5jbHVkZU5vbkVudW1lcmFibGUpIHtcbiAgICAgIHZhciBhbGxQcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocGFyZW50KTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsUHJvcGVydHlOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcHJvcGVydHlOYW1lID0gYWxsUHJvcGVydHlOYW1lc1tpXTtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHBhcmVudCwgcHJvcGVydHlOYW1lKTtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGRbcHJvcGVydHlOYW1lXSA9IF9jbG9uZShwYXJlbnRbcHJvcGVydHlOYW1lXSwgZGVwdGggLSAxKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNoaWxkLCBwcm9wZXJ0eU5hbWUsIHtcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cblxuICByZXR1cm4gX2Nsb25lKHBhcmVudCwgZGVwdGgpO1xufVxuXG4vKipcbiAqIFNpbXBsZSBmbGF0IGNsb25lIHVzaW5nIHByb3RvdHlwZSwgYWNjZXB0cyBvbmx5IG9iamVjdHMsIHVzZWZ1bGwgZm9yIHByb3BlcnR5XG4gKiBvdmVycmlkZSBvbiBGTEFUIGNvbmZpZ3VyYXRpb24gb2JqZWN0IChubyBuZXN0ZWQgcHJvcHMpLlxuICpcbiAqIFVTRSBXSVRIIENBVVRJT04hIFRoaXMgbWF5IG5vdCBiZWhhdmUgYXMgeW91IHdpc2ggaWYgeW91IGRvIG5vdCBrbm93IGhvdyB0aGlzXG4gKiB3b3Jrcy5cbiAqL1xuY2xvbmUuY2xvbmVQcm90b3R5cGUgPSBmdW5jdGlvbiBjbG9uZVByb3RvdHlwZShwYXJlbnQpIHtcbiAgaWYgKHBhcmVudCA9PT0gbnVsbClcbiAgICByZXR1cm4gbnVsbDtcblxuICB2YXIgYyA9IGZ1bmN0aW9uICgpIHt9O1xuICBjLnByb3RvdHlwZSA9IHBhcmVudDtcbiAgcmV0dXJuIG5ldyBjKCk7XG59O1xuXG4vLyBwcml2YXRlIHV0aWxpdHkgZnVuY3Rpb25zXG5cbmZ1bmN0aW9uIF9fb2JqVG9TdHIobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xufVxuY2xvbmUuX19vYmpUb1N0ciA9IF9fb2JqVG9TdHI7XG5cbmZ1bmN0aW9uIF9faXNEYXRlKG8pIHtcbiAgcmV0dXJuIHR5cGVvZiBvID09PSAnb2JqZWN0JyAmJiBfX29ialRvU3RyKG8pID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5jbG9uZS5fX2lzRGF0ZSA9IF9faXNEYXRlO1xuXG5mdW5jdGlvbiBfX2lzQXJyYXkobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09ICdvYmplY3QnICYmIF9fb2JqVG9TdHIobykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59XG5jbG9uZS5fX2lzQXJyYXkgPSBfX2lzQXJyYXk7XG5cbmZ1bmN0aW9uIF9faXNSZWdFeHAobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09ICdvYmplY3QnICYmIF9fb2JqVG9TdHIobykgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuY2xvbmUuX19pc1JlZ0V4cCA9IF9faXNSZWdFeHA7XG5cbmZ1bmN0aW9uIF9fZ2V0UmVnRXhwRmxhZ3MocmUpIHtcbiAgdmFyIGZsYWdzID0gJyc7XG4gIGlmIChyZS5nbG9iYWwpIGZsYWdzICs9ICdnJztcbiAgaWYgKHJlLmlnbm9yZUNhc2UpIGZsYWdzICs9ICdpJztcbiAgaWYgKHJlLm11bHRpbGluZSkgZmxhZ3MgKz0gJ20nO1xuICByZXR1cm4gZmxhZ3M7XG59XG5jbG9uZS5fX2dldFJlZ0V4cEZsYWdzID0gX19nZXRSZWdFeHBGbGFncztcblxucmV0dXJuIGNsb25lO1xufSkoKTtcblxuaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gY2xvbmU7XG59XG4iLCJpZiAoXCJwcm9kdWN0aW9uXCIgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vdnVlLmNvbW1vbi5wcm9kLmpzJylcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi92dWUuY29tbW9uLmRldi5qcycpXG59XG4iLCIvKiFcbiAqIFZ1ZS5qcyB2Mi42LjEwXG4gKiAoYykgMjAxNC0yMDE5IEV2YW4gWW91XG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cblwidXNlIHN0cmljdFwiO3ZhciBlPU9iamVjdC5mcmVlemUoe30pO2Z1bmN0aW9uIHQoZSl7cmV0dXJuIG51bGw9PWV9ZnVuY3Rpb24gbihlKXtyZXR1cm4gbnVsbCE9ZX1mdW5jdGlvbiByKGUpe3JldHVybiEwPT09ZX1mdW5jdGlvbiBpKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlfHxcIm51bWJlclwiPT10eXBlb2YgZXx8XCJzeW1ib2xcIj09dHlwZW9mIGV8fFwiYm9vbGVhblwiPT10eXBlb2YgZX1mdW5jdGlvbiBvKGUpe3JldHVybiBudWxsIT09ZSYmXCJvYmplY3RcIj09dHlwZW9mIGV9dmFyIGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBzKGUpe3JldHVyblwiW29iamVjdCBPYmplY3RdXCI9PT1hLmNhbGwoZSl9ZnVuY3Rpb24gYyhlKXt2YXIgdD1wYXJzZUZsb2F0KFN0cmluZyhlKSk7cmV0dXJuIHQ+PTAmJk1hdGguZmxvb3IodCk9PT10JiZpc0Zpbml0ZShlKX1mdW5jdGlvbiB1KGUpe3JldHVybiBuKGUpJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnRoZW4mJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuY2F0Y2h9ZnVuY3Rpb24gbChlKXtyZXR1cm4gbnVsbD09ZT9cIlwiOkFycmF5LmlzQXJyYXkoZSl8fHMoZSkmJmUudG9TdHJpbmc9PT1hP0pTT04uc3RyaW5naWZ5KGUsbnVsbCwyKTpTdHJpbmcoZSl9ZnVuY3Rpb24gZihlKXt2YXIgdD1wYXJzZUZsb2F0KGUpO3JldHVybiBpc05hTih0KT9lOnR9ZnVuY3Rpb24gcChlLHQpe2Zvcih2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLHI9ZS5zcGxpdChcIixcIiksaT0wO2k8ci5sZW5ndGg7aSsrKW5bcltpXV09ITA7cmV0dXJuIHQ/ZnVuY3Rpb24oZSl7cmV0dXJuIG5bZS50b0xvd2VyQ2FzZSgpXX06ZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV19fXZhciBkPXAoXCJzbG90LGNvbXBvbmVudFwiLCEwKSx2PXAoXCJrZXkscmVmLHNsb3Qsc2xvdC1zY29wZSxpc1wiKTtmdW5jdGlvbiBoKGUsdCl7aWYoZS5sZW5ndGgpe3ZhciBuPWUuaW5kZXhPZih0KTtpZihuPi0xKXJldHVybiBlLnNwbGljZShuLDEpfX12YXIgbT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHkoZSx0KXtyZXR1cm4gbS5jYWxsKGUsdCl9ZnVuY3Rpb24gZyhlKXt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdFtuXXx8KHRbbl09ZShuKSl9fXZhciBfPS8tKFxcdykvZyxiPWcoZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZShfLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/dC50b1VwcGVyQ2FzZSgpOlwiXCJ9KX0pLCQ9ZyhmdW5jdGlvbihlKXtyZXR1cm4gZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnNsaWNlKDEpfSksdz0vXFxCKFtBLVpdKS9nLEM9ZyhmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKHcsXCItJDFcIikudG9Mb3dlckNhc2UoKX0pO3ZhciB4PUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIGUuYmluZCh0KX06ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKG4pe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg7cmV0dXJuIHI/cj4xP2UuYXBwbHkodCxhcmd1bWVudHMpOmUuY2FsbCh0LG4pOmUuY2FsbCh0KX1yZXR1cm4gbi5fbGVuZ3RoPWUubGVuZ3RoLG59O2Z1bmN0aW9uIGsoZSx0KXt0PXR8fDA7Zm9yKHZhciBuPWUubGVuZ3RoLXQscj1uZXcgQXJyYXkobik7bi0tOylyW25dPWVbbit0XTtyZXR1cm4gcn1mdW5jdGlvbiBBKGUsdCl7Zm9yKHZhciBuIGluIHQpZVtuXT10W25dO3JldHVybiBlfWZ1bmN0aW9uIE8oZSl7Zm9yKHZhciB0PXt9LG49MDtuPGUubGVuZ3RoO24rKyllW25dJiZBKHQsZVtuXSk7cmV0dXJuIHR9ZnVuY3Rpb24gUyhlLHQsbil7fXZhciBUPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hMX0sRT1mdW5jdGlvbihlKXtyZXR1cm4gZX07ZnVuY3Rpb24gTihlLHQpe2lmKGU9PT10KXJldHVybiEwO3ZhciBuPW8oZSkscj1vKHQpO2lmKCFufHwhcilyZXR1cm4hbiYmIXImJlN0cmluZyhlKT09PVN0cmluZyh0KTt0cnl7dmFyIGk9QXJyYXkuaXNBcnJheShlKSxhPUFycmF5LmlzQXJyYXkodCk7aWYoaSYmYSlyZXR1cm4gZS5sZW5ndGg9PT10Lmxlbmd0aCYmZS5ldmVyeShmdW5jdGlvbihlLG4pe3JldHVybiBOKGUsdFtuXSl9KTtpZihlIGluc3RhbmNlb2YgRGF0ZSYmdCBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIGUuZ2V0VGltZSgpPT09dC5nZXRUaW1lKCk7aWYoaXx8YSlyZXR1cm4hMTt2YXIgcz1PYmplY3Qua2V5cyhlKSxjPU9iamVjdC5rZXlzKHQpO3JldHVybiBzLmxlbmd0aD09PWMubGVuZ3RoJiZzLmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiBOKGVbbl0sdFtuXSl9KX1jYXRjaChlKXtyZXR1cm4hMX19ZnVuY3Rpb24gaihlLHQpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKE4oZVtuXSx0KSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBEKGUpe3ZhciB0PSExO3JldHVybiBmdW5jdGlvbigpe3R8fCh0PSEwLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19dmFyIEw9XCJkYXRhLXNlcnZlci1yZW5kZXJlZFwiLE09W1wiY29tcG9uZW50XCIsXCJkaXJlY3RpdmVcIixcImZpbHRlclwiXSxJPVtcImJlZm9yZUNyZWF0ZVwiLFwiY3JlYXRlZFwiLFwiYmVmb3JlTW91bnRcIixcIm1vdW50ZWRcIixcImJlZm9yZVVwZGF0ZVwiLFwidXBkYXRlZFwiLFwiYmVmb3JlRGVzdHJveVwiLFwiZGVzdHJveWVkXCIsXCJhY3RpdmF0ZWRcIixcImRlYWN0aXZhdGVkXCIsXCJlcnJvckNhcHR1cmVkXCIsXCJzZXJ2ZXJQcmVmZXRjaFwiXSxGPXtvcHRpb25NZXJnZVN0cmF0ZWdpZXM6T2JqZWN0LmNyZWF0ZShudWxsKSxzaWxlbnQ6ITEscHJvZHVjdGlvblRpcDohMSxkZXZ0b29sczohMSxwZXJmb3JtYW5jZTohMSxlcnJvckhhbmRsZXI6bnVsbCx3YXJuSGFuZGxlcjpudWxsLGlnbm9yZWRFbGVtZW50czpbXSxrZXlDb2RlczpPYmplY3QuY3JlYXRlKG51bGwpLGlzUmVzZXJ2ZWRUYWc6VCxpc1Jlc2VydmVkQXR0cjpULGlzVW5rbm93bkVsZW1lbnQ6VCxnZXRUYWdOYW1lc3BhY2U6UyxwYXJzZVBsYXRmb3JtVGFnTmFtZTpFLG11c3RVc2VQcm9wOlQsYXN5bmM6ITAsX2xpZmVjeWNsZUhvb2tzOkl9LFA9L2EtekEtWlxcdTAwQjdcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDNGLVxcdTIwNDBcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkQvO2Z1bmN0aW9uIFIoZSx0LG4scil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEhcix3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KX12YXIgSD1uZXcgUmVnRXhwKFwiW15cIitQLnNvdXJjZStcIi4kX1xcXFxkXVwiKTt2YXIgQixVPVwiX19wcm90b19fXCJpbnt9LHo9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyxWPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBXWEVudmlyb25tZW50JiYhIVdYRW52aXJvbm1lbnQucGxhdGZvcm0sSz1WJiZXWEVudmlyb25tZW50LnBsYXRmb3JtLnRvTG93ZXJDYXNlKCksSj16JiZ3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLHE9SiYmL21zaWV8dHJpZGVudC8udGVzdChKKSxXPUomJkouaW5kZXhPZihcIm1zaWUgOS4wXCIpPjAsWj1KJiZKLmluZGV4T2YoXCJlZGdlL1wiKT4wLEc9KEomJkouaW5kZXhPZihcImFuZHJvaWRcIiksSiYmL2lwaG9uZXxpcGFkfGlwb2R8aW9zLy50ZXN0KEopfHxcImlvc1wiPT09SyksWD0oSiYmL2Nocm9tZVxcL1xcZCsvLnRlc3QoSiksSiYmL3BoYW50b21qcy8udGVzdChKKSxKJiZKLm1hdGNoKC9maXJlZm94XFwvKFxcZCspLykpLFk9e30ud2F0Y2gsUT0hMTtpZih6KXRyeXt2YXIgZWU9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KGVlLFwicGFzc2l2ZVwiLHtnZXQ6ZnVuY3Rpb24oKXtRPSEwfX0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidGVzdC1wYXNzaXZlXCIsbnVsbCxlZSl9Y2F0Y2goZSl7fXZhciB0ZT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT1CJiYoQj0heiYmIVYmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWwmJihnbG9iYWwucHJvY2VzcyYmXCJzZXJ2ZXJcIj09PWdsb2JhbC5wcm9jZXNzLmVudi5WVUVfRU5WKSksQn0sbmU9eiYmd2luZG93Ll9fVlVFX0RFVlRPT0xTX0dMT0JBTF9IT09LX187ZnVuY3Rpb24gcmUoZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmL25hdGl2ZSBjb2RlLy50ZXN0KGUudG9TdHJpbmcoKSl9dmFyIGllLG9lPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJnJlKFN5bWJvbCkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBSZWZsZWN0JiZyZShSZWZsZWN0Lm93bktleXMpO2llPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTZXQmJnJlKFNldCk/U2V0OmZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuc2V0PU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4hMD09PXRoaXMuc2V0W2VdfSxlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dGhpcy5zZXRbZV09ITB9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zZXQ9T2JqZWN0LmNyZWF0ZShudWxsKX0sZX0oKTt2YXIgYWU9UyxzZT0wLGNlPWZ1bmN0aW9uKCl7dGhpcy5pZD1zZSsrLHRoaXMuc3Vicz1bXX07Y2UucHJvdG90eXBlLmFkZFN1Yj1mdW5jdGlvbihlKXt0aGlzLnN1YnMucHVzaChlKX0sY2UucHJvdG90eXBlLnJlbW92ZVN1Yj1mdW5jdGlvbihlKXtoKHRoaXMuc3VicyxlKX0sY2UucHJvdG90eXBlLmRlcGVuZD1mdW5jdGlvbigpe2NlLnRhcmdldCYmY2UudGFyZ2V0LmFkZERlcCh0aGlzKX0sY2UucHJvdG90eXBlLm5vdGlmeT1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnN1YnMuc2xpY2UoKSx0PTAsbj1lLmxlbmd0aDt0PG47dCsrKWVbdF0udXBkYXRlKCl9LGNlLnRhcmdldD1udWxsO3ZhciB1ZT1bXTtmdW5jdGlvbiBsZShlKXt1ZS5wdXNoKGUpLGNlLnRhcmdldD1lfWZ1bmN0aW9uIGZlKCl7dWUucG9wKCksY2UudGFyZ2V0PXVlW3VlLmxlbmd0aC0xXX12YXIgcGU9ZnVuY3Rpb24oZSx0LG4scixpLG8sYSxzKXt0aGlzLnRhZz1lLHRoaXMuZGF0YT10LHRoaXMuY2hpbGRyZW49bix0aGlzLnRleHQ9cix0aGlzLmVsbT1pLHRoaXMubnM9dm9pZCAwLHRoaXMuY29udGV4dD1vLHRoaXMuZm5Db250ZXh0PXZvaWQgMCx0aGlzLmZuT3B0aW9ucz12b2lkIDAsdGhpcy5mblNjb3BlSWQ9dm9pZCAwLHRoaXMua2V5PXQmJnQua2V5LHRoaXMuY29tcG9uZW50T3B0aW9ucz1hLHRoaXMuY29tcG9uZW50SW5zdGFuY2U9dm9pZCAwLHRoaXMucGFyZW50PXZvaWQgMCx0aGlzLnJhdz0hMSx0aGlzLmlzU3RhdGljPSExLHRoaXMuaXNSb290SW5zZXJ0PSEwLHRoaXMuaXNDb21tZW50PSExLHRoaXMuaXNDbG9uZWQ9ITEsdGhpcy5pc09uY2U9ITEsdGhpcy5hc3luY0ZhY3Rvcnk9cyx0aGlzLmFzeW5jTWV0YT12b2lkIDAsdGhpcy5pc0FzeW5jUGxhY2Vob2xkZXI9ITF9LGRlPXtjaGlsZDp7Y29uZmlndXJhYmxlOiEwfX07ZGUuY2hpbGQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29tcG9uZW50SW5zdGFuY2V9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHBlLnByb3RvdHlwZSxkZSk7dmFyIHZlPWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPVwiXCIpO3ZhciB0PW5ldyBwZTtyZXR1cm4gdC50ZXh0PWUsdC5pc0NvbW1lbnQ9ITAsdH07ZnVuY3Rpb24gaGUoZSl7cmV0dXJuIG5ldyBwZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxTdHJpbmcoZSkpfWZ1bmN0aW9uIG1lKGUpe3ZhciB0PW5ldyBwZShlLnRhZyxlLmRhdGEsZS5jaGlsZHJlbiYmZS5jaGlsZHJlbi5zbGljZSgpLGUudGV4dCxlLmVsbSxlLmNvbnRleHQsZS5jb21wb25lbnRPcHRpb25zLGUuYXN5bmNGYWN0b3J5KTtyZXR1cm4gdC5ucz1lLm5zLHQuaXNTdGF0aWM9ZS5pc1N0YXRpYyx0LmtleT1lLmtleSx0LmlzQ29tbWVudD1lLmlzQ29tbWVudCx0LmZuQ29udGV4dD1lLmZuQ29udGV4dCx0LmZuT3B0aW9ucz1lLmZuT3B0aW9ucyx0LmZuU2NvcGVJZD1lLmZuU2NvcGVJZCx0LmFzeW5jTWV0YT1lLmFzeW5jTWV0YSx0LmlzQ2xvbmVkPSEwLHR9dmFyIHllPUFycmF5LnByb3RvdHlwZSxnZT1PYmplY3QuY3JlYXRlKHllKTtbXCJwdXNoXCIsXCJwb3BcIixcInNoaWZ0XCIsXCJ1bnNoaWZ0XCIsXCJzcGxpY2VcIixcInNvcnRcIixcInJldmVyc2VcIl0uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD15ZVtlXTtSKGdlLGUsZnVuY3Rpb24oKXtmb3IodmFyIG49W10scj1hcmd1bWVudHMubGVuZ3RoO3ItLTspbltyXT1hcmd1bWVudHNbcl07dmFyIGksbz10LmFwcGx5KHRoaXMsbiksYT10aGlzLl9fb2JfXztzd2l0Y2goZSl7Y2FzZVwicHVzaFwiOmNhc2VcInVuc2hpZnRcIjppPW47YnJlYWs7Y2FzZVwic3BsaWNlXCI6aT1uLnNsaWNlKDIpfXJldHVybiBpJiZhLm9ic2VydmVBcnJheShpKSxhLmRlcC5ub3RpZnkoKSxvfSl9KTt2YXIgX2U9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZ2UpLGJlPSEwO2Z1bmN0aW9uICRlKGUpe2JlPWV9dmFyIHdlPWZ1bmN0aW9uKGUpe3ZhciB0O3RoaXMudmFsdWU9ZSx0aGlzLmRlcD1uZXcgY2UsdGhpcy52bUNvdW50PTAsUihlLFwiX19vYl9fXCIsdGhpcyksQXJyYXkuaXNBcnJheShlKT8oVT8odD1nZSxlLl9fcHJvdG9fXz10KTpmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPTAsaT1uLmxlbmd0aDtyPGk7cisrKXt2YXIgbz1uW3JdO1IoZSxvLHRbb10pfX0oZSxnZSxfZSksdGhpcy5vYnNlcnZlQXJyYXkoZSkpOnRoaXMud2FsayhlKX07ZnVuY3Rpb24gQ2UoZSx0KXt2YXIgbjtpZihvKGUpJiYhKGUgaW5zdGFuY2VvZiBwZSkpcmV0dXJuIHkoZSxcIl9fb2JfX1wiKSYmZS5fX29iX18gaW5zdGFuY2VvZiB3ZT9uPWUuX19vYl9fOmJlJiYhdGUoKSYmKEFycmF5LmlzQXJyYXkoZSl8fHMoZSkpJiZPYmplY3QuaXNFeHRlbnNpYmxlKGUpJiYhZS5faXNWdWUmJihuPW5ldyB3ZShlKSksdCYmbiYmbi52bUNvdW50Kyssbn1mdW5jdGlvbiB4ZShlLHQsbixyLGkpe3ZhciBvPW5ldyBjZSxhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KTtpZighYXx8ITEhPT1hLmNvbmZpZ3VyYWJsZSl7dmFyIHM9YSYmYS5nZXQsYz1hJiZhLnNldDtzJiYhY3x8MiE9PWFyZ3VtZW50cy5sZW5ndGh8fChuPWVbdF0pO3ZhciB1PSFpJiZDZShuKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgdD1zP3MuY2FsbChlKTpuO3JldHVybiBjZS50YXJnZXQmJihvLmRlcGVuZCgpLHUmJih1LmRlcC5kZXBlbmQoKSxBcnJheS5pc0FycmF5KHQpJiZmdW5jdGlvbiBlKHQpe2Zvcih2YXIgbj12b2lkIDAscj0wLGk9dC5sZW5ndGg7cjxpO3IrKykobj10W3JdKSYmbi5fX29iX18mJm4uX19vYl9fLmRlcC5kZXBlbmQoKSxBcnJheS5pc0FycmF5KG4pJiZlKG4pfSh0KSkpLHR9LHNldDpmdW5jdGlvbih0KXt2YXIgcj1zP3MuY2FsbChlKTpuO3Q9PT1yfHx0IT10JiZyIT1yfHxzJiYhY3x8KGM/Yy5jYWxsKGUsdCk6bj10LHU9IWkmJkNlKHQpLG8ubm90aWZ5KCkpfX0pfX1mdW5jdGlvbiBrZShlLHQsbil7aWYoQXJyYXkuaXNBcnJheShlKSYmYyh0KSlyZXR1cm4gZS5sZW5ndGg9TWF0aC5tYXgoZS5sZW5ndGgsdCksZS5zcGxpY2UodCwxLG4pLG47aWYodCBpbiBlJiYhKHQgaW4gT2JqZWN0LnByb3RvdHlwZSkpcmV0dXJuIGVbdF09bixuO3ZhciByPWUuX19vYl9fO3JldHVybiBlLl9pc1Z1ZXx8ciYmci52bUNvdW50P246cj8oeGUoci52YWx1ZSx0LG4pLHIuZGVwLm5vdGlmeSgpLG4pOihlW3RdPW4sbil9ZnVuY3Rpb24gQWUoZSx0KXtpZihBcnJheS5pc0FycmF5KGUpJiZjKHQpKWUuc3BsaWNlKHQsMSk7ZWxzZXt2YXIgbj1lLl9fb2JfXztlLl9pc1Z1ZXx8biYmbi52bUNvdW50fHx5KGUsdCkmJihkZWxldGUgZVt0XSxuJiZuLmRlcC5ub3RpZnkoKSl9fXdlLnByb3RvdHlwZS53YWxrPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1PYmplY3Qua2V5cyhlKSxuPTA7bjx0Lmxlbmd0aDtuKyspeGUoZSx0W25dKX0sd2UucHJvdG90eXBlLm9ic2VydmVBcnJheT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxuPWUubGVuZ3RoO3Q8bjt0KyspQ2UoZVt0XSl9O3ZhciBPZT1GLm9wdGlvbk1lcmdlU3RyYXRlZ2llcztmdW5jdGlvbiBTZShlLHQpe2lmKCF0KXJldHVybiBlO2Zvcih2YXIgbixyLGksbz1vZT9SZWZsZWN0Lm93bktleXModCk6T2JqZWN0LmtleXModCksYT0wO2E8by5sZW5ndGg7YSsrKVwiX19vYl9fXCIhPT0obj1vW2FdKSYmKHI9ZVtuXSxpPXRbbl0seShlLG4pP3IhPT1pJiZzKHIpJiZzKGkpJiZTZShyLGkpOmtlKGUsbixpKSk7cmV0dXJuIGV9ZnVuY3Rpb24gVGUoZSx0LG4pe3JldHVybiBuP2Z1bmN0aW9uKCl7dmFyIHI9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90LmNhbGwobixuKTp0LGk9XCJmdW5jdGlvblwiPT10eXBlb2YgZT9lLmNhbGwobixuKTplO3JldHVybiByP1NlKHIsaSk6aX06dD9lP2Z1bmN0aW9uKCl7cmV0dXJuIFNlKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dC5jYWxsKHRoaXMsdGhpcyk6dCxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2UuY2FsbCh0aGlzLHRoaXMpOmUpfTp0OmV9ZnVuY3Rpb24gRWUoZSx0KXt2YXIgbj10P2U/ZS5jb25jYXQodCk6QXJyYXkuaXNBcnJheSh0KT90Olt0XTplO3JldHVybiBuP2Z1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTA7bjxlLmxlbmd0aDtuKyspLTE9PT10LmluZGV4T2YoZVtuXSkmJnQucHVzaChlW25dKTtyZXR1cm4gdH0obik6bn1mdW5jdGlvbiBOZShlLHQsbixyKXt2YXIgaT1PYmplY3QuY3JlYXRlKGV8fG51bGwpO3JldHVybiB0P0EoaSx0KTppfU9lLmRhdGE9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuP1RlKGUsdCxuKTp0JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0P2U6VGUoZSx0KX0sSS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09lW2VdPUVlfSksTS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09lW2UrXCJzXCJdPU5lfSksT2Uud2F0Y2g9ZnVuY3Rpb24oZSx0LG4scil7aWYoZT09PVkmJihlPXZvaWQgMCksdD09PVkmJih0PXZvaWQgMCksIXQpcmV0dXJuIE9iamVjdC5jcmVhdGUoZXx8bnVsbCk7aWYoIWUpcmV0dXJuIHQ7dmFyIGk9e307Zm9yKHZhciBvIGluIEEoaSxlKSx0KXt2YXIgYT1pW29dLHM9dFtvXTthJiYhQXJyYXkuaXNBcnJheShhKSYmKGE9W2FdKSxpW29dPWE/YS5jb25jYXQocyk6QXJyYXkuaXNBcnJheShzKT9zOltzXX1yZXR1cm4gaX0sT2UucHJvcHM9T2UubWV0aG9kcz1PZS5pbmplY3Q9T2UuY29tcHV0ZWQ9ZnVuY3Rpb24oZSx0LG4scil7aWYoIWUpcmV0dXJuIHQ7dmFyIGk9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gQShpLGUpLHQmJkEoaSx0KSxpfSxPZS5wcm92aWRlPVRlO3ZhciBqZT1mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10P2U6dH07ZnVuY3Rpb24gRGUoZSx0LG4pe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJih0PXQub3B0aW9ucyksZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnByb3BzO2lmKG4pe3ZhciByLGksbz17fTtpZihBcnJheS5pc0FycmF5KG4pKWZvcihyPW4ubGVuZ3RoO3ItLTspXCJzdHJpbmdcIj09dHlwZW9mKGk9bltyXSkmJihvW2IoaSldPXt0eXBlOm51bGx9KTtlbHNlIGlmKHMobikpZm9yKHZhciBhIGluIG4paT1uW2FdLG9bYihhKV09cyhpKT9pOnt0eXBlOml9O2UucHJvcHM9b319KHQpLGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5pbmplY3Q7aWYobil7dmFyIHI9ZS5pbmplY3Q9e307aWYoQXJyYXkuaXNBcnJheShuKSlmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKylyW25baV1dPXtmcm9tOm5baV19O2Vsc2UgaWYocyhuKSlmb3IodmFyIG8gaW4gbil7dmFyIGE9bltvXTtyW29dPXMoYSk/QSh7ZnJvbTpvfSxhKTp7ZnJvbTphfX19fSh0KSxmdW5jdGlvbihlKXt2YXIgdD1lLmRpcmVjdGl2ZXM7aWYodClmb3IodmFyIG4gaW4gdCl7dmFyIHI9dFtuXTtcImZ1bmN0aW9uXCI9PXR5cGVvZiByJiYodFtuXT17YmluZDpyLHVwZGF0ZTpyfSl9fSh0KSwhdC5fYmFzZSYmKHQuZXh0ZW5kcyYmKGU9RGUoZSx0LmV4dGVuZHMsbikpLHQubWl4aW5zKSlmb3IodmFyIHI9MCxpPXQubWl4aW5zLmxlbmd0aDtyPGk7cisrKWU9RGUoZSx0Lm1peGluc1tyXSxuKTt2YXIgbyxhPXt9O2ZvcihvIGluIGUpYyhvKTtmb3IobyBpbiB0KXkoZSxvKXx8YyhvKTtmdW5jdGlvbiBjKHIpe3ZhciBpPU9lW3JdfHxqZTthW3JdPWkoZVtyXSx0W3JdLG4scil9cmV0dXJuIGF9ZnVuY3Rpb24gTGUoZSx0LG4scil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4pe3ZhciBpPWVbdF07aWYoeShpLG4pKXJldHVybiBpW25dO3ZhciBvPWIobik7aWYoeShpLG8pKXJldHVybiBpW29dO3ZhciBhPSQobyk7cmV0dXJuIHkoaSxhKT9pW2FdOmlbbl18fGlbb118fGlbYV19fWZ1bmN0aW9uIE1lKGUsdCxuLHIpe3ZhciBpPXRbZV0sbz0heShuLGUpLGE9bltlXSxzPVBlKEJvb2xlYW4saS50eXBlKTtpZihzPi0xKWlmKG8mJiF5KGksXCJkZWZhdWx0XCIpKWE9ITE7ZWxzZSBpZihcIlwiPT09YXx8YT09PUMoZSkpe3ZhciBjPVBlKFN0cmluZyxpLnR5cGUpOyhjPDB8fHM8YykmJihhPSEwKX1pZih2b2lkIDA9PT1hKXthPWZ1bmN0aW9uKGUsdCxuKXtpZigheSh0LFwiZGVmYXVsdFwiKSlyZXR1cm47dmFyIHI9dC5kZWZhdWx0O2lmKGUmJmUuJG9wdGlvbnMucHJvcHNEYXRhJiZ2b2lkIDA9PT1lLiRvcHRpb25zLnByb3BzRGF0YVtuXSYmdm9pZCAwIT09ZS5fcHJvcHNbbl0pcmV0dXJuIGUuX3Byb3BzW25dO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHImJlwiRnVuY3Rpb25cIiE9PUllKHQudHlwZSk/ci5jYWxsKGUpOnJ9KHIsaSxlKTt2YXIgdT1iZTskZSghMCksQ2UoYSksJGUodSl9cmV0dXJuIGF9ZnVuY3Rpb24gSWUoZSl7dmFyIHQ9ZSYmZS50b1N0cmluZygpLm1hdGNoKC9eXFxzKmZ1bmN0aW9uIChcXHcrKS8pO3JldHVybiB0P3RbMV06XCJcIn1mdW5jdGlvbiBGZShlLHQpe3JldHVybiBJZShlKT09PUllKHQpfWZ1bmN0aW9uIFBlKGUsdCl7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuIEZlKHQsZSk/MDotMTtmb3IodmFyIG49MCxyPXQubGVuZ3RoO248cjtuKyspaWYoRmUodFtuXSxlKSlyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBSZShlLHQsbil7bGUoKTt0cnl7aWYodClmb3IodmFyIHI9dDtyPXIuJHBhcmVudDspe3ZhciBpPXIuJG9wdGlvbnMuZXJyb3JDYXB0dXJlZDtpZihpKWZvcih2YXIgbz0wO288aS5sZW5ndGg7bysrKXRyeXtpZighMT09PWlbb10uY2FsbChyLGUsdCxuKSlyZXR1cm59Y2F0Y2goZSl7QmUoZSxyLFwiZXJyb3JDYXB0dXJlZCBob29rXCIpfX1CZShlLHQsbil9ZmluYWxseXtmZSgpfX1mdW5jdGlvbiBIZShlLHQsbixyLGkpe3ZhciBvO3RyeXsobz1uP2UuYXBwbHkodCxuKTplLmNhbGwodCkpJiYhby5faXNWdWUmJnUobykmJiFvLl9oYW5kbGVkJiYoby5jYXRjaChmdW5jdGlvbihlKXtyZXR1cm4gUmUoZSxyLGkrXCIgKFByb21pc2UvYXN5bmMpXCIpfSksby5faGFuZGxlZD0hMCl9Y2F0Y2goZSl7UmUoZSxyLGkpfXJldHVybiBvfWZ1bmN0aW9uIEJlKGUsdCxuKXtpZihGLmVycm9ySGFuZGxlcil0cnl7cmV0dXJuIEYuZXJyb3JIYW5kbGVyLmNhbGwobnVsbCxlLHQsbil9Y2F0Y2godCl7dCE9PWUmJlVlKHQsbnVsbCxcImNvbmZpZy5lcnJvckhhbmRsZXJcIil9VWUoZSx0LG4pfWZ1bmN0aW9uIFVlKGUsdCxuKXtpZigheiYmIVZ8fFwidW5kZWZpbmVkXCI9PXR5cGVvZiBjb25zb2xlKXRocm93IGU7Y29uc29sZS5lcnJvcihlKX12YXIgemUsVmU9ITEsS2U9W10sSmU9ITE7ZnVuY3Rpb24gcWUoKXtKZT0hMTt2YXIgZT1LZS5zbGljZSgwKTtLZS5sZW5ndGg9MDtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdKCl9aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFByb21pc2UmJnJlKFByb21pc2UpKXt2YXIgV2U9UHJvbWlzZS5yZXNvbHZlKCk7emU9ZnVuY3Rpb24oKXtXZS50aGVuKHFlKSxHJiZzZXRUaW1lb3V0KFMpfSxWZT0hMH1lbHNlIGlmKHF8fFwidW5kZWZpbmVkXCI9PXR5cGVvZiBNdXRhdGlvbk9ic2VydmVyfHwhcmUoTXV0YXRpb25PYnNlcnZlcikmJlwiW29iamVjdCBNdXRhdGlvbk9ic2VydmVyQ29uc3RydWN0b3JdXCIhPT1NdXRhdGlvbk9ic2VydmVyLnRvU3RyaW5nKCkpemU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNldEltbWVkaWF0ZSYmcmUoc2V0SW1tZWRpYXRlKT9mdW5jdGlvbigpe3NldEltbWVkaWF0ZShxZSl9OmZ1bmN0aW9uKCl7c2V0VGltZW91dChxZSwwKX07ZWxzZXt2YXIgWmU9MSxHZT1uZXcgTXV0YXRpb25PYnNlcnZlcihxZSksWGU9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoU3RyaW5nKFplKSk7R2Uub2JzZXJ2ZShYZSx7Y2hhcmFjdGVyRGF0YTohMH0pLHplPWZ1bmN0aW9uKCl7WmU9KFplKzEpJTIsWGUuZGF0YT1TdHJpbmcoWmUpfSxWZT0hMH1mdW5jdGlvbiBZZShlLHQpe3ZhciBuO2lmKEtlLnB1c2goZnVuY3Rpb24oKXtpZihlKXRyeXtlLmNhbGwodCl9Y2F0Y2goZSl7UmUoZSx0LFwibmV4dFRpY2tcIil9ZWxzZSBuJiZuKHQpfSksSmV8fChKZT0hMCx6ZSgpKSwhZSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFByb21pc2UpcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe249ZX0pfXZhciBRZT1uZXcgaWU7ZnVuY3Rpb24gZXQoZSl7IWZ1bmN0aW9uIGUodCxuKXt2YXIgcixpO3ZhciBhPUFycmF5LmlzQXJyYXkodCk7aWYoIWEmJiFvKHQpfHxPYmplY3QuaXNGcm96ZW4odCl8fHQgaW5zdGFuY2VvZiBwZSlyZXR1cm47aWYodC5fX29iX18pe3ZhciBzPXQuX19vYl9fLmRlcC5pZDtpZihuLmhhcyhzKSlyZXR1cm47bi5hZGQocyl9aWYoYSlmb3Iocj10Lmxlbmd0aDtyLS07KWUodFtyXSxuKTtlbHNlIGZvcihpPU9iamVjdC5rZXlzKHQpLHI9aS5sZW5ndGg7ci0tOyllKHRbaVtyXV0sbil9KGUsUWUpLFFlLmNsZWFyKCl9dmFyIHR0PWcoZnVuY3Rpb24oZSl7dmFyIHQ9XCImXCI9PT1lLmNoYXJBdCgwKSxuPVwiflwiPT09KGU9dD9lLnNsaWNlKDEpOmUpLmNoYXJBdCgwKSxyPVwiIVwiPT09KGU9bj9lLnNsaWNlKDEpOmUpLmNoYXJBdCgwKTtyZXR1cm57bmFtZTplPXI/ZS5zbGljZSgxKTplLG9uY2U6bixjYXB0dXJlOnIscGFzc2l2ZTp0fX0pO2Z1bmN0aW9uIG50KGUsdCl7ZnVuY3Rpb24gbigpe3ZhciBlPWFyZ3VtZW50cyxyPW4uZm5zO2lmKCFBcnJheS5pc0FycmF5KHIpKXJldHVybiBIZShyLG51bGwsYXJndW1lbnRzLHQsXCJ2LW9uIGhhbmRsZXJcIik7Zm9yKHZhciBpPXIuc2xpY2UoKSxvPTA7bzxpLmxlbmd0aDtvKyspSGUoaVtvXSxudWxsLGUsdCxcInYtb24gaGFuZGxlclwiKX1yZXR1cm4gbi5mbnM9ZSxufWZ1bmN0aW9uIHJ0KGUsbixpLG8sYSxzKXt2YXIgYyx1LGwsZjtmb3IoYyBpbiBlKXU9ZVtjXSxsPW5bY10sZj10dChjKSx0KHUpfHwodChsKT8odCh1LmZucykmJih1PWVbY109bnQodSxzKSkscihmLm9uY2UpJiYodT1lW2NdPWEoZi5uYW1lLHUsZi5jYXB0dXJlKSksaShmLm5hbWUsdSxmLmNhcHR1cmUsZi5wYXNzaXZlLGYucGFyYW1zKSk6dSE9PWwmJihsLmZucz11LGVbY109bCkpO2ZvcihjIGluIG4pdChlW2NdKSYmbygoZj10dChjKSkubmFtZSxuW2NdLGYuY2FwdHVyZSl9ZnVuY3Rpb24gaXQoZSxpLG8pe3ZhciBhO2UgaW5zdGFuY2VvZiBwZSYmKGU9ZS5kYXRhLmhvb2t8fChlLmRhdGEuaG9vaz17fSkpO3ZhciBzPWVbaV07ZnVuY3Rpb24gYygpe28uYXBwbHkodGhpcyxhcmd1bWVudHMpLGgoYS5mbnMsYyl9dChzKT9hPW50KFtjXSk6bihzLmZucykmJnIocy5tZXJnZWQpPyhhPXMpLmZucy5wdXNoKGMpOmE9bnQoW3MsY10pLGEubWVyZ2VkPSEwLGVbaV09YX1mdW5jdGlvbiBvdChlLHQscixpLG8pe2lmKG4odCkpe2lmKHkodCxyKSlyZXR1cm4gZVtyXT10W3JdLG98fGRlbGV0ZSB0W3JdLCEwO2lmKHkodCxpKSlyZXR1cm4gZVtyXT10W2ldLG98fGRlbGV0ZSB0W2ldLCEwfXJldHVybiExfWZ1bmN0aW9uIGF0KGUpe3JldHVybiBpKGUpP1toZShlKV06QXJyYXkuaXNBcnJheShlKT9mdW5jdGlvbiBlKG8sYSl7dmFyIHM9W107dmFyIGMsdSxsLGY7Zm9yKGM9MDtjPG8ubGVuZ3RoO2MrKyl0KHU9b1tjXSl8fFwiYm9vbGVhblwiPT10eXBlb2YgdXx8KGw9cy5sZW5ndGgtMSxmPXNbbF0sQXJyYXkuaXNBcnJheSh1KT91Lmxlbmd0aD4wJiYoc3QoKHU9ZSh1LChhfHxcIlwiKStcIl9cIitjKSlbMF0pJiZzdChmKSYmKHNbbF09aGUoZi50ZXh0K3VbMF0udGV4dCksdS5zaGlmdCgpKSxzLnB1c2guYXBwbHkocyx1KSk6aSh1KT9zdChmKT9zW2xdPWhlKGYudGV4dCt1KTpcIlwiIT09dSYmcy5wdXNoKGhlKHUpKTpzdCh1KSYmc3QoZik/c1tsXT1oZShmLnRleHQrdS50ZXh0KToocihvLl9pc1ZMaXN0KSYmbih1LnRhZykmJnQodS5rZXkpJiZuKGEpJiYodS5rZXk9XCJfX3ZsaXN0XCIrYStcIl9cIitjK1wiX19cIikscy5wdXNoKHUpKSk7cmV0dXJuIHN9KGUpOnZvaWQgMH1mdW5jdGlvbiBzdChlKXtyZXR1cm4gbihlKSYmbihlLnRleHQpJiYhMT09PWUuaXNDb21tZW50fWZ1bmN0aW9uIGN0KGUsdCl7aWYoZSl7Zm9yKHZhciBuPU9iamVjdC5jcmVhdGUobnVsbCkscj1vZT9SZWZsZWN0Lm93bktleXMoZSk6T2JqZWN0LmtleXMoZSksaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbz1yW2ldO2lmKFwiX19vYl9fXCIhPT1vKXtmb3IodmFyIGE9ZVtvXS5mcm9tLHM9dDtzOyl7aWYocy5fcHJvdmlkZWQmJnkocy5fcHJvdmlkZWQsYSkpe25bb109cy5fcHJvdmlkZWRbYV07YnJlYWt9cz1zLiRwYXJlbnR9aWYoIXMmJlwiZGVmYXVsdFwiaW4gZVtvXSl7dmFyIGM9ZVtvXS5kZWZhdWx0O25bb109XCJmdW5jdGlvblwiPT10eXBlb2YgYz9jLmNhbGwodCk6Y319fXJldHVybiBufX1mdW5jdGlvbiB1dChlLHQpe2lmKCFlfHwhZS5sZW5ndGgpcmV0dXJue307Zm9yKHZhciBuPXt9LHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspe3ZhciBvPWVbcl0sYT1vLmRhdGE7aWYoYSYmYS5hdHRycyYmYS5hdHRycy5zbG90JiZkZWxldGUgYS5hdHRycy5zbG90LG8uY29udGV4dCE9PXQmJm8uZm5Db250ZXh0IT09dHx8IWF8fG51bGw9PWEuc2xvdCkobi5kZWZhdWx0fHwobi5kZWZhdWx0PVtdKSkucHVzaChvKTtlbHNle3ZhciBzPWEuc2xvdCxjPW5bc118fChuW3NdPVtdKTtcInRlbXBsYXRlXCI9PT1vLnRhZz9jLnB1c2guYXBwbHkoYyxvLmNoaWxkcmVufHxbXSk6Yy5wdXNoKG8pfX1mb3IodmFyIHUgaW4gbiluW3VdLmV2ZXJ5KGx0KSYmZGVsZXRlIG5bdV07cmV0dXJuIG59ZnVuY3Rpb24gbHQoZSl7cmV0dXJuIGUuaXNDb21tZW50JiYhZS5hc3luY0ZhY3Rvcnl8fFwiIFwiPT09ZS50ZXh0fWZ1bmN0aW9uIGZ0KHQsbixyKXt2YXIgaSxvPU9iamVjdC5rZXlzKG4pLmxlbmd0aD4wLGE9dD8hIXQuJHN0YWJsZTohbyxzPXQmJnQuJGtleTtpZih0KXtpZih0Ll9ub3JtYWxpemVkKXJldHVybiB0Ll9ub3JtYWxpemVkO2lmKGEmJnImJnIhPT1lJiZzPT09ci4ka2V5JiYhbyYmIXIuJGhhc05vcm1hbClyZXR1cm4gcjtmb3IodmFyIGMgaW4gaT17fSx0KXRbY10mJlwiJFwiIT09Y1swXSYmKGlbY109cHQobixjLHRbY10pKX1lbHNlIGk9e307Zm9yKHZhciB1IGluIG4pdSBpbiBpfHwoaVt1XT1kdChuLHUpKTtyZXR1cm4gdCYmT2JqZWN0LmlzRXh0ZW5zaWJsZSh0KSYmKHQuX25vcm1hbGl6ZWQ9aSksUihpLFwiJHN0YWJsZVwiLGEpLFIoaSxcIiRrZXlcIixzKSxSKGksXCIkaGFzTm9ybWFsXCIsbyksaX1mdW5jdGlvbiBwdChlLHQsbil7dmFyIHI9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoP24uYXBwbHkobnVsbCxhcmd1bWVudHMpOm4oe30pO3JldHVybihlPWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiYhQXJyYXkuaXNBcnJheShlKT9bZV06YXQoZSkpJiYoMD09PWUubGVuZ3RofHwxPT09ZS5sZW5ndGgmJmVbMF0uaXNDb21tZW50KT92b2lkIDA6ZX07cmV0dXJuIG4ucHJveHkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldDpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSkscn1mdW5jdGlvbiBkdChlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlW3RdfX1mdW5jdGlvbiB2dChlLHQpe3ZhciByLGksYSxzLGM7aWYoQXJyYXkuaXNBcnJheShlKXx8XCJzdHJpbmdcIj09dHlwZW9mIGUpZm9yKHI9bmV3IEFycmF5KGUubGVuZ3RoKSxpPTAsYT1lLmxlbmd0aDtpPGE7aSsrKXJbaV09dChlW2ldLGkpO2Vsc2UgaWYoXCJudW1iZXJcIj09dHlwZW9mIGUpZm9yKHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7aSsrKXJbaV09dChpKzEsaSk7ZWxzZSBpZihvKGUpKWlmKG9lJiZlW1N5bWJvbC5pdGVyYXRvcl0pe3I9W107Zm9yKHZhciB1PWVbU3ltYm9sLml0ZXJhdG9yXSgpLGw9dS5uZXh0KCk7IWwuZG9uZTspci5wdXNoKHQobC52YWx1ZSxyLmxlbmd0aCkpLGw9dS5uZXh0KCl9ZWxzZSBmb3Iocz1PYmplY3Qua2V5cyhlKSxyPW5ldyBBcnJheShzLmxlbmd0aCksaT0wLGE9cy5sZW5ndGg7aTxhO2krKyljPXNbaV0scltpXT10KGVbY10sYyxpKTtyZXR1cm4gbihyKXx8KHI9W10pLHIuX2lzVkxpc3Q9ITAscn1mdW5jdGlvbiBodChlLHQsbixyKXt2YXIgaSxvPXRoaXMuJHNjb3BlZFNsb3RzW2VdO28/KG49bnx8e30sciYmKG49QShBKHt9LHIpLG4pKSxpPW8obil8fHQpOmk9dGhpcy4kc2xvdHNbZV18fHQ7dmFyIGE9biYmbi5zbG90O3JldHVybiBhP3RoaXMuJGNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiLHtzbG90OmF9LGkpOml9ZnVuY3Rpb24gbXQoZSl7cmV0dXJuIExlKHRoaXMuJG9wdGlvbnMsXCJmaWx0ZXJzXCIsZSl8fEV9ZnVuY3Rpb24geXQoZSx0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT8tMT09PWUuaW5kZXhPZih0KTplIT09dH1mdW5jdGlvbiBndChlLHQsbixyLGkpe3ZhciBvPUYua2V5Q29kZXNbdF18fG47cmV0dXJuIGkmJnImJiFGLmtleUNvZGVzW3RdP3l0KGkscik6bz95dChvLGUpOnI/QyhyKSE9PXQ6dm9pZCAwfWZ1bmN0aW9uIF90KGUsdCxuLHIsaSl7aWYobilpZihvKG4pKXt2YXIgYTtBcnJheS5pc0FycmF5KG4pJiYobj1PKG4pKTt2YXIgcz1mdW5jdGlvbihvKXtpZihcImNsYXNzXCI9PT1vfHxcInN0eWxlXCI9PT1vfHx2KG8pKWE9ZTtlbHNle3ZhciBzPWUuYXR0cnMmJmUuYXR0cnMudHlwZTthPXJ8fEYubXVzdFVzZVByb3AodCxzLG8pP2UuZG9tUHJvcHN8fChlLmRvbVByb3BzPXt9KTplLmF0dHJzfHwoZS5hdHRycz17fSl9dmFyIGM9YihvKSx1PUMobyk7YyBpbiBhfHx1IGluIGF8fChhW29dPW5bb10saSYmKChlLm9ufHwoZS5vbj17fSkpW1widXBkYXRlOlwiK29dPWZ1bmN0aW9uKGUpe25bb109ZX0pKX07Zm9yKHZhciBjIGluIG4pcyhjKX1lbHNlO3JldHVybiBlfWZ1bmN0aW9uIGJ0KGUsdCl7dmFyIG49dGhpcy5fc3RhdGljVHJlZXN8fCh0aGlzLl9zdGF0aWNUcmVlcz1bXSkscj1uW2VdO3JldHVybiByJiYhdD9yOih3dChyPW5bZV09dGhpcy4kb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnNbZV0uY2FsbCh0aGlzLl9yZW5kZXJQcm94eSxudWxsLHRoaXMpLFwiX19zdGF0aWNfX1wiK2UsITEpLHIpfWZ1bmN0aW9uICR0KGUsdCxuKXtyZXR1cm4gd3QoZSxcIl9fb25jZV9fXCIrdCsobj9cIl9cIituOlwiXCIpLCEwKSxlfWZ1bmN0aW9uIHd0KGUsdCxuKXtpZihBcnJheS5pc0FycmF5KGUpKWZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWVbcl0mJlwic3RyaW5nXCIhPXR5cGVvZiBlW3JdJiZDdChlW3JdLHQrXCJfXCIrcixuKTtlbHNlIEN0KGUsdCxuKX1mdW5jdGlvbiBDdChlLHQsbil7ZS5pc1N0YXRpYz0hMCxlLmtleT10LGUuaXNPbmNlPW59ZnVuY3Rpb24geHQoZSx0KXtpZih0KWlmKHModCkpe3ZhciBuPWUub249ZS5vbj9BKHt9LGUub24pOnt9O2Zvcih2YXIgciBpbiB0KXt2YXIgaT1uW3JdLG89dFtyXTtuW3JdPWk/W10uY29uY2F0KGksbyk6b319ZWxzZTtyZXR1cm4gZX1mdW5jdGlvbiBrdChlLHQsbixyKXt0PXR8fHskc3RhYmxlOiFufTtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89ZVtpXTtBcnJheS5pc0FycmF5KG8pP2t0KG8sdCxuKTpvJiYoby5wcm94eSYmKG8uZm4ucHJveHk9ITApLHRbby5rZXldPW8uZm4pfXJldHVybiByJiYodC4ka2V5PXIpLHR9ZnVuY3Rpb24gQXQoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rPTIpe3ZhciByPXRbbl07XCJzdHJpbmdcIj09dHlwZW9mIHImJnImJihlW3Rbbl1dPXRbbisxXSl9cmV0dXJuIGV9ZnVuY3Rpb24gT3QoZSx0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT90K2U6ZX1mdW5jdGlvbiBTdChlKXtlLl9vPSR0LGUuX249ZixlLl9zPWwsZS5fbD12dCxlLl90PWh0LGUuX3E9TixlLl9pPWosZS5fbT1idCxlLl9mPW10LGUuX2s9Z3QsZS5fYj1fdCxlLl92PWhlLGUuX2U9dmUsZS5fdT1rdCxlLl9nPXh0LGUuX2Q9QXQsZS5fcD1PdH1mdW5jdGlvbiBUdCh0LG4saSxvLGEpe3ZhciBzLGM9dGhpcyx1PWEub3B0aW9uczt5KG8sXCJfdWlkXCIpPyhzPU9iamVjdC5jcmVhdGUobykpLl9vcmlnaW5hbD1vOihzPW8sbz1vLl9vcmlnaW5hbCk7dmFyIGw9cih1Ll9jb21waWxlZCksZj0hbDt0aGlzLmRhdGE9dCx0aGlzLnByb3BzPW4sdGhpcy5jaGlsZHJlbj1pLHRoaXMucGFyZW50PW8sdGhpcy5saXN0ZW5lcnM9dC5vbnx8ZSx0aGlzLmluamVjdGlvbnM9Y3QodS5pbmplY3QsbyksdGhpcy5zbG90cz1mdW5jdGlvbigpe3JldHVybiBjLiRzbG90c3x8ZnQodC5zY29wZWRTbG90cyxjLiRzbG90cz11dChpLG8pKSxjLiRzbG90c30sT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJzY29wZWRTbG90c1wiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBmdCh0LnNjb3BlZFNsb3RzLHRoaXMuc2xvdHMoKSl9fSksbCYmKHRoaXMuJG9wdGlvbnM9dSx0aGlzLiRzbG90cz10aGlzLnNsb3RzKCksdGhpcy4kc2NvcGVkU2xvdHM9ZnQodC5zY29wZWRTbG90cyx0aGlzLiRzbG90cykpLHUuX3Njb3BlSWQ/dGhpcy5fYz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT1QdChzLGUsdCxuLHIsZik7cmV0dXJuIGkmJiFBcnJheS5pc0FycmF5KGkpJiYoaS5mblNjb3BlSWQ9dS5fc2NvcGVJZCxpLmZuQ29udGV4dD1vKSxpfTp0aGlzLl9jPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBQdChzLGUsdCxuLHIsZil9fWZ1bmN0aW9uIEV0KGUsdCxuLHIsaSl7dmFyIG89bWUoZSk7cmV0dXJuIG8uZm5Db250ZXh0PW4sby5mbk9wdGlvbnM9cix0LnNsb3QmJigoby5kYXRhfHwoby5kYXRhPXt9KSkuc2xvdD10LnNsb3QpLG99ZnVuY3Rpb24gTnQoZSx0KXtmb3IodmFyIG4gaW4gdCllW2IobildPXRbbl19U3QoVHQucHJvdG90eXBlKTt2YXIganQ9e2luaXQ6ZnVuY3Rpb24oZSx0KXtpZihlLmNvbXBvbmVudEluc3RhbmNlJiYhZS5jb21wb25lbnRJbnN0YW5jZS5faXNEZXN0cm95ZWQmJmUuZGF0YS5rZWVwQWxpdmUpe3ZhciByPWU7anQucHJlcGF0Y2gocixyKX1lbHNleyhlLmNvbXBvbmVudEluc3RhbmNlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9e19pc0NvbXBvbmVudDohMCxfcGFyZW50Vm5vZGU6ZSxwYXJlbnQ6dH0saT1lLmRhdGEuaW5saW5lVGVtcGxhdGU7bihpKSYmKHIucmVuZGVyPWkucmVuZGVyLHIuc3RhdGljUmVuZGVyRm5zPWkuc3RhdGljUmVuZGVyRm5zKTtyZXR1cm4gbmV3IGUuY29tcG9uZW50T3B0aW9ucy5DdG9yKHIpfShlLFd0KSkuJG1vdW50KHQ/ZS5lbG06dm9pZCAwLHQpfX0scHJlcGF0Y2g6ZnVuY3Rpb24odCxuKXt2YXIgcj1uLmNvbXBvbmVudE9wdGlvbnM7IWZ1bmN0aW9uKHQsbixyLGksbyl7dmFyIGE9aS5kYXRhLnNjb3BlZFNsb3RzLHM9dC4kc2NvcGVkU2xvdHMsYz0hIShhJiYhYS4kc3RhYmxlfHxzIT09ZSYmIXMuJHN0YWJsZXx8YSYmdC4kc2NvcGVkU2xvdHMuJGtleSE9PWEuJGtleSksdT0hIShvfHx0LiRvcHRpb25zLl9yZW5kZXJDaGlsZHJlbnx8Yyk7dC4kb3B0aW9ucy5fcGFyZW50Vm5vZGU9aSx0LiR2bm9kZT1pLHQuX3Zub2RlJiYodC5fdm5vZGUucGFyZW50PWkpO2lmKHQuJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuPW8sdC4kYXR0cnM9aS5kYXRhLmF0dHJzfHxlLHQuJGxpc3RlbmVycz1yfHxlLG4mJnQuJG9wdGlvbnMucHJvcHMpeyRlKCExKTtmb3IodmFyIGw9dC5fcHJvcHMsZj10LiRvcHRpb25zLl9wcm9wS2V5c3x8W10scD0wO3A8Zi5sZW5ndGg7cCsrKXt2YXIgZD1mW3BdLHY9dC4kb3B0aW9ucy5wcm9wcztsW2RdPU1lKGQsdixuLHQpfSRlKCEwKSx0LiRvcHRpb25zLnByb3BzRGF0YT1ufXI9cnx8ZTt2YXIgaD10LiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM7dC4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzPXIscXQodCxyLGgpLHUmJih0LiRzbG90cz11dChvLGkuY29udGV4dCksdC4kZm9yY2VVcGRhdGUoKSl9KG4uY29tcG9uZW50SW5zdGFuY2U9dC5jb21wb25lbnRJbnN0YW5jZSxyLnByb3BzRGF0YSxyLmxpc3RlbmVycyxuLHIuY2hpbGRyZW4pfSxpbnNlcnQ6ZnVuY3Rpb24oZSl7dmFyIHQsbj1lLmNvbnRleHQscj1lLmNvbXBvbmVudEluc3RhbmNlO3IuX2lzTW91bnRlZHx8KHIuX2lzTW91bnRlZD0hMCxZdChyLFwibW91bnRlZFwiKSksZS5kYXRhLmtlZXBBbGl2ZSYmKG4uX2lzTW91bnRlZD8oKHQ9cikuX2luYWN0aXZlPSExLGVuLnB1c2godCkpOlh0KHIsITApKX0sZGVzdHJveTpmdW5jdGlvbihlKXt2YXIgdD1lLmNvbXBvbmVudEluc3RhbmNlO3QuX2lzRGVzdHJveWVkfHwoZS5kYXRhLmtlZXBBbGl2ZT9mdW5jdGlvbiBlKHQsbil7aWYobiYmKHQuX2RpcmVjdEluYWN0aXZlPSEwLEd0KHQpKSlyZXR1cm47aWYoIXQuX2luYWN0aXZlKXt0Ll9pbmFjdGl2ZT0hMDtmb3IodmFyIHI9MDtyPHQuJGNoaWxkcmVuLmxlbmd0aDtyKyspZSh0LiRjaGlsZHJlbltyXSk7WXQodCxcImRlYWN0aXZhdGVkXCIpfX0odCwhMCk6dC4kZGVzdHJveSgpKX19LER0PU9iamVjdC5rZXlzKGp0KTtmdW5jdGlvbiBMdChpLGEscyxjLGwpe2lmKCF0KGkpKXt2YXIgZj1zLiRvcHRpb25zLl9iYXNlO2lmKG8oaSkmJihpPWYuZXh0ZW5kKGkpKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBpKXt2YXIgcDtpZih0KGkuY2lkKSYmdm9pZCAwPT09KGk9ZnVuY3Rpb24oZSxpKXtpZihyKGUuZXJyb3IpJiZuKGUuZXJyb3JDb21wKSlyZXR1cm4gZS5lcnJvckNvbXA7aWYobihlLnJlc29sdmVkKSlyZXR1cm4gZS5yZXNvbHZlZDt2YXIgYT1IdDthJiZuKGUub3duZXJzKSYmLTE9PT1lLm93bmVycy5pbmRleE9mKGEpJiZlLm93bmVycy5wdXNoKGEpO2lmKHIoZS5sb2FkaW5nKSYmbihlLmxvYWRpbmdDb21wKSlyZXR1cm4gZS5sb2FkaW5nQ29tcDtpZihhJiYhbihlLm93bmVycykpe3ZhciBzPWUub3duZXJzPVthXSxjPSEwLGw9bnVsbCxmPW51bGw7YS4kb24oXCJob29rOmRlc3Ryb3llZFwiLGZ1bmN0aW9uKCl7cmV0dXJuIGgocyxhKX0pO3ZhciBwPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49cy5sZW5ndGg7dDxuO3QrKylzW3RdLiRmb3JjZVVwZGF0ZSgpO2UmJihzLmxlbmd0aD0wLG51bGwhPT1sJiYoY2xlYXJUaW1lb3V0KGwpLGw9bnVsbCksbnVsbCE9PWYmJihjbGVhclRpbWVvdXQoZiksZj1udWxsKSl9LGQ9RChmdW5jdGlvbih0KXtlLnJlc29sdmVkPUJ0KHQsaSksYz9zLmxlbmd0aD0wOnAoITApfSksdj1EKGZ1bmN0aW9uKHQpe24oZS5lcnJvckNvbXApJiYoZS5lcnJvcj0hMCxwKCEwKSl9KSxtPWUoZCx2KTtyZXR1cm4gbyhtKSYmKHUobSk/dChlLnJlc29sdmVkKSYmbS50aGVuKGQsdik6dShtLmNvbXBvbmVudCkmJihtLmNvbXBvbmVudC50aGVuKGQsdiksbihtLmVycm9yKSYmKGUuZXJyb3JDb21wPUJ0KG0uZXJyb3IsaSkpLG4obS5sb2FkaW5nKSYmKGUubG9hZGluZ0NvbXA9QnQobS5sb2FkaW5nLGkpLDA9PT1tLmRlbGF5P2UubG9hZGluZz0hMDpsPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtsPW51bGwsdChlLnJlc29sdmVkKSYmdChlLmVycm9yKSYmKGUubG9hZGluZz0hMCxwKCExKSl9LG0uZGVsYXl8fDIwMCkpLG4obS50aW1lb3V0KSYmKGY9c2V0VGltZW91dChmdW5jdGlvbigpe2Y9bnVsbCx0KGUucmVzb2x2ZWQpJiZ2KG51bGwpfSxtLnRpbWVvdXQpKSkpLGM9ITEsZS5sb2FkaW5nP2UubG9hZGluZ0NvbXA6ZS5yZXNvbHZlZH19KHA9aSxmKSkpcmV0dXJuIGZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89dmUoKTtyZXR1cm4gby5hc3luY0ZhY3Rvcnk9ZSxvLmFzeW5jTWV0YT17ZGF0YTp0LGNvbnRleHQ6bixjaGlsZHJlbjpyLHRhZzppfSxvfShwLGEscyxjLGwpO2E9YXx8e30sJG4oaSksbihhLm1vZGVsKSYmZnVuY3Rpb24oZSx0KXt2YXIgcj1lLm1vZGVsJiZlLm1vZGVsLnByb3B8fFwidmFsdWVcIixpPWUubW9kZWwmJmUubW9kZWwuZXZlbnR8fFwiaW5wdXRcIjsodC5hdHRyc3x8KHQuYXR0cnM9e30pKVtyXT10Lm1vZGVsLnZhbHVlO3ZhciBvPXQub258fCh0Lm9uPXt9KSxhPW9baV0scz10Lm1vZGVsLmNhbGxiYWNrO24oYSk/KEFycmF5LmlzQXJyYXkoYSk/LTE9PT1hLmluZGV4T2Yocyk6YSE9PXMpJiYob1tpXT1bc10uY29uY2F0KGEpKTpvW2ldPXN9KGkub3B0aW9ucyxhKTt2YXIgZD1mdW5jdGlvbihlLHIsaSl7dmFyIG89ci5vcHRpb25zLnByb3BzO2lmKCF0KG8pKXt2YXIgYT17fSxzPWUuYXR0cnMsYz1lLnByb3BzO2lmKG4ocyl8fG4oYykpZm9yKHZhciB1IGluIG8pe3ZhciBsPUModSk7b3QoYSxjLHUsbCwhMCl8fG90KGEscyx1LGwsITEpfXJldHVybiBhfX0oYSxpKTtpZihyKGkub3B0aW9ucy5mdW5jdGlvbmFsKSlyZXR1cm4gZnVuY3Rpb24odCxyLGksbyxhKXt2YXIgcz10Lm9wdGlvbnMsYz17fSx1PXMucHJvcHM7aWYobih1KSlmb3IodmFyIGwgaW4gdSljW2xdPU1lKGwsdSxyfHxlKTtlbHNlIG4oaS5hdHRycykmJk50KGMsaS5hdHRycyksbihpLnByb3BzKSYmTnQoYyxpLnByb3BzKTt2YXIgZj1uZXcgVHQoaSxjLGEsbyx0KSxwPXMucmVuZGVyLmNhbGwobnVsbCxmLl9jLGYpO2lmKHAgaW5zdGFuY2VvZiBwZSlyZXR1cm4gRXQocCxpLGYucGFyZW50LHMpO2lmKEFycmF5LmlzQXJyYXkocCkpe2Zvcih2YXIgZD1hdChwKXx8W10sdj1uZXcgQXJyYXkoZC5sZW5ndGgpLGg9MDtoPGQubGVuZ3RoO2grKyl2W2hdPUV0KGRbaF0saSxmLnBhcmVudCxzKTtyZXR1cm4gdn19KGksZCxhLHMsYyk7dmFyIHY9YS5vbjtpZihhLm9uPWEubmF0aXZlT24scihpLm9wdGlvbnMuYWJzdHJhY3QpKXt2YXIgbT1hLnNsb3Q7YT17fSxtJiYoYS5zbG90PW0pfSFmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5ob29rfHwoZS5ob29rPXt9KSxuPTA7bjxEdC5sZW5ndGg7bisrKXt2YXIgcj1EdFtuXSxpPXRbcl0sbz1qdFtyXTtpPT09b3x8aSYmaS5fbWVyZ2VkfHwodFtyXT1pP010KG8saSk6byl9fShhKTt2YXIgeT1pLm9wdGlvbnMubmFtZXx8bDtyZXR1cm4gbmV3IHBlKFwidnVlLWNvbXBvbmVudC1cIitpLmNpZCsoeT9cIi1cIit5OlwiXCIpLGEsdm9pZCAwLHZvaWQgMCx2b2lkIDAscyx7Q3RvcjppLHByb3BzRGF0YTpkLGxpc3RlbmVyczp2LHRhZzpsLGNoaWxkcmVuOmN9LHApfX19ZnVuY3Rpb24gTXQoZSx0KXt2YXIgbj1mdW5jdGlvbihuLHIpe2UobixyKSx0KG4scil9O3JldHVybiBuLl9tZXJnZWQ9ITAsbn12YXIgSXQ9MSxGdD0yO2Z1bmN0aW9uIFB0KGUsYSxzLGMsdSxsKXtyZXR1cm4oQXJyYXkuaXNBcnJheShzKXx8aShzKSkmJih1PWMsYz1zLHM9dm9pZCAwKSxyKGwpJiYodT1GdCksZnVuY3Rpb24oZSxpLGEscyxjKXtpZihuKGEpJiZuKGEuX19vYl9fKSlyZXR1cm4gdmUoKTtuKGEpJiZuKGEuaXMpJiYoaT1hLmlzKTtpZighaSlyZXR1cm4gdmUoKTtBcnJheS5pc0FycmF5KHMpJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBzWzBdJiYoKGE9YXx8e30pLnNjb3BlZFNsb3RzPXtkZWZhdWx0OnNbMF19LHMubGVuZ3RoPTApO2M9PT1GdD9zPWF0KHMpOmM9PT1JdCYmKHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspaWYoQXJyYXkuaXNBcnJheShlW3RdKSlyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxlKTtyZXR1cm4gZX0ocykpO3ZhciB1LGw7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGkpe3ZhciBmO2w9ZS4kdm5vZGUmJmUuJHZub2RlLm5zfHxGLmdldFRhZ05hbWVzcGFjZShpKSx1PUYuaXNSZXNlcnZlZFRhZyhpKT9uZXcgcGUoRi5wYXJzZVBsYXRmb3JtVGFnTmFtZShpKSxhLHMsdm9pZCAwLHZvaWQgMCxlKTphJiZhLnByZXx8IW4oZj1MZShlLiRvcHRpb25zLFwiY29tcG9uZW50c1wiLGkpKT9uZXcgcGUoaSxhLHMsdm9pZCAwLHZvaWQgMCxlKTpMdChmLGEsZSxzLGkpfWVsc2UgdT1MdChpLGEsZSxzKTtyZXR1cm4gQXJyYXkuaXNBcnJheSh1KT91Om4odSk/KG4obCkmJmZ1bmN0aW9uIGUoaSxvLGEpe2kubnM9bztcImZvcmVpZ25PYmplY3RcIj09PWkudGFnJiYobz12b2lkIDAsYT0hMCk7aWYobihpLmNoaWxkcmVuKSlmb3IodmFyIHM9MCxjPWkuY2hpbGRyZW4ubGVuZ3RoO3M8YztzKyspe3ZhciB1PWkuY2hpbGRyZW5bc107bih1LnRhZykmJih0KHUubnMpfHxyKGEpJiZcInN2Z1wiIT09dS50YWcpJiZlKHUsbyxhKX19KHUsbCksbihhKSYmZnVuY3Rpb24oZSl7byhlLnN0eWxlKSYmZXQoZS5zdHlsZSk7byhlLmNsYXNzKSYmZXQoZS5jbGFzcyl9KGEpLHUpOnZlKCl9KGUsYSxzLGMsdSl9dmFyIFJ0LEh0PW51bGw7ZnVuY3Rpb24gQnQoZSx0KXtyZXR1cm4oZS5fX2VzTW9kdWxlfHxvZSYmXCJNb2R1bGVcIj09PWVbU3ltYm9sLnRvU3RyaW5nVGFnXSkmJihlPWUuZGVmYXVsdCksbyhlKT90LmV4dGVuZChlKTplfWZ1bmN0aW9uIFV0KGUpe3JldHVybiBlLmlzQ29tbWVudCYmZS5hc3luY0ZhY3Rvcnl9ZnVuY3Rpb24genQoZSl7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIHI9ZVt0XTtpZihuKHIpJiYobihyLmNvbXBvbmVudE9wdGlvbnMpfHxVdChyKSkpcmV0dXJuIHJ9fWZ1bmN0aW9uIFZ0KGUsdCl7UnQuJG9uKGUsdCl9ZnVuY3Rpb24gS3QoZSx0KXtSdC4kb2ZmKGUsdCl9ZnVuY3Rpb24gSnQoZSx0KXt2YXIgbj1SdDtyZXR1cm4gZnVuY3Rpb24gcigpe251bGwhPT10LmFwcGx5KG51bGwsYXJndW1lbnRzKSYmbi4kb2ZmKGUscil9fWZ1bmN0aW9uIHF0KGUsdCxuKXtSdD1lLHJ0KHQsbnx8e30sVnQsS3QsSnQsZSksUnQ9dm9pZCAwfXZhciBXdD1udWxsO2Z1bmN0aW9uIFp0KGUpe3ZhciB0PVd0O3JldHVybiBXdD1lLGZ1bmN0aW9uKCl7V3Q9dH19ZnVuY3Rpb24gR3QoZSl7Zm9yKDtlJiYoZT1lLiRwYXJlbnQpOylpZihlLl9pbmFjdGl2ZSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBYdChlLHQpe2lmKHQpe2lmKGUuX2RpcmVjdEluYWN0aXZlPSExLEd0KGUpKXJldHVybn1lbHNlIGlmKGUuX2RpcmVjdEluYWN0aXZlKXJldHVybjtpZihlLl9pbmFjdGl2ZXx8bnVsbD09PWUuX2luYWN0aXZlKXtlLl9pbmFjdGl2ZT0hMTtmb3IodmFyIG49MDtuPGUuJGNoaWxkcmVuLmxlbmd0aDtuKyspWHQoZS4kY2hpbGRyZW5bbl0pO1l0KGUsXCJhY3RpdmF0ZWRcIil9fWZ1bmN0aW9uIFl0KGUsdCl7bGUoKTt2YXIgbj1lLiRvcHRpb25zW3RdLHI9dCtcIiBob29rXCI7aWYobilmb3IodmFyIGk9MCxvPW4ubGVuZ3RoO2k8bztpKyspSGUobltpXSxlLG51bGwsZSxyKTtlLl9oYXNIb29rRXZlbnQmJmUuJGVtaXQoXCJob29rOlwiK3QpLGZlKCl9dmFyIFF0PVtdLGVuPVtdLHRuPXt9LG5uPSExLHJuPSExLG9uPTA7dmFyIGFuPTAsc249RGF0ZS5ub3c7aWYoeiYmIXEpe3ZhciBjbj13aW5kb3cucGVyZm9ybWFuY2U7Y24mJlwiZnVuY3Rpb25cIj09dHlwZW9mIGNuLm5vdyYmc24oKT5kb2N1bWVudC5jcmVhdGVFdmVudChcIkV2ZW50XCIpLnRpbWVTdGFtcCYmKHNuPWZ1bmN0aW9uKCl7cmV0dXJuIGNuLm5vdygpfSl9ZnVuY3Rpb24gdW4oKXt2YXIgZSx0O2Zvcihhbj1zbigpLHJuPSEwLFF0LnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5pZC10LmlkfSksb249MDtvbjxRdC5sZW5ndGg7b24rKykoZT1RdFtvbl0pLmJlZm9yZSYmZS5iZWZvcmUoKSx0PWUuaWQsdG5bdF09bnVsbCxlLnJ1bigpO3ZhciBuPWVuLnNsaWNlKCkscj1RdC5zbGljZSgpO29uPVF0Lmxlbmd0aD1lbi5sZW5ndGg9MCx0bj17fSxubj1ybj0hMSxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdLl9pbmFjdGl2ZT0hMCxYdChlW3RdLCEwKX0obiksZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7Zm9yKDt0LS07KXt2YXIgbj1lW3RdLHI9bi52bTtyLl93YXRjaGVyPT09biYmci5faXNNb3VudGVkJiYhci5faXNEZXN0cm95ZWQmJll0KHIsXCJ1cGRhdGVkXCIpfX0ociksbmUmJkYuZGV2dG9vbHMmJm5lLmVtaXQoXCJmbHVzaFwiKX12YXIgbG49MCxmbj1mdW5jdGlvbihlLHQsbixyLGkpe3RoaXMudm09ZSxpJiYoZS5fd2F0Y2hlcj10aGlzKSxlLl93YXRjaGVycy5wdXNoKHRoaXMpLHI/KHRoaXMuZGVlcD0hIXIuZGVlcCx0aGlzLnVzZXI9ISFyLnVzZXIsdGhpcy5sYXp5PSEhci5sYXp5LHRoaXMuc3luYz0hIXIuc3luYyx0aGlzLmJlZm9yZT1yLmJlZm9yZSk6dGhpcy5kZWVwPXRoaXMudXNlcj10aGlzLmxhenk9dGhpcy5zeW5jPSExLHRoaXMuY2I9bix0aGlzLmlkPSsrbG4sdGhpcy5hY3RpdmU9ITAsdGhpcy5kaXJ0eT10aGlzLmxhenksdGhpcy5kZXBzPVtdLHRoaXMubmV3RGVwcz1bXSx0aGlzLmRlcElkcz1uZXcgaWUsdGhpcy5uZXdEZXBJZHM9bmV3IGllLHRoaXMuZXhwcmVzc2lvbj1cIlwiLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dGhpcy5nZXR0ZXI9dDoodGhpcy5nZXR0ZXI9ZnVuY3Rpb24oZSl7aWYoIUgudGVzdChlKSl7dmFyIHQ9ZS5zcGxpdChcIi5cIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXtpZighZSlyZXR1cm47ZT1lW3Rbbl1dfXJldHVybiBlfX19KHQpLHRoaXMuZ2V0dGVyfHwodGhpcy5nZXR0ZXI9UykpLHRoaXMudmFsdWU9dGhpcy5sYXp5P3ZvaWQgMDp0aGlzLmdldCgpfTtmbi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7dmFyIGU7bGUodGhpcyk7dmFyIHQ9dGhpcy52bTt0cnl7ZT10aGlzLmdldHRlci5jYWxsKHQsdCl9Y2F0Y2goZSl7aWYoIXRoaXMudXNlcil0aHJvdyBlO1JlKGUsdCwnZ2V0dGVyIGZvciB3YXRjaGVyIFwiJyt0aGlzLmV4cHJlc3Npb24rJ1wiJyl9ZmluYWxseXt0aGlzLmRlZXAmJmV0KGUpLGZlKCksdGhpcy5jbGVhbnVwRGVwcygpfXJldHVybiBlfSxmbi5wcm90b3R5cGUuYWRkRGVwPWZ1bmN0aW9uKGUpe3ZhciB0PWUuaWQ7dGhpcy5uZXdEZXBJZHMuaGFzKHQpfHwodGhpcy5uZXdEZXBJZHMuYWRkKHQpLHRoaXMubmV3RGVwcy5wdXNoKGUpLHRoaXMuZGVwSWRzLmhhcyh0KXx8ZS5hZGRTdWIodGhpcykpfSxmbi5wcm90b3R5cGUuY2xlYW51cERlcHM9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5kZXBzLmxlbmd0aDtlLS07KXt2YXIgdD10aGlzLmRlcHNbZV07dGhpcy5uZXdEZXBJZHMuaGFzKHQuaWQpfHx0LnJlbW92ZVN1Yih0aGlzKX12YXIgbj10aGlzLmRlcElkczt0aGlzLmRlcElkcz10aGlzLm5ld0RlcElkcyx0aGlzLm5ld0RlcElkcz1uLHRoaXMubmV3RGVwSWRzLmNsZWFyKCksbj10aGlzLmRlcHMsdGhpcy5kZXBzPXRoaXMubmV3RGVwcyx0aGlzLm5ld0RlcHM9bix0aGlzLm5ld0RlcHMubGVuZ3RoPTB9LGZuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXt0aGlzLmxhenk/dGhpcy5kaXJ0eT0hMDp0aGlzLnN5bmM/dGhpcy5ydW4oKTpmdW5jdGlvbihlKXt2YXIgdD1lLmlkO2lmKG51bGw9PXRuW3RdKXtpZih0blt0XT0hMCxybil7Zm9yKHZhciBuPVF0Lmxlbmd0aC0xO24+b24mJlF0W25dLmlkPmUuaWQ7KW4tLTtRdC5zcGxpY2UobisxLDAsZSl9ZWxzZSBRdC5wdXNoKGUpO25ufHwobm49ITAsWWUodW4pKX19KHRoaXMpfSxmbi5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7aWYodGhpcy5hY3RpdmUpe3ZhciBlPXRoaXMuZ2V0KCk7aWYoZSE9PXRoaXMudmFsdWV8fG8oZSl8fHRoaXMuZGVlcCl7dmFyIHQ9dGhpcy52YWx1ZTtpZih0aGlzLnZhbHVlPWUsdGhpcy51c2VyKXRyeXt0aGlzLmNiLmNhbGwodGhpcy52bSxlLHQpfWNhdGNoKGUpe1JlKGUsdGhpcy52bSwnY2FsbGJhY2sgZm9yIHdhdGNoZXIgXCInK3RoaXMuZXhwcmVzc2lvbisnXCInKX1lbHNlIHRoaXMuY2IuY2FsbCh0aGlzLnZtLGUsdCl9fX0sZm4ucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKCl7dGhpcy52YWx1ZT10aGlzLmdldCgpLHRoaXMuZGlydHk9ITF9LGZuLnByb3RvdHlwZS5kZXBlbmQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5kZXBzLmxlbmd0aDtlLS07KXRoaXMuZGVwc1tlXS5kZXBlbmQoKX0sZm4ucHJvdG90eXBlLnRlYXJkb3duPWZ1bmN0aW9uKCl7aWYodGhpcy5hY3RpdmUpe3RoaXMudm0uX2lzQmVpbmdEZXN0cm95ZWR8fGgodGhpcy52bS5fd2F0Y2hlcnMsdGhpcyk7Zm9yKHZhciBlPXRoaXMuZGVwcy5sZW5ndGg7ZS0tOyl0aGlzLmRlcHNbZV0ucmVtb3ZlU3ViKHRoaXMpO3RoaXMuYWN0aXZlPSExfX07dmFyIHBuPXtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6UyxzZXQ6U307ZnVuY3Rpb24gZG4oZSx0LG4pe3BuLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzW3RdW25dfSxwbi5zZXQ9ZnVuY3Rpb24oZSl7dGhpc1t0XVtuXT1lfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHBuKX1mdW5jdGlvbiB2bihlKXtlLl93YXRjaGVycz1bXTt2YXIgdD1lLiRvcHRpb25zO3QucHJvcHMmJmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS4kb3B0aW9ucy5wcm9wc0RhdGF8fHt9LHI9ZS5fcHJvcHM9e30saT1lLiRvcHRpb25zLl9wcm9wS2V5cz1bXTtlLiRwYXJlbnQmJiRlKCExKTt2YXIgbz1mdW5jdGlvbihvKXtpLnB1c2gobyk7dmFyIGE9TWUobyx0LG4sZSk7eGUocixvLGEpLG8gaW4gZXx8ZG4oZSxcIl9wcm9wc1wiLG8pfTtmb3IodmFyIGEgaW4gdClvKGEpOyRlKCEwKX0oZSx0LnByb3BzKSx0Lm1ldGhvZHMmJmZ1bmN0aW9uKGUsdCl7ZS4kb3B0aW9ucy5wcm9wcztmb3IodmFyIG4gaW4gdCllW25dPVwiZnVuY3Rpb25cIiE9dHlwZW9mIHRbbl0/Uzp4KHRbbl0sZSl9KGUsdC5tZXRob2RzKSx0LmRhdGE/ZnVuY3Rpb24oZSl7dmFyIHQ9ZS4kb3B0aW9ucy5kYXRhO3ModD1lLl9kYXRhPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZnVuY3Rpb24oZSx0KXtsZSgpO3RyeXtyZXR1cm4gZS5jYWxsKHQsdCl9Y2F0Y2goZSl7cmV0dXJuIFJlKGUsdCxcImRhdGEoKVwiKSx7fX1maW5hbGx5e2ZlKCl9fSh0LGUpOnR8fHt9KXx8KHQ9e30pO3ZhciBuPU9iamVjdC5rZXlzKHQpLHI9ZS4kb3B0aW9ucy5wcm9wcyxpPShlLiRvcHRpb25zLm1ldGhvZHMsbi5sZW5ndGgpO2Zvcig7aS0tOyl7dmFyIG89bltpXTtyJiZ5KHIsbyl8fChhPXZvaWQgMCwzNiE9PShhPShvK1wiXCIpLmNoYXJDb2RlQXQoMCkpJiY5NSE9PWEmJmRuKGUsXCJfZGF0YVwiLG8pKX12YXIgYTtDZSh0LCEwKX0oZSk6Q2UoZS5fZGF0YT17fSwhMCksdC5jb21wdXRlZCYmZnVuY3Rpb24oZSx0KXt2YXIgbj1lLl9jb21wdXRlZFdhdGNoZXJzPU9iamVjdC5jcmVhdGUobnVsbCkscj10ZSgpO2Zvcih2YXIgaSBpbiB0KXt2YXIgbz10W2ldLGE9XCJmdW5jdGlvblwiPT10eXBlb2Ygbz9vOm8uZ2V0O3J8fChuW2ldPW5ldyBmbihlLGF8fFMsUyxobikpLGkgaW4gZXx8bW4oZSxpLG8pfX0oZSx0LmNvbXB1dGVkKSx0LndhdGNoJiZ0LndhdGNoIT09WSYmZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl7dmFyIHI9dFtuXTtpZihBcnJheS5pc0FycmF5KHIpKWZvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKV9uKGUsbixyW2ldKTtlbHNlIF9uKGUsbixyKX19KGUsdC53YXRjaCl9dmFyIGhuPXtsYXp5OiEwfTtmdW5jdGlvbiBtbihlLHQsbil7dmFyIHI9IXRlKCk7XCJmdW5jdGlvblwiPT10eXBlb2Ygbj8ocG4uZ2V0PXI/eW4odCk6Z24obikscG4uc2V0PVMpOihwbi5nZXQ9bi5nZXQ/ciYmITEhPT1uLmNhY2hlP3luKHQpOmduKG4uZ2V0KTpTLHBuLnNldD1uLnNldHx8UyksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxwbil9ZnVuY3Rpb24geW4oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY29tcHV0ZWRXYXRjaGVycyYmdGhpcy5fY29tcHV0ZWRXYXRjaGVyc1tlXTtpZih0KXJldHVybiB0LmRpcnR5JiZ0LmV2YWx1YXRlKCksY2UudGFyZ2V0JiZ0LmRlcGVuZCgpLHQudmFsdWV9fWZ1bmN0aW9uIGduKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmNhbGwodGhpcyx0aGlzKX19ZnVuY3Rpb24gX24oZSx0LG4scil7cmV0dXJuIHMobikmJihyPW4sbj1uLmhhbmRsZXIpLFwic3RyaW5nXCI9PXR5cGVvZiBuJiYobj1lW25dKSxlLiR3YXRjaCh0LG4scil9dmFyIGJuPTA7ZnVuY3Rpb24gJG4oZSl7dmFyIHQ9ZS5vcHRpb25zO2lmKGUuc3VwZXIpe3ZhciBuPSRuKGUuc3VwZXIpO2lmKG4hPT1lLnN1cGVyT3B0aW9ucyl7ZS5zdXBlck9wdGlvbnM9bjt2YXIgcj1mdW5jdGlvbihlKXt2YXIgdCxuPWUub3B0aW9ucyxyPWUuc2VhbGVkT3B0aW9ucztmb3IodmFyIGkgaW4gbiluW2ldIT09cltpXSYmKHR8fCh0PXt9KSx0W2ldPW5baV0pO3JldHVybiB0fShlKTtyJiZBKGUuZXh0ZW5kT3B0aW9ucyxyKSwodD1lLm9wdGlvbnM9RGUobixlLmV4dGVuZE9wdGlvbnMpKS5uYW1lJiYodC5jb21wb25lbnRzW3QubmFtZV09ZSl9fXJldHVybiB0fWZ1bmN0aW9uIHduKGUpe3RoaXMuX2luaXQoZSl9ZnVuY3Rpb24gQ24oZSl7ZS5jaWQ9MDt2YXIgdD0xO2UuZXh0ZW5kPWZ1bmN0aW9uKGUpe2U9ZXx8e307dmFyIG49dGhpcyxyPW4uY2lkLGk9ZS5fQ3Rvcnx8KGUuX0N0b3I9e30pO2lmKGlbcl0pcmV0dXJuIGlbcl07dmFyIG89ZS5uYW1lfHxuLm9wdGlvbnMubmFtZSxhPWZ1bmN0aW9uKGUpe3RoaXMuX2luaXQoZSl9O3JldHVybihhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKSkuY29uc3RydWN0b3I9YSxhLmNpZD10KyssYS5vcHRpb25zPURlKG4ub3B0aW9ucyxlKSxhLnN1cGVyPW4sYS5vcHRpb25zLnByb3BzJiZmdW5jdGlvbihlKXt2YXIgdD1lLm9wdGlvbnMucHJvcHM7Zm9yKHZhciBuIGluIHQpZG4oZS5wcm90b3R5cGUsXCJfcHJvcHNcIixuKX0oYSksYS5vcHRpb25zLmNvbXB1dGVkJiZmdW5jdGlvbihlKXt2YXIgdD1lLm9wdGlvbnMuY29tcHV0ZWQ7Zm9yKHZhciBuIGluIHQpbW4oZS5wcm90b3R5cGUsbix0W25dKX0oYSksYS5leHRlbmQ9bi5leHRlbmQsYS5taXhpbj1uLm1peGluLGEudXNlPW4udXNlLE0uZm9yRWFjaChmdW5jdGlvbihlKXthW2VdPW5bZV19KSxvJiYoYS5vcHRpb25zLmNvbXBvbmVudHNbb109YSksYS5zdXBlck9wdGlvbnM9bi5vcHRpb25zLGEuZXh0ZW5kT3B0aW9ucz1lLGEuc2VhbGVkT3B0aW9ucz1BKHt9LGEub3B0aW9ucyksaVtyXT1hLGF9fWZ1bmN0aW9uIHhuKGUpe3JldHVybiBlJiYoZS5DdG9yLm9wdGlvbnMubmFtZXx8ZS50YWcpfWZ1bmN0aW9uIGtuKGUsdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5pbmRleE9mKHQpPi0xOlwic3RyaW5nXCI9PXR5cGVvZiBlP2Uuc3BsaXQoXCIsXCIpLmluZGV4T2YodCk+LTE6KG49ZSxcIltvYmplY3QgUmVnRXhwXVwiPT09YS5jYWxsKG4pJiZlLnRlc3QodCkpO3ZhciBufWZ1bmN0aW9uIEFuKGUsdCl7dmFyIG49ZS5jYWNoZSxyPWUua2V5cyxpPWUuX3Zub2RlO2Zvcih2YXIgbyBpbiBuKXt2YXIgYT1uW29dO2lmKGEpe3ZhciBzPXhuKGEuY29tcG9uZW50T3B0aW9ucyk7cyYmIXQocykmJk9uKG4sbyxyLGkpfX19ZnVuY3Rpb24gT24oZSx0LG4scil7dmFyIGk9ZVt0XTshaXx8ciYmaS50YWc9PT1yLnRhZ3x8aS5jb21wb25lbnRJbnN0YW5jZS4kZGVzdHJveSgpLGVbdF09bnVsbCxoKG4sdCl9IWZ1bmN0aW9uKHQpe3QucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXM7bi5fdWlkPWJuKyssbi5faXNWdWU9ITAsdCYmdC5faXNDb21wb25lbnQ/ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLiRvcHRpb25zPU9iamVjdC5jcmVhdGUoZS5jb25zdHJ1Y3Rvci5vcHRpb25zKSxyPXQuX3BhcmVudFZub2RlO24ucGFyZW50PXQucGFyZW50LG4uX3BhcmVudFZub2RlPXI7dmFyIGk9ci5jb21wb25lbnRPcHRpb25zO24ucHJvcHNEYXRhPWkucHJvcHNEYXRhLG4uX3BhcmVudExpc3RlbmVycz1pLmxpc3RlbmVycyxuLl9yZW5kZXJDaGlsZHJlbj1pLmNoaWxkcmVuLG4uX2NvbXBvbmVudFRhZz1pLnRhZyx0LnJlbmRlciYmKG4ucmVuZGVyPXQucmVuZGVyLG4uc3RhdGljUmVuZGVyRm5zPXQuc3RhdGljUmVuZGVyRm5zKX0obix0KTpuLiRvcHRpb25zPURlKCRuKG4uY29uc3RydWN0b3IpLHR8fHt9LG4pLG4uX3JlbmRlclByb3h5PW4sbi5fc2VsZj1uLGZ1bmN0aW9uKGUpe3ZhciB0PWUuJG9wdGlvbnMsbj10LnBhcmVudDtpZihuJiYhdC5hYnN0cmFjdCl7Zm9yKDtuLiRvcHRpb25zLmFic3RyYWN0JiZuLiRwYXJlbnQ7KW49bi4kcGFyZW50O24uJGNoaWxkcmVuLnB1c2goZSl9ZS4kcGFyZW50PW4sZS4kcm9vdD1uP24uJHJvb3Q6ZSxlLiRjaGlsZHJlbj1bXSxlLiRyZWZzPXt9LGUuX3dhdGNoZXI9bnVsbCxlLl9pbmFjdGl2ZT1udWxsLGUuX2RpcmVjdEluYWN0aXZlPSExLGUuX2lzTW91bnRlZD0hMSxlLl9pc0Rlc3Ryb3llZD0hMSxlLl9pc0JlaW5nRGVzdHJveWVkPSExfShuKSxmdW5jdGlvbihlKXtlLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxlLl9oYXNIb29rRXZlbnQ9ITE7dmFyIHQ9ZS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO3QmJnF0KGUsdCl9KG4pLGZ1bmN0aW9uKHQpe3QuX3Zub2RlPW51bGwsdC5fc3RhdGljVHJlZXM9bnVsbDt2YXIgbj10LiRvcHRpb25zLHI9dC4kdm5vZGU9bi5fcGFyZW50Vm5vZGUsaT1yJiZyLmNvbnRleHQ7dC4kc2xvdHM9dXQobi5fcmVuZGVyQ2hpbGRyZW4saSksdC4kc2NvcGVkU2xvdHM9ZSx0Ll9jPWZ1bmN0aW9uKGUsbixyLGkpe3JldHVybiBQdCh0LGUsbixyLGksITEpfSx0LiRjcmVhdGVFbGVtZW50PWZ1bmN0aW9uKGUsbixyLGkpe3JldHVybiBQdCh0LGUsbixyLGksITApfTt2YXIgbz1yJiZyLmRhdGE7eGUodCxcIiRhdHRyc1wiLG8mJm8uYXR0cnN8fGUsbnVsbCwhMCkseGUodCxcIiRsaXN0ZW5lcnNcIixuLl9wYXJlbnRMaXN0ZW5lcnN8fGUsbnVsbCwhMCl9KG4pLFl0KG4sXCJiZWZvcmVDcmVhdGVcIiksZnVuY3Rpb24oZSl7dmFyIHQ9Y3QoZS4kb3B0aW9ucy5pbmplY3QsZSk7dCYmKCRlKCExKSxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3hlKGUsbix0W25dKX0pLCRlKCEwKSl9KG4pLHZuKG4pLGZ1bmN0aW9uKGUpe3ZhciB0PWUuJG9wdGlvbnMucHJvdmlkZTt0JiYoZS5fcHJvdmlkZWQ9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90LmNhbGwoZSk6dCl9KG4pLFl0KG4sXCJjcmVhdGVkXCIpLG4uJG9wdGlvbnMuZWwmJm4uJG1vdW50KG4uJG9wdGlvbnMuZWwpfX0od24pLGZ1bmN0aW9uKGUpe3ZhciB0PXtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YX19LG49e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcm9wc319O09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSxcIiRkYXRhXCIsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLFwiJHByb3BzXCIsbiksZS5wcm90b3R5cGUuJHNldD1rZSxlLnByb3RvdHlwZS4kZGVsZXRlPUFlLGUucHJvdG90eXBlLiR3YXRjaD1mdW5jdGlvbihlLHQsbil7aWYocyh0KSlyZXR1cm4gX24odGhpcyxlLHQsbik7KG49bnx8e30pLnVzZXI9ITA7dmFyIHI9bmV3IGZuKHRoaXMsZSx0LG4pO2lmKG4uaW1tZWRpYXRlKXRyeXt0LmNhbGwodGhpcyxyLnZhbHVlKX1jYXRjaChlKXtSZShlLHRoaXMsJ2NhbGxiYWNrIGZvciBpbW1lZGlhdGUgd2F0Y2hlciBcIicrci5leHByZXNzaW9uKydcIicpfXJldHVybiBmdW5jdGlvbigpe3IudGVhcmRvd24oKX19fSh3biksZnVuY3Rpb24oZSl7dmFyIHQ9L15ob29rOi87ZS5wcm90b3R5cGUuJG9uPWZ1bmN0aW9uKGUsbil7dmFyIHI9dGhpcztpZihBcnJheS5pc0FycmF5KGUpKWZvcih2YXIgaT0wLG89ZS5sZW5ndGg7aTxvO2krKylyLiRvbihlW2ldLG4pO2Vsc2Uoci5fZXZlbnRzW2VdfHwoci5fZXZlbnRzW2VdPVtdKSkucHVzaChuKSx0LnRlc3QoZSkmJihyLl9oYXNIb29rRXZlbnQ9ITApO3JldHVybiByfSxlLnByb3RvdHlwZS4kb25jZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7ZnVuY3Rpb24gcigpe24uJG9mZihlLHIpLHQuYXBwbHkobixhcmd1bWVudHMpfXJldHVybiByLmZuPXQsbi4kb24oZSxyKSxufSxlLnByb3RvdHlwZS4kb2ZmPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbi5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksbjtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspbi4kb2ZmKGVbcl0sdCk7cmV0dXJuIG59dmFyIG8sYT1uLl9ldmVudHNbZV07aWYoIWEpcmV0dXJuIG47aWYoIXQpcmV0dXJuIG4uX2V2ZW50c1tlXT1udWxsLG47Zm9yKHZhciBzPWEubGVuZ3RoO3MtLTspaWYoKG89YVtzXSk9PT10fHxvLmZuPT09dCl7YS5zcGxpY2UocywxKTticmVha31yZXR1cm4gbn0sZS5wcm90b3R5cGUuJGVtaXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZXZlbnRzW2VdO2lmKHQpe3Q9dC5sZW5ndGg+MT9rKHQpOnQ7Zm9yKHZhciBuPWsoYXJndW1lbnRzLDEpLHI9J2V2ZW50IGhhbmRsZXIgZm9yIFwiJytlKydcIicsaT0wLG89dC5sZW5ndGg7aTxvO2krKylIZSh0W2ldLHRoaXMsbix0aGlzLHIpfXJldHVybiB0aGlzfX0od24pLGZ1bmN0aW9uKGUpe2UucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9bi4kZWwsaT1uLl92bm9kZSxvPVp0KG4pO24uX3Zub2RlPWUsbi4kZWw9aT9uLl9fcGF0Y2hfXyhpLGUpOm4uX19wYXRjaF9fKG4uJGVsLGUsdCwhMSksbygpLHImJihyLl9fdnVlX189bnVsbCksbi4kZWwmJihuLiRlbC5fX3Z1ZV9fPW4pLG4uJHZub2RlJiZuLiRwYXJlbnQmJm4uJHZub2RlPT09bi4kcGFyZW50Ll92bm9kZSYmKG4uJHBhcmVudC4kZWw9bi4kZWwpfSxlLnByb3RvdHlwZS4kZm9yY2VVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl93YXRjaGVyJiZ0aGlzLl93YXRjaGVyLnVwZGF0ZSgpfSxlLnByb3RvdHlwZS4kZGVzdHJveT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYoIWUuX2lzQmVpbmdEZXN0cm95ZWQpe1l0KGUsXCJiZWZvcmVEZXN0cm95XCIpLGUuX2lzQmVpbmdEZXN0cm95ZWQ9ITA7dmFyIHQ9ZS4kcGFyZW50OyF0fHx0Ll9pc0JlaW5nRGVzdHJveWVkfHxlLiRvcHRpb25zLmFic3RyYWN0fHxoKHQuJGNoaWxkcmVuLGUpLGUuX3dhdGNoZXImJmUuX3dhdGNoZXIudGVhcmRvd24oKTtmb3IodmFyIG49ZS5fd2F0Y2hlcnMubGVuZ3RoO24tLTspZS5fd2F0Y2hlcnNbbl0udGVhcmRvd24oKTtlLl9kYXRhLl9fb2JfXyYmZS5fZGF0YS5fX29iX18udm1Db3VudC0tLGUuX2lzRGVzdHJveWVkPSEwLGUuX19wYXRjaF9fKGUuX3Zub2RlLG51bGwpLFl0KGUsXCJkZXN0cm95ZWRcIiksZS4kb2ZmKCksZS4kZWwmJihlLiRlbC5fX3Z1ZV9fPW51bGwpLGUuJHZub2RlJiYoZS4kdm5vZGUucGFyZW50PW51bGwpfX19KHduKSxmdW5jdGlvbihlKXtTdChlLnByb3RvdHlwZSksZS5wcm90b3R5cGUuJG5leHRUaWNrPWZ1bmN0aW9uKGUpe3JldHVybiBZZShlLHRoaXMpfSxlLnByb3RvdHlwZS5fcmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLG49dC4kb3B0aW9ucyxyPW4ucmVuZGVyLGk9bi5fcGFyZW50Vm5vZGU7aSYmKHQuJHNjb3BlZFNsb3RzPWZ0KGkuZGF0YS5zY29wZWRTbG90cyx0LiRzbG90cyx0LiRzY29wZWRTbG90cykpLHQuJHZub2RlPWk7dHJ5e0h0PXQsZT1yLmNhbGwodC5fcmVuZGVyUHJveHksdC4kY3JlYXRlRWxlbWVudCl9Y2F0Y2gobil7UmUobix0LFwicmVuZGVyXCIpLGU9dC5fdm5vZGV9ZmluYWxseXtIdD1udWxsfXJldHVybiBBcnJheS5pc0FycmF5KGUpJiYxPT09ZS5sZW5ndGgmJihlPWVbMF0pLGUgaW5zdGFuY2VvZiBwZXx8KGU9dmUoKSksZS5wYXJlbnQ9aSxlfX0od24pO3ZhciBTbj1bU3RyaW5nLFJlZ0V4cCxBcnJheV0sVG49e0tlZXBBbGl2ZTp7bmFtZTpcImtlZXAtYWxpdmVcIixhYnN0cmFjdDohMCxwcm9wczp7aW5jbHVkZTpTbixleGNsdWRlOlNuLG1heDpbU3RyaW5nLE51bWJlcl19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmNhY2hlPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5rZXlzPVtdfSxkZXN0cm95ZWQ6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcy5jYWNoZSlPbih0aGlzLmNhY2hlLGUsdGhpcy5rZXlzKX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy4kd2F0Y2goXCJpbmNsdWRlXCIsZnVuY3Rpb24odCl7QW4oZSxmdW5jdGlvbihlKXtyZXR1cm4ga24odCxlKX0pfSksdGhpcy4kd2F0Y2goXCJleGNsdWRlXCIsZnVuY3Rpb24odCl7QW4oZSxmdW5jdGlvbihlKXtyZXR1cm4ha24odCxlKX0pfSl9LHJlbmRlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJHNsb3RzLmRlZmF1bHQsdD16dChlKSxuPXQmJnQuY29tcG9uZW50T3B0aW9ucztpZihuKXt2YXIgcj14bihuKSxpPXRoaXMuaW5jbHVkZSxvPXRoaXMuZXhjbHVkZTtpZihpJiYoIXJ8fCFrbihpLHIpKXx8byYmciYma24obyxyKSlyZXR1cm4gdDt2YXIgYT10aGlzLmNhY2hlLHM9dGhpcy5rZXlzLGM9bnVsbD09dC5rZXk/bi5DdG9yLmNpZCsobi50YWc/XCI6OlwiK24udGFnOlwiXCIpOnQua2V5O2FbY10/KHQuY29tcG9uZW50SW5zdGFuY2U9YVtjXS5jb21wb25lbnRJbnN0YW5jZSxoKHMsYykscy5wdXNoKGMpKTooYVtjXT10LHMucHVzaChjKSx0aGlzLm1heCYmcy5sZW5ndGg+cGFyc2VJbnQodGhpcy5tYXgpJiZPbihhLHNbMF0scyx0aGlzLl92bm9kZSkpLHQuZGF0YS5rZWVwQWxpdmU9ITB9cmV0dXJuIHR8fGUmJmVbMF19fX07IWZ1bmN0aW9uKGUpe3ZhciB0PXtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRn19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiY29uZmlnXCIsdCksZS51dGlsPXt3YXJuOmFlLGV4dGVuZDpBLG1lcmdlT3B0aW9uczpEZSxkZWZpbmVSZWFjdGl2ZTp4ZX0sZS5zZXQ9a2UsZS5kZWxldGU9QWUsZS5uZXh0VGljaz1ZZSxlLm9ic2VydmFibGU9ZnVuY3Rpb24oZSl7cmV0dXJuIENlKGUpLGV9LGUub3B0aW9ucz1PYmplY3QuY3JlYXRlKG51bGwpLE0uZm9yRWFjaChmdW5jdGlvbih0KXtlLm9wdGlvbnNbdCtcInNcIl09T2JqZWN0LmNyZWF0ZShudWxsKX0pLGUub3B0aW9ucy5fYmFzZT1lLEEoZS5vcHRpb25zLmNvbXBvbmVudHMsVG4pLGZ1bmN0aW9uKGUpe2UudXNlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2luc3RhbGxlZFBsdWdpbnN8fCh0aGlzLl9pbnN0YWxsZWRQbHVnaW5zPVtdKTtpZih0LmluZGV4T2YoZSk+LTEpcmV0dXJuIHRoaXM7dmFyIG49ayhhcmd1bWVudHMsMSk7cmV0dXJuIG4udW5zaGlmdCh0aGlzKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmluc3RhbGw/ZS5pbnN0YWxsLmFwcGx5KGUsbik6XCJmdW5jdGlvblwiPT10eXBlb2YgZSYmZS5hcHBseShudWxsLG4pLHQucHVzaChlKSx0aGlzfX0oZSksZnVuY3Rpb24oZSl7ZS5taXhpbj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vcHRpb25zPURlKHRoaXMub3B0aW9ucyxlKSx0aGlzfX0oZSksQ24oZSksZnVuY3Rpb24oZSl7TS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF09ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbj8oXCJjb21wb25lbnRcIj09PXQmJnMobikmJihuLm5hbWU9bi5uYW1lfHxlLG49dGhpcy5vcHRpb25zLl9iYXNlLmV4dGVuZChuKSksXCJkaXJlY3RpdmVcIj09PXQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIG4mJihuPXtiaW5kOm4sdXBkYXRlOm59KSx0aGlzLm9wdGlvbnNbdCtcInNcIl1bZV09bixuKTp0aGlzLm9wdGlvbnNbdCtcInNcIl1bZV19fSl9KGUpfSh3biksT2JqZWN0LmRlZmluZVByb3BlcnR5KHduLnByb3RvdHlwZSxcIiRpc1NlcnZlclwiLHtnZXQ6dGV9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkod24ucHJvdG90eXBlLFwiJHNzckNvbnRleHRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHZub2RlJiZ0aGlzLiR2bm9kZS5zc3JDb250ZXh0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3bixcIkZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0XCIse3ZhbHVlOlR0fSksd24udmVyc2lvbj1cIjIuNi4xMFwiO3ZhciBFbj1wKFwic3R5bGUsY2xhc3NcIiksTm49cChcImlucHV0LHRleHRhcmVhLG9wdGlvbixzZWxlY3QscHJvZ3Jlc3NcIiksam49ZnVuY3Rpb24oZSx0LG4pe3JldHVyblwidmFsdWVcIj09PW4mJk5uKGUpJiZcImJ1dHRvblwiIT09dHx8XCJzZWxlY3RlZFwiPT09biYmXCJvcHRpb25cIj09PWV8fFwiY2hlY2tlZFwiPT09biYmXCJpbnB1dFwiPT09ZXx8XCJtdXRlZFwiPT09biYmXCJ2aWRlb1wiPT09ZX0sRG49cChcImNvbnRlbnRlZGl0YWJsZSxkcmFnZ2FibGUsc3BlbGxjaGVja1wiKSxMbj1wKFwiZXZlbnRzLGNhcmV0LHR5cGluZyxwbGFpbnRleHQtb25seVwiKSxNbj1mdW5jdGlvbihlLHQpe3JldHVybiBIbih0KXx8XCJmYWxzZVwiPT09dD9cImZhbHNlXCI6XCJjb250ZW50ZWRpdGFibGVcIj09PWUmJkxuKHQpP3Q6XCJ0cnVlXCJ9LEluPXAoXCJhbGxvd2Z1bGxzY3JlZW4sYXN5bmMsYXV0b2ZvY3VzLGF1dG9wbGF5LGNoZWNrZWQsY29tcGFjdCxjb250cm9scyxkZWNsYXJlLGRlZmF1bHQsZGVmYXVsdGNoZWNrZWQsZGVmYXVsdG11dGVkLGRlZmF1bHRzZWxlY3RlZCxkZWZlcixkaXNhYmxlZCxlbmFibGVkLGZvcm1ub3ZhbGlkYXRlLGhpZGRlbixpbmRldGVybWluYXRlLGluZXJ0LGlzbWFwLGl0ZW1zY29wZSxsb29wLG11bHRpcGxlLG11dGVkLG5vaHJlZixub3Jlc2l6ZSxub3NoYWRlLG5vdmFsaWRhdGUsbm93cmFwLG9wZW4scGF1c2VvbmV4aXQscmVhZG9ubHkscmVxdWlyZWQscmV2ZXJzZWQsc2NvcGVkLHNlYW1sZXNzLHNlbGVjdGVkLHNvcnRhYmxlLHRyYW5zbGF0ZSx0cnVlc3BlZWQsdHlwZW11c3RtYXRjaCx2aXNpYmxlXCIpLEZuPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFBuPWZ1bmN0aW9uKGUpe3JldHVyblwiOlwiPT09ZS5jaGFyQXQoNSkmJlwieGxpbmtcIj09PWUuc2xpY2UoMCw1KX0sUm49ZnVuY3Rpb24oZSl7cmV0dXJuIFBuKGUpP2Uuc2xpY2UoNixlLmxlbmd0aCk6XCJcIn0sSG49ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWV8fCExPT09ZX07ZnVuY3Rpb24gQm4oZSl7Zm9yKHZhciB0PWUuZGF0YSxyPWUsaT1lO24oaS5jb21wb25lbnRJbnN0YW5jZSk7KShpPWkuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlKSYmaS5kYXRhJiYodD1VbihpLmRhdGEsdCkpO2Zvcig7bihyPXIucGFyZW50KTspciYmci5kYXRhJiYodD1Vbih0LHIuZGF0YSkpO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKG4oZSl8fG4odCkpcmV0dXJuIHpuKGUsVm4odCkpO3JldHVyblwiXCJ9KHQuc3RhdGljQ2xhc3MsdC5jbGFzcyl9ZnVuY3Rpb24gVW4oZSx0KXtyZXR1cm57c3RhdGljQ2xhc3M6em4oZS5zdGF0aWNDbGFzcyx0LnN0YXRpY0NsYXNzKSxjbGFzczpuKGUuY2xhc3MpP1tlLmNsYXNzLHQuY2xhc3NdOnQuY2xhc3N9fWZ1bmN0aW9uIHpuKGUsdCl7cmV0dXJuIGU/dD9lK1wiIFwiK3Q6ZTp0fHxcIlwifWZ1bmN0aW9uIFZuKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2Z1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPVwiXCIsaT0wLG89ZS5sZW5ndGg7aTxvO2krKyluKHQ9Vm4oZVtpXSkpJiZcIlwiIT09dCYmKHImJihyKz1cIiBcIikscis9dCk7cmV0dXJuIHJ9KGUpOm8oZSk/ZnVuY3Rpb24oZSl7dmFyIHQ9XCJcIjtmb3IodmFyIG4gaW4gZSllW25dJiYodCYmKHQrPVwiIFwiKSx0Kz1uKTtyZXR1cm4gdH0oZSk6XCJzdHJpbmdcIj09dHlwZW9mIGU/ZTpcIlwifXZhciBLbj17c3ZnOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixtYXRoOlwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwifSxKbj1wKFwiaHRtbCxib2R5LGJhc2UsaGVhZCxsaW5rLG1ldGEsc3R5bGUsdGl0bGUsYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGZvb3RlcixoZWFkZXIsaDEsaDIsaDMsaDQsaDUsaDYsaGdyb3VwLG5hdixzZWN0aW9uLGRpdixkZCxkbCxkdCxmaWdjYXB0aW9uLGZpZ3VyZSxwaWN0dXJlLGhyLGltZyxsaSxtYWluLG9sLHAscHJlLHVsLGEsYixhYmJyLGJkaSxiZG8sYnIsY2l0ZSxjb2RlLGRhdGEsZGZuLGVtLGksa2JkLG1hcmsscSxycCxydCxydGMscnVieSxzLHNhbXAsc21hbGwsc3BhbixzdHJvbmcsc3ViLHN1cCx0aW1lLHUsdmFyLHdicixhcmVhLGF1ZGlvLG1hcCx0cmFjayx2aWRlbyxlbWJlZCxvYmplY3QscGFyYW0sc291cmNlLGNhbnZhcyxzY3JpcHQsbm9zY3JpcHQsZGVsLGlucyxjYXB0aW9uLGNvbCxjb2xncm91cCx0YWJsZSx0aGVhZCx0Ym9keSx0ZCx0aCx0cixidXR0b24sZGF0YWxpc3QsZmllbGRzZXQsZm9ybSxpbnB1dCxsYWJlbCxsZWdlbmQsbWV0ZXIsb3B0Z3JvdXAsb3B0aW9uLG91dHB1dCxwcm9ncmVzcyxzZWxlY3QsdGV4dGFyZWEsZGV0YWlscyxkaWFsb2csbWVudSxtZW51aXRlbSxzdW1tYXJ5LGNvbnRlbnQsZWxlbWVudCxzaGFkb3csdGVtcGxhdGUsYmxvY2txdW90ZSxpZnJhbWUsdGZvb3RcIikscW49cChcInN2ZyxhbmltYXRlLGNpcmNsZSxjbGlwcGF0aCxjdXJzb3IsZGVmcyxkZXNjLGVsbGlwc2UsZmlsdGVyLGZvbnQtZmFjZSxmb3JlaWduT2JqZWN0LGcsZ2x5cGgsaW1hZ2UsbGluZSxtYXJrZXIsbWFzayxtaXNzaW5nLWdseXBoLHBhdGgscGF0dGVybixwb2x5Z29uLHBvbHlsaW5lLHJlY3Qsc3dpdGNoLHN5bWJvbCx0ZXh0LHRleHRwYXRoLHRzcGFuLHVzZSx2aWV3XCIsITApLFduPWZ1bmN0aW9uKGUpe3JldHVybiBKbihlKXx8cW4oZSl9O2Z1bmN0aW9uIFpuKGUpe3JldHVybiBxbihlKT9cInN2Z1wiOlwibWF0aFwiPT09ZT9cIm1hdGhcIjp2b2lkIDB9dmFyIEduPU9iamVjdC5jcmVhdGUobnVsbCk7dmFyIFhuPXAoXCJ0ZXh0LG51bWJlcixwYXNzd29yZCxzZWFyY2gsZW1haWwsdGVsLHVybFwiKTtmdW5jdGlvbiBZbihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSl7dmFyIHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKTtyZXR1cm4gdHx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKX1yZXR1cm4gZX12YXIgUW49T2JqZWN0LmZyZWV6ZSh7Y3JlYXRlRWxlbWVudDpmdW5jdGlvbihlLHQpe3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSk7cmV0dXJuXCJzZWxlY3RcIiE9PWU/bjoodC5kYXRhJiZ0LmRhdGEuYXR0cnMmJnZvaWQgMCE9PXQuZGF0YS5hdHRycy5tdWx0aXBsZSYmbi5zZXRBdHRyaWJ1dGUoXCJtdWx0aXBsZVwiLFwibXVsdGlwbGVcIiksbil9LGNyZWF0ZUVsZW1lbnROUzpmdW5jdGlvbihlLHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoS25bZV0sdCl9LGNyZWF0ZVRleHROb2RlOmZ1bmN0aW9uKGUpe3JldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKX0sY3JlYXRlQ29tbWVudDpmdW5jdGlvbihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudChlKX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCxuKXtlLmluc2VydEJlZm9yZSh0LG4pfSxyZW1vdmVDaGlsZDpmdW5jdGlvbihlLHQpe2UucmVtb3ZlQ2hpbGQodCl9LGFwcGVuZENoaWxkOmZ1bmN0aW9uKGUsdCl7ZS5hcHBlbmRDaGlsZCh0KX0scGFyZW50Tm9kZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnROb2RlfSxuZXh0U2libGluZzpmdW5jdGlvbihlKXtyZXR1cm4gZS5uZXh0U2libGluZ30sdGFnTmFtZTpmdW5jdGlvbihlKXtyZXR1cm4gZS50YWdOYW1lfSxzZXRUZXh0Q29udGVudDpmdW5jdGlvbihlLHQpe2UudGV4dENvbnRlbnQ9dH0sc2V0U3R5bGVTY29wZTpmdW5jdGlvbihlLHQpe2Uuc2V0QXR0cmlidXRlKHQsXCJcIil9fSksZXI9e2NyZWF0ZTpmdW5jdGlvbihlLHQpe3RyKHQpfSx1cGRhdGU6ZnVuY3Rpb24oZSx0KXtlLmRhdGEucmVmIT09dC5kYXRhLnJlZiYmKHRyKGUsITApLHRyKHQpKX0sZGVzdHJveTpmdW5jdGlvbihlKXt0cihlLCEwKX19O2Z1bmN0aW9uIHRyKGUsdCl7dmFyIHI9ZS5kYXRhLnJlZjtpZihuKHIpKXt2YXIgaT1lLmNvbnRleHQsbz1lLmNvbXBvbmVudEluc3RhbmNlfHxlLmVsbSxhPWkuJHJlZnM7dD9BcnJheS5pc0FycmF5KGFbcl0pP2goYVtyXSxvKTphW3JdPT09byYmKGFbcl09dm9pZCAwKTplLmRhdGEucmVmSW5Gb3I/QXJyYXkuaXNBcnJheShhW3JdKT9hW3JdLmluZGV4T2Yobyk8MCYmYVtyXS5wdXNoKG8pOmFbcl09W29dOmFbcl09b319dmFyIG5yPW5ldyBwZShcIlwiLHt9LFtdKSxycj1bXCJjcmVhdGVcIixcImFjdGl2YXRlXCIsXCJ1cGRhdGVcIixcInJlbW92ZVwiLFwiZGVzdHJveVwiXTtmdW5jdGlvbiBpcihlLGkpe3JldHVybiBlLmtleT09PWkua2V5JiYoZS50YWc9PT1pLnRhZyYmZS5pc0NvbW1lbnQ9PT1pLmlzQ29tbWVudCYmbihlLmRhdGEpPT09bihpLmRhdGEpJiZmdW5jdGlvbihlLHQpe2lmKFwiaW5wdXRcIiE9PWUudGFnKXJldHVybiEwO3ZhciByLGk9bihyPWUuZGF0YSkmJm4ocj1yLmF0dHJzKSYmci50eXBlLG89bihyPXQuZGF0YSkmJm4ocj1yLmF0dHJzKSYmci50eXBlO3JldHVybiBpPT09b3x8WG4oaSkmJlhuKG8pfShlLGkpfHxyKGUuaXNBc3luY1BsYWNlaG9sZGVyKSYmZS5hc3luY0ZhY3Rvcnk9PT1pLmFzeW5jRmFjdG9yeSYmdChpLmFzeW5jRmFjdG9yeS5lcnJvcikpfWZ1bmN0aW9uIG9yKGUsdCxyKXt2YXIgaSxvLGE9e307Zm9yKGk9dDtpPD1yOysraSluKG89ZVtpXS5rZXkpJiYoYVtvXT1pKTtyZXR1cm4gYX12YXIgYXI9e2NyZWF0ZTpzcix1cGRhdGU6c3IsZGVzdHJveTpmdW5jdGlvbihlKXtzcihlLG5yKX19O2Z1bmN0aW9uIHNyKGUsdCl7KGUuZGF0YS5kaXJlY3RpdmVzfHx0LmRhdGEuZGlyZWN0aXZlcykmJmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG89ZT09PW5yLGE9dD09PW5yLHM9dXIoZS5kYXRhLmRpcmVjdGl2ZXMsZS5jb250ZXh0KSxjPXVyKHQuZGF0YS5kaXJlY3RpdmVzLHQuY29udGV4dCksdT1bXSxsPVtdO2ZvcihuIGluIGMpcj1zW25dLGk9Y1tuXSxyPyhpLm9sZFZhbHVlPXIudmFsdWUsaS5vbGRBcmc9ci5hcmcsZnIoaSxcInVwZGF0ZVwiLHQsZSksaS5kZWYmJmkuZGVmLmNvbXBvbmVudFVwZGF0ZWQmJmwucHVzaChpKSk6KGZyKGksXCJiaW5kXCIsdCxlKSxpLmRlZiYmaS5kZWYuaW5zZXJ0ZWQmJnUucHVzaChpKSk7aWYodS5sZW5ndGgpe3ZhciBmPWZ1bmN0aW9uKCl7Zm9yKHZhciBuPTA7bjx1Lmxlbmd0aDtuKyspZnIodVtuXSxcImluc2VydGVkXCIsdCxlKX07bz9pdCh0LFwiaW5zZXJ0XCIsZik6ZigpfWwubGVuZ3RoJiZpdCh0LFwicG9zdHBhdGNoXCIsZnVuY3Rpb24oKXtmb3IodmFyIG49MDtuPGwubGVuZ3RoO24rKylmcihsW25dLFwiY29tcG9uZW50VXBkYXRlZFwiLHQsZSl9KTtpZighbylmb3IobiBpbiBzKWNbbl18fGZyKHNbbl0sXCJ1bmJpbmRcIixlLGUsYSl9KGUsdCl9dmFyIGNyPU9iamVjdC5jcmVhdGUobnVsbCk7ZnVuY3Rpb24gdXIoZSx0KXt2YXIgbixyLGk9T2JqZWN0LmNyZWF0ZShudWxsKTtpZighZSlyZXR1cm4gaTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKShyPWVbbl0pLm1vZGlmaWVyc3x8KHIubW9kaWZpZXJzPWNyKSxpW2xyKHIpXT1yLHIuZGVmPUxlKHQuJG9wdGlvbnMsXCJkaXJlY3RpdmVzXCIsci5uYW1lKTtyZXR1cm4gaX1mdW5jdGlvbiBscihlKXtyZXR1cm4gZS5yYXdOYW1lfHxlLm5hbWUrXCIuXCIrT2JqZWN0LmtleXMoZS5tb2RpZmllcnN8fHt9KS5qb2luKFwiLlwiKX1mdW5jdGlvbiBmcihlLHQsbixyLGkpe3ZhciBvPWUuZGVmJiZlLmRlZlt0XTtpZihvKXRyeXtvKG4uZWxtLGUsbixyLGkpfWNhdGNoKHIpe1JlKHIsbi5jb250ZXh0LFwiZGlyZWN0aXZlIFwiK2UubmFtZStcIiBcIit0K1wiIGhvb2tcIil9fXZhciBwcj1bZXIsYXJdO2Z1bmN0aW9uIGRyKGUscil7dmFyIGk9ci5jb21wb25lbnRPcHRpb25zO2lmKCEobihpKSYmITE9PT1pLkN0b3Iub3B0aW9ucy5pbmhlcml0QXR0cnN8fHQoZS5kYXRhLmF0dHJzKSYmdChyLmRhdGEuYXR0cnMpKSl7dmFyIG8sYSxzPXIuZWxtLGM9ZS5kYXRhLmF0dHJzfHx7fSx1PXIuZGF0YS5hdHRyc3x8e307Zm9yKG8gaW4gbih1Ll9fb2JfXykmJih1PXIuZGF0YS5hdHRycz1BKHt9LHUpKSx1KWE9dVtvXSxjW29dIT09YSYmdnIocyxvLGEpO2ZvcihvIGluKHF8fFopJiZ1LnZhbHVlIT09Yy52YWx1ZSYmdnIocyxcInZhbHVlXCIsdS52YWx1ZSksYyl0KHVbb10pJiYoUG4obyk/cy5yZW1vdmVBdHRyaWJ1dGVOUyhGbixSbihvKSk6RG4obyl8fHMucmVtb3ZlQXR0cmlidXRlKG8pKX19ZnVuY3Rpb24gdnIoZSx0LG4pe2UudGFnTmFtZS5pbmRleE9mKFwiLVwiKT4tMT9ocihlLHQsbik6SW4odCk/SG4obik/ZS5yZW1vdmVBdHRyaWJ1dGUodCk6KG49XCJhbGxvd2Z1bGxzY3JlZW5cIj09PXQmJlwiRU1CRURcIj09PWUudGFnTmFtZT9cInRydWVcIjp0LGUuc2V0QXR0cmlidXRlKHQsbikpOkRuKHQpP2Uuc2V0QXR0cmlidXRlKHQsTW4odCxuKSk6UG4odCk/SG4obik/ZS5yZW1vdmVBdHRyaWJ1dGVOUyhGbixSbih0KSk6ZS5zZXRBdHRyaWJ1dGVOUyhGbix0LG4pOmhyKGUsdCxuKX1mdW5jdGlvbiBocihlLHQsbil7aWYoSG4obikpZS5yZW1vdmVBdHRyaWJ1dGUodCk7ZWxzZXtpZihxJiYhVyYmXCJURVhUQVJFQVwiPT09ZS50YWdOYW1lJiZcInBsYWNlaG9sZGVyXCI9PT10JiZcIlwiIT09biYmIWUuX19pZXBoKXt2YXIgcj1mdW5jdGlvbih0KXt0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImlucHV0XCIscil9O2UuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsciksZS5fX2llcGg9ITB9ZS5zZXRBdHRyaWJ1dGUodCxuKX19dmFyIG1yPXtjcmVhdGU6ZHIsdXBkYXRlOmRyfTtmdW5jdGlvbiB5cihlLHIpe3ZhciBpPXIuZWxtLG89ci5kYXRhLGE9ZS5kYXRhO2lmKCEodChvLnN0YXRpY0NsYXNzKSYmdChvLmNsYXNzKSYmKHQoYSl8fHQoYS5zdGF0aWNDbGFzcykmJnQoYS5jbGFzcykpKSl7dmFyIHM9Qm4ociksYz1pLl90cmFuc2l0aW9uQ2xhc3NlcztuKGMpJiYocz16bihzLFZuKGMpKSkscyE9PWkuX3ByZXZDbGFzcyYmKGkuc2V0QXR0cmlidXRlKFwiY2xhc3NcIixzKSxpLl9wcmV2Q2xhc3M9cyl9fXZhciBncixfcixiciwkcix3cixDcix4cj17Y3JlYXRlOnlyLHVwZGF0ZTp5cn0sa3I9L1tcXHcpLitcXC1fJFxcXV0vO2Z1bmN0aW9uIEFyKGUpe3ZhciB0LG4scixpLG8sYT0hMSxzPSExLGM9ITEsdT0hMSxsPTAsZj0wLHA9MCxkPTA7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKylpZihuPXQsdD1lLmNoYXJDb2RlQXQociksYSkzOT09PXQmJjkyIT09biYmKGE9ITEpO2Vsc2UgaWYocykzND09PXQmJjkyIT09biYmKHM9ITEpO2Vsc2UgaWYoYyk5Nj09PXQmJjkyIT09biYmKGM9ITEpO2Vsc2UgaWYodSk0Nz09PXQmJjkyIT09biYmKHU9ITEpO2Vsc2UgaWYoMTI0IT09dHx8MTI0PT09ZS5jaGFyQ29kZUF0KHIrMSl8fDEyND09PWUuY2hhckNvZGVBdChyLTEpfHxsfHxmfHxwKXtzd2l0Y2godCl7Y2FzZSAzNDpzPSEwO2JyZWFrO2Nhc2UgMzk6YT0hMDticmVhaztjYXNlIDk2OmM9ITA7YnJlYWs7Y2FzZSA0MDpwKys7YnJlYWs7Y2FzZSA0MTpwLS07YnJlYWs7Y2FzZSA5MTpmKys7YnJlYWs7Y2FzZSA5MzpmLS07YnJlYWs7Y2FzZSAxMjM6bCsrO2JyZWFrO2Nhc2UgMTI1OmwtLX1pZig0Nz09PXQpe2Zvcih2YXIgdj1yLTEsaD12b2lkIDA7dj49MCYmXCIgXCI9PT0oaD1lLmNoYXJBdCh2KSk7di0tKTtoJiZrci50ZXN0KGgpfHwodT0hMCl9fWVsc2Ugdm9pZCAwPT09aT8oZD1yKzEsaT1lLnNsaWNlKDAscikudHJpbSgpKTptKCk7ZnVuY3Rpb24gbSgpeyhvfHwobz1bXSkpLnB1c2goZS5zbGljZShkLHIpLnRyaW0oKSksZD1yKzF9aWYodm9pZCAwPT09aT9pPWUuc2xpY2UoMCxyKS50cmltKCk6MCE9PWQmJm0oKSxvKWZvcihyPTA7cjxvLmxlbmd0aDtyKyspaT1PcihpLG9bcl0pO3JldHVybiBpfWZ1bmN0aW9uIE9yKGUsdCl7dmFyIG49dC5pbmRleE9mKFwiKFwiKTtpZihuPDApcmV0dXJuJ19mKFwiJyt0KydcIikoJytlK1wiKVwiO3ZhciByPXQuc2xpY2UoMCxuKSxpPXQuc2xpY2UobisxKTtyZXR1cm4nX2YoXCInK3IrJ1wiKSgnK2UrKFwiKVwiIT09aT9cIixcIitpOmkpfWZ1bmN0aW9uIFNyKGUsdCl7Y29uc29sZS5lcnJvcihcIltWdWUgY29tcGlsZXJdOiBcIitlKX1mdW5jdGlvbiBUcihlLHQpe3JldHVybiBlP2UubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlW3RdfSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlfSk6W119ZnVuY3Rpb24gRXIoZSx0LG4scixpKXsoZS5wcm9wc3x8KGUucHJvcHM9W10pKS5wdXNoKFJyKHtuYW1lOnQsdmFsdWU6bixkeW5hbWljOml9LHIpKSxlLnBsYWluPSExfWZ1bmN0aW9uIE5yKGUsdCxuLHIsaSl7KGk/ZS5keW5hbWljQXR0cnN8fChlLmR5bmFtaWNBdHRycz1bXSk6ZS5hdHRyc3x8KGUuYXR0cnM9W10pKS5wdXNoKFJyKHtuYW1lOnQsdmFsdWU6bixkeW5hbWljOml9LHIpKSxlLnBsYWluPSExfWZ1bmN0aW9uIGpyKGUsdCxuLHIpe2UuYXR0cnNNYXBbdF09bixlLmF0dHJzTGlzdC5wdXNoKFJyKHtuYW1lOnQsdmFsdWU6bn0scikpfWZ1bmN0aW9uIERyKGUsdCxuLHIsaSxvLGEscyl7KGUuZGlyZWN0aXZlc3x8KGUuZGlyZWN0aXZlcz1bXSkpLnB1c2goUnIoe25hbWU6dCxyYXdOYW1lOm4sdmFsdWU6cixhcmc6aSxpc0R5bmFtaWNBcmc6byxtb2RpZmllcnM6YX0scykpLGUucGxhaW49ITF9ZnVuY3Rpb24gTHIoZSx0LG4pe3JldHVybiBuP1wiX3AoXCIrdCsnLFwiJytlKydcIiknOmUrdH1mdW5jdGlvbiBNcih0LG4scixpLG8sYSxzLGMpe3ZhciB1OyhpPWl8fGUpLnJpZ2h0P2M/bj1cIihcIituK1wiKT09PSdjbGljayc/J2NvbnRleHRtZW51JzooXCIrbitcIilcIjpcImNsaWNrXCI9PT1uJiYobj1cImNvbnRleHRtZW51XCIsZGVsZXRlIGkucmlnaHQpOmkubWlkZGxlJiYoYz9uPVwiKFwiK24rXCIpPT09J2NsaWNrJz8nbW91c2V1cCc6KFwiK24rXCIpXCI6XCJjbGlja1wiPT09biYmKG49XCJtb3VzZXVwXCIpKSxpLmNhcHR1cmUmJihkZWxldGUgaS5jYXB0dXJlLG49THIoXCIhXCIsbixjKSksaS5vbmNlJiYoZGVsZXRlIGkub25jZSxuPUxyKFwiflwiLG4sYykpLGkucGFzc2l2ZSYmKGRlbGV0ZSBpLnBhc3NpdmUsbj1McihcIiZcIixuLGMpKSxpLm5hdGl2ZT8oZGVsZXRlIGkubmF0aXZlLHU9dC5uYXRpdmVFdmVudHN8fCh0Lm5hdGl2ZUV2ZW50cz17fSkpOnU9dC5ldmVudHN8fCh0LmV2ZW50cz17fSk7dmFyIGw9UnIoe3ZhbHVlOnIudHJpbSgpLGR5bmFtaWM6Y30scyk7aSE9PWUmJihsLm1vZGlmaWVycz1pKTt2YXIgZj11W25dO0FycmF5LmlzQXJyYXkoZik/bz9mLnVuc2hpZnQobCk6Zi5wdXNoKGwpOnVbbl09Zj9vP1tsLGZdOltmLGxdOmwsdC5wbGFpbj0hMX1mdW5jdGlvbiBJcihlLHQsbil7dmFyIHI9RnIoZSxcIjpcIit0KXx8RnIoZSxcInYtYmluZDpcIit0KTtpZihudWxsIT1yKXJldHVybiBBcihyKTtpZighMSE9PW4pe3ZhciBpPUZyKGUsdCk7aWYobnVsbCE9aSlyZXR1cm4gSlNPTi5zdHJpbmdpZnkoaSl9fWZ1bmN0aW9uIEZyKGUsdCxuKXt2YXIgcjtpZihudWxsIT0ocj1lLmF0dHJzTWFwW3RdKSlmb3IodmFyIGk9ZS5hdHRyc0xpc3Qsbz0wLGE9aS5sZW5ndGg7bzxhO28rKylpZihpW29dLm5hbWU9PT10KXtpLnNwbGljZShvLDEpO2JyZWFrfXJldHVybiBuJiZkZWxldGUgZS5hdHRyc01hcFt0XSxyfWZ1bmN0aW9uIFByKGUsdCl7Zm9yKHZhciBuPWUuYXR0cnNMaXN0LHI9MCxpPW4ubGVuZ3RoO3I8aTtyKyspe3ZhciBvPW5bcl07aWYodC50ZXN0KG8ubmFtZSkpcmV0dXJuIG4uc3BsaWNlKHIsMSksb319ZnVuY3Rpb24gUnIoZSx0KXtyZXR1cm4gdCYmKG51bGwhPXQuc3RhcnQmJihlLnN0YXJ0PXQuc3RhcnQpLG51bGwhPXQuZW5kJiYoZS5lbmQ9dC5lbmQpKSxlfWZ1bmN0aW9uIEhyKGUsdCxuKXt2YXIgcj1ufHx7fSxpPXIubnVtYmVyLG89XCIkJHZcIjtyLnRyaW0mJihvPVwiKHR5cGVvZiAkJHYgPT09ICdzdHJpbmcnPyAkJHYudHJpbSgpOiAkJHYpXCIpLGkmJihvPVwiX24oXCIrbytcIilcIik7dmFyIGE9QnIodCxvKTtlLm1vZGVsPXt2YWx1ZTpcIihcIit0K1wiKVwiLGV4cHJlc3Npb246SlNPTi5zdHJpbmdpZnkodCksY2FsbGJhY2s6XCJmdW5jdGlvbiAoJCR2KSB7XCIrYStcIn1cIn19ZnVuY3Rpb24gQnIoZSx0KXt2YXIgbj1mdW5jdGlvbihlKXtpZihlPWUudHJpbSgpLGdyPWUubGVuZ3RoLGUuaW5kZXhPZihcIltcIik8MHx8ZS5sYXN0SW5kZXhPZihcIl1cIik8Z3ItMSlyZXR1cm4oJHI9ZS5sYXN0SW5kZXhPZihcIi5cIikpPi0xP3tleHA6ZS5zbGljZSgwLCRyKSxrZXk6J1wiJytlLnNsaWNlKCRyKzEpKydcIid9OntleHA6ZSxrZXk6bnVsbH07X3I9ZSwkcj13cj1Dcj0wO2Zvcig7IXpyKCk7KVZyKGJyPVVyKCkpP0pyKGJyKTo5MT09PWJyJiZLcihicik7cmV0dXJue2V4cDplLnNsaWNlKDAsd3IpLGtleTplLnNsaWNlKHdyKzEsQ3IpfX0oZSk7cmV0dXJuIG51bGw9PT1uLmtleT9lK1wiPVwiK3Q6XCIkc2V0KFwiK24uZXhwK1wiLCBcIituLmtleStcIiwgXCIrdCtcIilcIn1mdW5jdGlvbiBVcigpe3JldHVybiBfci5jaGFyQ29kZUF0KCsrJHIpfWZ1bmN0aW9uIHpyKCl7cmV0dXJuICRyPj1ncn1mdW5jdGlvbiBWcihlKXtyZXR1cm4gMzQ9PT1lfHwzOT09PWV9ZnVuY3Rpb24gS3IoZSl7dmFyIHQ9MTtmb3Iod3I9JHI7IXpyKCk7KWlmKFZyKGU9VXIoKSkpSnIoZSk7ZWxzZSBpZig5MT09PWUmJnQrKyw5Mz09PWUmJnQtLSwwPT09dCl7Q3I9JHI7YnJlYWt9fWZ1bmN0aW9uIEpyKGUpe2Zvcih2YXIgdD1lOyF6cigpJiYoZT1VcigpKSE9PXQ7KTt9dmFyIHFyLFdyPVwiX19yXCIsWnI9XCJfX2NcIjtmdW5jdGlvbiBHcihlLHQsbil7dmFyIHI9cXI7cmV0dXJuIGZ1bmN0aW9uIGkoKXtudWxsIT09dC5hcHBseShudWxsLGFyZ3VtZW50cykmJlFyKGUsaSxuLHIpfX12YXIgWHI9VmUmJiEoWCYmTnVtYmVyKFhbMV0pPD01Myk7ZnVuY3Rpb24gWXIoZSx0LG4scil7aWYoWHIpe3ZhciBpPWFuLG89dDt0PW8uX3dyYXBwZXI9ZnVuY3Rpb24oZSl7aWYoZS50YXJnZXQ9PT1lLmN1cnJlbnRUYXJnZXR8fGUudGltZVN0YW1wPj1pfHxlLnRpbWVTdGFtcDw9MHx8ZS50YXJnZXQub3duZXJEb2N1bWVudCE9PWRvY3VtZW50KXJldHVybiBvLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19cXIuYWRkRXZlbnRMaXN0ZW5lcihlLHQsUT97Y2FwdHVyZTpuLHBhc3NpdmU6cn06bil9ZnVuY3Rpb24gUXIoZSx0LG4scil7KHJ8fHFyKS5yZW1vdmVFdmVudExpc3RlbmVyKGUsdC5fd3JhcHBlcnx8dCxuKX1mdW5jdGlvbiBlaShlLHIpe2lmKCF0KGUuZGF0YS5vbil8fCF0KHIuZGF0YS5vbikpe3ZhciBpPXIuZGF0YS5vbnx8e30sbz1lLmRhdGEub258fHt9O3FyPXIuZWxtLGZ1bmN0aW9uKGUpe2lmKG4oZVtXcl0pKXt2YXIgdD1xP1wiY2hhbmdlXCI6XCJpbnB1dFwiO2VbdF09W10uY29uY2F0KGVbV3JdLGVbdF18fFtdKSxkZWxldGUgZVtXcl19bihlW1pyXSkmJihlLmNoYW5nZT1bXS5jb25jYXQoZVtacl0sZS5jaGFuZ2V8fFtdKSxkZWxldGUgZVtacl0pfShpKSxydChpLG8sWXIsUXIsR3Isci5jb250ZXh0KSxxcj12b2lkIDB9fXZhciB0aSxuaT17Y3JlYXRlOmVpLHVwZGF0ZTplaX07ZnVuY3Rpb24gcmkoZSxyKXtpZighdChlLmRhdGEuZG9tUHJvcHMpfHwhdChyLmRhdGEuZG9tUHJvcHMpKXt2YXIgaSxvLGE9ci5lbG0scz1lLmRhdGEuZG9tUHJvcHN8fHt9LGM9ci5kYXRhLmRvbVByb3BzfHx7fTtmb3IoaSBpbiBuKGMuX19vYl9fKSYmKGM9ci5kYXRhLmRvbVByb3BzPUEoe30sYykpLHMpaSBpbiBjfHwoYVtpXT1cIlwiKTtmb3IoaSBpbiBjKXtpZihvPWNbaV0sXCJ0ZXh0Q29udGVudFwiPT09aXx8XCJpbm5lckhUTUxcIj09PWkpe2lmKHIuY2hpbGRyZW4mJihyLmNoaWxkcmVuLmxlbmd0aD0wKSxvPT09c1tpXSljb250aW51ZTsxPT09YS5jaGlsZE5vZGVzLmxlbmd0aCYmYS5yZW1vdmVDaGlsZChhLmNoaWxkTm9kZXNbMF0pfWlmKFwidmFsdWVcIj09PWkmJlwiUFJPR1JFU1NcIiE9PWEudGFnTmFtZSl7YS5fdmFsdWU9bzt2YXIgdT10KG8pP1wiXCI6U3RyaW5nKG8pO2lpKGEsdSkmJihhLnZhbHVlPXUpfWVsc2UgaWYoXCJpbm5lckhUTUxcIj09PWkmJnFuKGEudGFnTmFtZSkmJnQoYS5pbm5lckhUTUwpKXsodGk9dGl8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLmlubmVySFRNTD1cIjxzdmc+XCIrbytcIjwvc3ZnPlwiO2Zvcih2YXIgbD10aS5maXJzdENoaWxkO2EuZmlyc3RDaGlsZDspYS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpO2Zvcig7bC5maXJzdENoaWxkOylhLmFwcGVuZENoaWxkKGwuZmlyc3RDaGlsZCl9ZWxzZSBpZihvIT09c1tpXSl0cnl7YVtpXT1vfWNhdGNoKGUpe319fX1mdW5jdGlvbiBpaShlLHQpe3JldHVybiFlLmNvbXBvc2luZyYmKFwiT1BUSU9OXCI9PT1lLnRhZ05hbWV8fGZ1bmN0aW9uKGUsdCl7dmFyIG49ITA7dHJ5e249ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PWV9Y2F0Y2goZSl7fXJldHVybiBuJiZlLnZhbHVlIT09dH0oZSx0KXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLnZhbHVlLGk9ZS5fdk1vZGlmaWVycztpZihuKGkpKXtpZihpLm51bWJlcilyZXR1cm4gZihyKSE9PWYodCk7aWYoaS50cmltKXJldHVybiByLnRyaW0oKSE9PXQudHJpbSgpfXJldHVybiByIT09dH0oZSx0KSl9dmFyIG9pPXtjcmVhdGU6cmksdXBkYXRlOnJpfSxhaT1nKGZ1bmN0aW9uKGUpe3ZhciB0PXt9LG49LzooLispLztyZXR1cm4gZS5zcGxpdCgvOyg/IVteKF0qXFwpKS9nKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKGUpe3ZhciByPWUuc3BsaXQobik7ci5sZW5ndGg+MSYmKHRbclswXS50cmltKCldPXJbMV0udHJpbSgpKX19KSx0fSk7ZnVuY3Rpb24gc2koZSl7dmFyIHQ9Y2koZS5zdHlsZSk7cmV0dXJuIGUuc3RhdGljU3R5bGU/QShlLnN0YXRpY1N0eWxlLHQpOnR9ZnVuY3Rpb24gY2koZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/TyhlKTpcInN0cmluZ1wiPT10eXBlb2YgZT9haShlKTplfXZhciB1aSxsaT0vXi0tLyxmaT0vXFxzKiFpbXBvcnRhbnQkLyxwaT1mdW5jdGlvbihlLHQsbil7aWYobGkudGVzdCh0KSllLnN0eWxlLnNldFByb3BlcnR5KHQsbik7ZWxzZSBpZihmaS50ZXN0KG4pKWUuc3R5bGUuc2V0UHJvcGVydHkoQyh0KSxuLnJlcGxhY2UoZmksXCJcIiksXCJpbXBvcnRhbnRcIik7ZWxzZXt2YXIgcj12aSh0KTtpZihBcnJheS5pc0FycmF5KG4pKWZvcih2YXIgaT0wLG89bi5sZW5ndGg7aTxvO2krKyllLnN0eWxlW3JdPW5baV07ZWxzZSBlLnN0eWxlW3JdPW59fSxkaT1bXCJXZWJraXRcIixcIk1velwiLFwibXNcIl0sdmk9ZyhmdW5jdGlvbihlKXtpZih1aT11aXx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKS5zdHlsZSxcImZpbHRlclwiIT09KGU9YihlKSkmJmUgaW4gdWkpcmV0dXJuIGU7Zm9yKHZhciB0PWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKSxuPTA7bjxkaS5sZW5ndGg7bisrKXt2YXIgcj1kaVtuXSt0O2lmKHIgaW4gdWkpcmV0dXJuIHJ9fSk7ZnVuY3Rpb24gaGkoZSxyKXt2YXIgaT1yLmRhdGEsbz1lLmRhdGE7aWYoISh0KGkuc3RhdGljU3R5bGUpJiZ0KGkuc3R5bGUpJiZ0KG8uc3RhdGljU3R5bGUpJiZ0KG8uc3R5bGUpKSl7dmFyIGEscyxjPXIuZWxtLHU9by5zdGF0aWNTdHlsZSxsPW8ubm9ybWFsaXplZFN0eWxlfHxvLnN0eWxlfHx7fSxmPXV8fGwscD1jaShyLmRhdGEuc3R5bGUpfHx7fTtyLmRhdGEubm9ybWFsaXplZFN0eWxlPW4ocC5fX29iX18pP0Eoe30scCk6cDt2YXIgZD1mdW5jdGlvbihlLHQpe3ZhciBuLHI9e307aWYodClmb3IodmFyIGk9ZTtpLmNvbXBvbmVudEluc3RhbmNlOykoaT1pLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSkmJmkuZGF0YSYmKG49c2koaS5kYXRhKSkmJkEocixuKTsobj1zaShlLmRhdGEpKSYmQShyLG4pO2Zvcih2YXIgbz1lO289by5wYXJlbnQ7KW8uZGF0YSYmKG49c2koby5kYXRhKSkmJkEocixuKTtyZXR1cm4gcn0ociwhMCk7Zm9yKHMgaW4gZil0KGRbc10pJiZwaShjLHMsXCJcIik7Zm9yKHMgaW4gZCkoYT1kW3NdKSE9PWZbc10mJnBpKGMscyxudWxsPT1hP1wiXCI6YSl9fXZhciBtaT17Y3JlYXRlOmhpLHVwZGF0ZTpoaX0seWk9L1xccysvO2Z1bmN0aW9uIGdpKGUsdCl7aWYodCYmKHQ9dC50cmltKCkpKWlmKGUuY2xhc3NMaXN0KXQuaW5kZXhPZihcIiBcIik+LTE/dC5zcGxpdCh5aSkuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZS5jbGFzc0xpc3QuYWRkKHQpfSk6ZS5jbGFzc0xpc3QuYWRkKHQpO2Vsc2V7dmFyIG49XCIgXCIrKGUuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIil8fFwiXCIpK1wiIFwiO24uaW5kZXhPZihcIiBcIit0K1wiIFwiKTwwJiZlLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsKG4rdCkudHJpbSgpKX19ZnVuY3Rpb24gX2koZSx0KXtpZih0JiYodD10LnRyaW0oKSkpaWYoZS5jbGFzc0xpc3QpdC5pbmRleE9mKFwiIFwiKT4tMT90LnNwbGl0KHlpKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmNsYXNzTGlzdC5yZW1vdmUodCl9KTplLmNsYXNzTGlzdC5yZW1vdmUodCksZS5jbGFzc0xpc3QubGVuZ3RofHxlLnJlbW92ZUF0dHJpYnV0ZShcImNsYXNzXCIpO2Vsc2V7Zm9yKHZhciBuPVwiIFwiKyhlLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpfHxcIlwiKStcIiBcIixyPVwiIFwiK3QrXCIgXCI7bi5pbmRleE9mKHIpPj0wOyluPW4ucmVwbGFjZShyLFwiIFwiKTsobj1uLnRyaW0oKSk/ZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLG4pOmUucmVtb3ZlQXR0cmlidXRlKFwiY2xhc3NcIil9fWZ1bmN0aW9uIGJpKGUpe2lmKGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBlKXt2YXIgdD17fTtyZXR1cm4hMSE9PWUuY3NzJiZBKHQsJGkoZS5uYW1lfHxcInZcIikpLEEodCxlKSx0fXJldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlPyRpKGUpOnZvaWQgMH19dmFyICRpPWcoZnVuY3Rpb24oZSl7cmV0dXJue2VudGVyQ2xhc3M6ZStcIi1lbnRlclwiLGVudGVyVG9DbGFzczplK1wiLWVudGVyLXRvXCIsZW50ZXJBY3RpdmVDbGFzczplK1wiLWVudGVyLWFjdGl2ZVwiLGxlYXZlQ2xhc3M6ZStcIi1sZWF2ZVwiLGxlYXZlVG9DbGFzczplK1wiLWxlYXZlLXRvXCIsbGVhdmVBY3RpdmVDbGFzczplK1wiLWxlYXZlLWFjdGl2ZVwifX0pLHdpPXomJiFXLENpPVwidHJhbnNpdGlvblwiLHhpPVwiYW5pbWF0aW9uXCIsa2k9XCJ0cmFuc2l0aW9uXCIsQWk9XCJ0cmFuc2l0aW9uZW5kXCIsT2k9XCJhbmltYXRpb25cIixTaT1cImFuaW1hdGlvbmVuZFwiO3dpJiYodm9pZCAwPT09d2luZG93Lm9udHJhbnNpdGlvbmVuZCYmdm9pZCAwIT09d2luZG93Lm9ud2Via2l0dHJhbnNpdGlvbmVuZCYmKGtpPVwiV2Via2l0VHJhbnNpdGlvblwiLEFpPVwid2Via2l0VHJhbnNpdGlvbkVuZFwiKSx2b2lkIDA9PT13aW5kb3cub25hbmltYXRpb25lbmQmJnZvaWQgMCE9PXdpbmRvdy5vbndlYmtpdGFuaW1hdGlvbmVuZCYmKE9pPVwiV2Via2l0QW5pbWF0aW9uXCIsU2k9XCJ3ZWJraXRBbmltYXRpb25FbmRcIikpO3ZhciBUaT16P3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6c2V0VGltZW91dDpmdW5jdGlvbihlKXtyZXR1cm4gZSgpfTtmdW5jdGlvbiBFaShlKXtUaShmdW5jdGlvbigpe1RpKGUpfSl9ZnVuY3Rpb24gTmkoZSx0KXt2YXIgbj1lLl90cmFuc2l0aW9uQ2xhc3Nlc3x8KGUuX3RyYW5zaXRpb25DbGFzc2VzPVtdKTtuLmluZGV4T2YodCk8MCYmKG4ucHVzaCh0KSxnaShlLHQpKX1mdW5jdGlvbiBqaShlLHQpe2UuX3RyYW5zaXRpb25DbGFzc2VzJiZoKGUuX3RyYW5zaXRpb25DbGFzc2VzLHQpLF9pKGUsdCl9ZnVuY3Rpb24gRGkoZSx0LG4pe3ZhciByPU1pKGUsdCksaT1yLnR5cGUsbz1yLnRpbWVvdXQsYT1yLnByb3BDb3VudDtpZighaSlyZXR1cm4gbigpO3ZhciBzPWk9PT1DaT9BaTpTaSxjPTAsdT1mdW5jdGlvbigpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihzLGwpLG4oKX0sbD1mdW5jdGlvbih0KXt0LnRhcmdldD09PWUmJisrYz49YSYmdSgpfTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YzxhJiZ1KCl9LG8rMSksZS5hZGRFdmVudExpc3RlbmVyKHMsbCl9dmFyIExpPS9cXGIodHJhbnNmb3JtfGFsbCkoLHwkKS87ZnVuY3Rpb24gTWkoZSx0KXt2YXIgbixyPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLGk9KHJba2krXCJEZWxheVwiXXx8XCJcIikuc3BsaXQoXCIsIFwiKSxvPShyW2tpK1wiRHVyYXRpb25cIl18fFwiXCIpLnNwbGl0KFwiLCBcIiksYT1JaShpLG8pLHM9KHJbT2krXCJEZWxheVwiXXx8XCJcIikuc3BsaXQoXCIsIFwiKSxjPShyW09pK1wiRHVyYXRpb25cIl18fFwiXCIpLnNwbGl0KFwiLCBcIiksdT1JaShzLGMpLGw9MCxmPTA7cmV0dXJuIHQ9PT1DaT9hPjAmJihuPUNpLGw9YSxmPW8ubGVuZ3RoKTp0PT09eGk/dT4wJiYobj14aSxsPXUsZj1jLmxlbmd0aCk6Zj0obj0obD1NYXRoLm1heChhLHUpKT4wP2E+dT9DaTp4aTpudWxsKT9uPT09Q2k/by5sZW5ndGg6Yy5sZW5ndGg6MCx7dHlwZTpuLHRpbWVvdXQ6bCxwcm9wQ291bnQ6ZixoYXNUcmFuc2Zvcm06bj09PUNpJiZMaS50ZXN0KHJba2krXCJQcm9wZXJ0eVwiXSl9fWZ1bmN0aW9uIElpKGUsdCl7Zm9yKDtlLmxlbmd0aDx0Lmxlbmd0aDspZT1lLmNvbmNhdChlKTtyZXR1cm4gTWF0aC5tYXguYXBwbHkobnVsbCx0Lm1hcChmdW5jdGlvbih0LG4pe3JldHVybiBGaSh0KStGaShlW25dKX0pKX1mdW5jdGlvbiBGaShlKXtyZXR1cm4gMWUzKk51bWJlcihlLnNsaWNlKDAsLTEpLnJlcGxhY2UoXCIsXCIsXCIuXCIpKX1mdW5jdGlvbiBQaShlLHIpe3ZhciBpPWUuZWxtO24oaS5fbGVhdmVDYikmJihpLl9sZWF2ZUNiLmNhbmNlbGxlZD0hMCxpLl9sZWF2ZUNiKCkpO3ZhciBhPWJpKGUuZGF0YS50cmFuc2l0aW9uKTtpZighdChhKSYmIW4oaS5fZW50ZXJDYikmJjE9PT1pLm5vZGVUeXBlKXtmb3IodmFyIHM9YS5jc3MsYz1hLnR5cGUsdT1hLmVudGVyQ2xhc3MsbD1hLmVudGVyVG9DbGFzcyxwPWEuZW50ZXJBY3RpdmVDbGFzcyxkPWEuYXBwZWFyQ2xhc3Msdj1hLmFwcGVhclRvQ2xhc3MsaD1hLmFwcGVhckFjdGl2ZUNsYXNzLG09YS5iZWZvcmVFbnRlcix5PWEuZW50ZXIsZz1hLmFmdGVyRW50ZXIsXz1hLmVudGVyQ2FuY2VsbGVkLGI9YS5iZWZvcmVBcHBlYXIsJD1hLmFwcGVhcix3PWEuYWZ0ZXJBcHBlYXIsQz1hLmFwcGVhckNhbmNlbGxlZCx4PWEuZHVyYXRpb24saz1XdCxBPVd0LiR2bm9kZTtBJiZBLnBhcmVudDspaz1BLmNvbnRleHQsQT1BLnBhcmVudDt2YXIgTz0hay5faXNNb3VudGVkfHwhZS5pc1Jvb3RJbnNlcnQ7aWYoIU98fCR8fFwiXCI9PT0kKXt2YXIgUz1PJiZkP2Q6dSxUPU8mJmg/aDpwLEU9TyYmdj92OmwsTj1PJiZifHxtLGo9TyYmXCJmdW5jdGlvblwiPT10eXBlb2YgJD8kOnksTD1PJiZ3fHxnLE09TyYmQ3x8XyxJPWYobyh4KT94LmVudGVyOngpLEY9ITEhPT1zJiYhVyxQPUJpKGopLFI9aS5fZW50ZXJDYj1EKGZ1bmN0aW9uKCl7RiYmKGppKGksRSksamkoaSxUKSksUi5jYW5jZWxsZWQ/KEYmJmppKGksUyksTSYmTShpKSk6TCYmTChpKSxpLl9lbnRlckNiPW51bGx9KTtlLmRhdGEuc2hvd3x8aXQoZSxcImluc2VydFwiLGZ1bmN0aW9uKCl7dmFyIHQ9aS5wYXJlbnROb2RlLG49dCYmdC5fcGVuZGluZyYmdC5fcGVuZGluZ1tlLmtleV07biYmbi50YWc9PT1lLnRhZyYmbi5lbG0uX2xlYXZlQ2ImJm4uZWxtLl9sZWF2ZUNiKCksaiYmaihpLFIpfSksTiYmTihpKSxGJiYoTmkoaSxTKSxOaShpLFQpLEVpKGZ1bmN0aW9uKCl7amkoaSxTKSxSLmNhbmNlbGxlZHx8KE5pKGksRSksUHx8KEhpKEkpP3NldFRpbWVvdXQoUixJKTpEaShpLGMsUikpKX0pKSxlLmRhdGEuc2hvdyYmKHImJnIoKSxqJiZqKGksUikpLEZ8fFB8fFIoKX19fWZ1bmN0aW9uIFJpKGUscil7dmFyIGk9ZS5lbG07bihpLl9lbnRlckNiKSYmKGkuX2VudGVyQ2IuY2FuY2VsbGVkPSEwLGkuX2VudGVyQ2IoKSk7dmFyIGE9YmkoZS5kYXRhLnRyYW5zaXRpb24pO2lmKHQoYSl8fDEhPT1pLm5vZGVUeXBlKXJldHVybiByKCk7aWYoIW4oaS5fbGVhdmVDYikpe3ZhciBzPWEuY3NzLGM9YS50eXBlLHU9YS5sZWF2ZUNsYXNzLGw9YS5sZWF2ZVRvQ2xhc3MscD1hLmxlYXZlQWN0aXZlQ2xhc3MsZD1hLmJlZm9yZUxlYXZlLHY9YS5sZWF2ZSxoPWEuYWZ0ZXJMZWF2ZSxtPWEubGVhdmVDYW5jZWxsZWQseT1hLmRlbGF5TGVhdmUsZz1hLmR1cmF0aW9uLF89ITEhPT1zJiYhVyxiPUJpKHYpLCQ9ZihvKGcpP2cubGVhdmU6Zyksdz1pLl9sZWF2ZUNiPUQoZnVuY3Rpb24oKXtpLnBhcmVudE5vZGUmJmkucGFyZW50Tm9kZS5fcGVuZGluZyYmKGkucGFyZW50Tm9kZS5fcGVuZGluZ1tlLmtleV09bnVsbCksXyYmKGppKGksbCksamkoaSxwKSksdy5jYW5jZWxsZWQ/KF8mJmppKGksdSksbSYmbShpKSk6KHIoKSxoJiZoKGkpKSxpLl9sZWF2ZUNiPW51bGx9KTt5P3koQyk6QygpfWZ1bmN0aW9uIEMoKXt3LmNhbmNlbGxlZHx8KCFlLmRhdGEuc2hvdyYmaS5wYXJlbnROb2RlJiYoKGkucGFyZW50Tm9kZS5fcGVuZGluZ3x8KGkucGFyZW50Tm9kZS5fcGVuZGluZz17fSkpW2Uua2V5XT1lKSxkJiZkKGkpLF8mJihOaShpLHUpLE5pKGkscCksRWkoZnVuY3Rpb24oKXtqaShpLHUpLHcuY2FuY2VsbGVkfHwoTmkoaSxsKSxifHwoSGkoJCk/c2V0VGltZW91dCh3LCQpOkRpKGksYyx3KSkpfSkpLHYmJnYoaSx3KSxffHxifHx3KCkpfX1mdW5jdGlvbiBIaShlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZSYmIWlzTmFOKGUpfWZ1bmN0aW9uIEJpKGUpe2lmKHQoZSkpcmV0dXJuITE7dmFyIHI9ZS5mbnM7cmV0dXJuIG4ocik/QmkoQXJyYXkuaXNBcnJheShyKT9yWzBdOnIpOihlLl9sZW5ndGh8fGUubGVuZ3RoKT4xfWZ1bmN0aW9uIFVpKGUsdCl7ITAhPT10LmRhdGEuc2hvdyYmUGkodCl9dmFyIHppPWZ1bmN0aW9uKGUpe3ZhciBvLGEscz17fSxjPWUubW9kdWxlcyx1PWUubm9kZU9wcztmb3Iobz0wO288cnIubGVuZ3RoOysrbylmb3Ioc1tycltvXV09W10sYT0wO2E8Yy5sZW5ndGg7KythKW4oY1thXVtycltvXV0pJiZzW3JyW29dXS5wdXNoKGNbYV1bcnJbb11dKTtmdW5jdGlvbiBsKGUpe3ZhciB0PXUucGFyZW50Tm9kZShlKTtuKHQpJiZ1LnJlbW92ZUNoaWxkKHQsZSl9ZnVuY3Rpb24gZihlLHQsaSxvLGEsYyxsKXtpZihuKGUuZWxtKSYmbihjKSYmKGU9Y1tsXT1tZShlKSksZS5pc1Jvb3RJbnNlcnQ9IWEsIWZ1bmN0aW9uKGUsdCxpLG8pe3ZhciBhPWUuZGF0YTtpZihuKGEpKXt2YXIgYz1uKGUuY29tcG9uZW50SW5zdGFuY2UpJiZhLmtlZXBBbGl2ZTtpZihuKGE9YS5ob29rKSYmbihhPWEuaW5pdCkmJmEoZSwhMSksbihlLmNvbXBvbmVudEluc3RhbmNlKSlyZXR1cm4gZChlLHQpLHYoaSxlLmVsbSxvKSxyKGMpJiZmdW5jdGlvbihlLHQscixpKXtmb3IodmFyIG8sYT1lO2EuY29tcG9uZW50SW5zdGFuY2U7KWlmKGE9YS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUsbihvPWEuZGF0YSkmJm4obz1vLnRyYW5zaXRpb24pKXtmb3Iobz0wO288cy5hY3RpdmF0ZS5sZW5ndGg7KytvKXMuYWN0aXZhdGVbb10obnIsYSk7dC5wdXNoKGEpO2JyZWFrfXYocixlLmVsbSxpKX0oZSx0LGksbyksITB9fShlLHQsaSxvKSl7dmFyIGY9ZS5kYXRhLHA9ZS5jaGlsZHJlbixtPWUudGFnO24obSk/KGUuZWxtPWUubnM/dS5jcmVhdGVFbGVtZW50TlMoZS5ucyxtKTp1LmNyZWF0ZUVsZW1lbnQobSxlKSxnKGUpLGgoZSxwLHQpLG4oZikmJnkoZSx0KSx2KGksZS5lbG0sbykpOnIoZS5pc0NvbW1lbnQpPyhlLmVsbT11LmNyZWF0ZUNvbW1lbnQoZS50ZXh0KSx2KGksZS5lbG0sbykpOihlLmVsbT11LmNyZWF0ZVRleHROb2RlKGUudGV4dCksdihpLGUuZWxtLG8pKX19ZnVuY3Rpb24gZChlLHQpe24oZS5kYXRhLnBlbmRpbmdJbnNlcnQpJiYodC5wdXNoLmFwcGx5KHQsZS5kYXRhLnBlbmRpbmdJbnNlcnQpLGUuZGF0YS5wZW5kaW5nSW5zZXJ0PW51bGwpLGUuZWxtPWUuY29tcG9uZW50SW5zdGFuY2UuJGVsLG0oZSk/KHkoZSx0KSxnKGUpKToodHIoZSksdC5wdXNoKGUpKX1mdW5jdGlvbiB2KGUsdCxyKXtuKGUpJiYobihyKT91LnBhcmVudE5vZGUocik9PT1lJiZ1Lmluc2VydEJlZm9yZShlLHQscik6dS5hcHBlbmRDaGlsZChlLHQpKX1mdW5jdGlvbiBoKGUsdCxuKXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKWYodFtyXSxuLGUuZWxtLG51bGwsITAsdCxyKTtlbHNlIGkoZS50ZXh0KSYmdS5hcHBlbmRDaGlsZChlLmVsbSx1LmNyZWF0ZVRleHROb2RlKFN0cmluZyhlLnRleHQpKSl9ZnVuY3Rpb24gbShlKXtmb3IoO2UuY29tcG9uZW50SW5zdGFuY2U7KWU9ZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7cmV0dXJuIG4oZS50YWcpfWZ1bmN0aW9uIHkoZSx0KXtmb3IodmFyIHI9MDtyPHMuY3JlYXRlLmxlbmd0aDsrK3Ipcy5jcmVhdGVbcl0obnIsZSk7bihvPWUuZGF0YS5ob29rKSYmKG4oby5jcmVhdGUpJiZvLmNyZWF0ZShucixlKSxuKG8uaW5zZXJ0KSYmdC5wdXNoKGUpKX1mdW5jdGlvbiBnKGUpe3ZhciB0O2lmKG4odD1lLmZuU2NvcGVJZCkpdS5zZXRTdHlsZVNjb3BlKGUuZWxtLHQpO2Vsc2UgZm9yKHZhciByPWU7cjspbih0PXIuY29udGV4dCkmJm4odD10LiRvcHRpb25zLl9zY29wZUlkKSYmdS5zZXRTdHlsZVNjb3BlKGUuZWxtLHQpLHI9ci5wYXJlbnQ7bih0PVd0KSYmdCE9PWUuY29udGV4dCYmdCE9PWUuZm5Db250ZXh0JiZuKHQ9dC4kb3B0aW9ucy5fc2NvcGVJZCkmJnUuc2V0U3R5bGVTY29wZShlLmVsbSx0KX1mdW5jdGlvbiBfKGUsdCxuLHIsaSxvKXtmb3IoO3I8PWk7KytyKWYobltyXSxvLGUsdCwhMSxuLHIpfWZ1bmN0aW9uIGIoZSl7dmFyIHQscixpPWUuZGF0YTtpZihuKGkpKWZvcihuKHQ9aS5ob29rKSYmbih0PXQuZGVzdHJveSkmJnQoZSksdD0wO3Q8cy5kZXN0cm95Lmxlbmd0aDsrK3Qpcy5kZXN0cm95W3RdKGUpO2lmKG4odD1lLmNoaWxkcmVuKSlmb3Iocj0wO3I8ZS5jaGlsZHJlbi5sZW5ndGg7KytyKWIoZS5jaGlsZHJlbltyXSl9ZnVuY3Rpb24gJChlLHQscixpKXtmb3IoO3I8PWk7KytyKXt2YXIgbz10W3JdO24obykmJihuKG8udGFnKT8odyhvKSxiKG8pKTpsKG8uZWxtKSl9fWZ1bmN0aW9uIHcoZSx0KXtpZihuKHQpfHxuKGUuZGF0YSkpe3ZhciByLGk9cy5yZW1vdmUubGVuZ3RoKzE7Zm9yKG4odCk/dC5saXN0ZW5lcnMrPWk6dD1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oKXswPT0tLW4ubGlzdGVuZXJzJiZsKGUpfXJldHVybiBuLmxpc3RlbmVycz10LG59KGUuZWxtLGkpLG4ocj1lLmNvbXBvbmVudEluc3RhbmNlKSYmbihyPXIuX3Zub2RlKSYmbihyLmRhdGEpJiZ3KHIsdCkscj0wO3I8cy5yZW1vdmUubGVuZ3RoOysrcilzLnJlbW92ZVtyXShlLHQpO24ocj1lLmRhdGEuaG9vaykmJm4ocj1yLnJlbW92ZSk/cihlLHQpOnQoKX1lbHNlIGwoZS5lbG0pfWZ1bmN0aW9uIEMoZSx0LHIsaSl7Zm9yKHZhciBvPXI7bzxpO28rKyl7dmFyIGE9dFtvXTtpZihuKGEpJiZpcihlLGEpKXJldHVybiBvfX1mdW5jdGlvbiB4KGUsaSxvLGEsYyxsKXtpZihlIT09aSl7bihpLmVsbSkmJm4oYSkmJihpPWFbY109bWUoaSkpO3ZhciBwPWkuZWxtPWUuZWxtO2lmKHIoZS5pc0FzeW5jUGxhY2Vob2xkZXIpKW4oaS5hc3luY0ZhY3RvcnkucmVzb2x2ZWQpP08oZS5lbG0saSxvKTppLmlzQXN5bmNQbGFjZWhvbGRlcj0hMDtlbHNlIGlmKHIoaS5pc1N0YXRpYykmJnIoZS5pc1N0YXRpYykmJmkua2V5PT09ZS5rZXkmJihyKGkuaXNDbG9uZWQpfHxyKGkuaXNPbmNlKSkpaS5jb21wb25lbnRJbnN0YW5jZT1lLmNvbXBvbmVudEluc3RhbmNlO2Vsc2V7dmFyIGQsdj1pLmRhdGE7bih2KSYmbihkPXYuaG9vaykmJm4oZD1kLnByZXBhdGNoKSYmZChlLGkpO3ZhciBoPWUuY2hpbGRyZW4seT1pLmNoaWxkcmVuO2lmKG4odikmJm0oaSkpe2ZvcihkPTA7ZDxzLnVwZGF0ZS5sZW5ndGg7KytkKXMudXBkYXRlW2RdKGUsaSk7bihkPXYuaG9vaykmJm4oZD1kLnVwZGF0ZSkmJmQoZSxpKX10KGkudGV4dCk/bihoKSYmbih5KT9oIT09eSYmZnVuY3Rpb24oZSxyLGksbyxhKXtmb3IodmFyIHMsYyxsLHA9MCxkPTAsdj1yLmxlbmd0aC0xLGg9clswXSxtPXJbdl0seT1pLmxlbmd0aC0xLGc9aVswXSxiPWlbeV0sdz0hYTtwPD12JiZkPD15Oyl0KGgpP2g9clsrK3BdOnQobSk/bT1yWy0tdl06aXIoaCxnKT8oeChoLGcsbyxpLGQpLGg9clsrK3BdLGc9aVsrK2RdKTppcihtLGIpPyh4KG0sYixvLGkseSksbT1yWy0tdl0sYj1pWy0teV0pOmlyKGgsYik/KHgoaCxiLG8saSx5KSx3JiZ1Lmluc2VydEJlZm9yZShlLGguZWxtLHUubmV4dFNpYmxpbmcobS5lbG0pKSxoPXJbKytwXSxiPWlbLS15XSk6aXIobSxnKT8oeChtLGcsbyxpLGQpLHcmJnUuaW5zZXJ0QmVmb3JlKGUsbS5lbG0saC5lbG0pLG09clstLXZdLGc9aVsrK2RdKToodChzKSYmKHM9b3IocixwLHYpKSx0KGM9bihnLmtleSk/c1tnLmtleV06QyhnLHIscCx2KSk/ZihnLG8sZSxoLmVsbSwhMSxpLGQpOmlyKGw9cltjXSxnKT8oeChsLGcsbyxpLGQpLHJbY109dm9pZCAwLHcmJnUuaW5zZXJ0QmVmb3JlKGUsbC5lbG0saC5lbG0pKTpmKGcsbyxlLGguZWxtLCExLGksZCksZz1pWysrZF0pO3A+dj9fKGUsdChpW3krMV0pP251bGw6aVt5KzFdLmVsbSxpLGQseSxvKTpkPnkmJiQoMCxyLHAsdil9KHAsaCx5LG8sbCk6bih5KT8obihlLnRleHQpJiZ1LnNldFRleHRDb250ZW50KHAsXCJcIiksXyhwLG51bGwseSwwLHkubGVuZ3RoLTEsbykpOm4oaCk/JCgwLGgsMCxoLmxlbmd0aC0xKTpuKGUudGV4dCkmJnUuc2V0VGV4dENvbnRlbnQocCxcIlwiKTplLnRleHQhPT1pLnRleHQmJnUuc2V0VGV4dENvbnRlbnQocCxpLnRleHQpLG4odikmJm4oZD12Lmhvb2spJiZuKGQ9ZC5wb3N0cGF0Y2gpJiZkKGUsaSl9fX1mdW5jdGlvbiBrKGUsdCxpKXtpZihyKGkpJiZuKGUucGFyZW50KSllLnBhcmVudC5kYXRhLnBlbmRpbmdJbnNlcnQ9dDtlbHNlIGZvcih2YXIgbz0wO288dC5sZW5ndGg7KytvKXRbb10uZGF0YS5ob29rLmluc2VydCh0W29dKX12YXIgQT1wKFwiYXR0cnMsY2xhc3Msc3RhdGljQ2xhc3Msc3RhdGljU3R5bGUsa2V5XCIpO2Z1bmN0aW9uIE8oZSx0LGksbyl7dmFyIGEscz10LnRhZyxjPXQuZGF0YSx1PXQuY2hpbGRyZW47aWYobz1vfHxjJiZjLnByZSx0LmVsbT1lLHIodC5pc0NvbW1lbnQpJiZuKHQuYXN5bmNGYWN0b3J5KSlyZXR1cm4gdC5pc0FzeW5jUGxhY2Vob2xkZXI9ITAsITA7aWYobihjKSYmKG4oYT1jLmhvb2spJiZuKGE9YS5pbml0KSYmYSh0LCEwKSxuKGE9dC5jb21wb25lbnRJbnN0YW5jZSkpKXJldHVybiBkKHQsaSksITA7aWYobihzKSl7aWYobih1KSlpZihlLmhhc0NoaWxkTm9kZXMoKSlpZihuKGE9YykmJm4oYT1hLmRvbVByb3BzKSYmbihhPWEuaW5uZXJIVE1MKSl7aWYoYSE9PWUuaW5uZXJIVE1MKXJldHVybiExfWVsc2V7Zm9yKHZhciBsPSEwLGY9ZS5maXJzdENoaWxkLHA9MDtwPHUubGVuZ3RoO3ArKyl7aWYoIWZ8fCFPKGYsdVtwXSxpLG8pKXtsPSExO2JyZWFrfWY9Zi5uZXh0U2libGluZ31pZighbHx8ZilyZXR1cm4hMX1lbHNlIGgodCx1LGkpO2lmKG4oYykpe3ZhciB2PSExO2Zvcih2YXIgbSBpbiBjKWlmKCFBKG0pKXt2PSEwLHkodCxpKTticmVha30hdiYmYy5jbGFzcyYmZXQoYy5jbGFzcyl9fWVsc2UgZS5kYXRhIT09dC50ZXh0JiYoZS5kYXRhPXQudGV4dCk7cmV0dXJuITB9cmV0dXJuIGZ1bmN0aW9uKGUsaSxvLGEpe2lmKCF0KGkpKXt2YXIgYyxsPSExLHA9W107aWYodChlKSlsPSEwLGYoaSxwKTtlbHNle3ZhciBkPW4oZS5ub2RlVHlwZSk7aWYoIWQmJmlyKGUsaSkpeChlLGkscCxudWxsLG51bGwsYSk7ZWxzZXtpZihkKXtpZigxPT09ZS5ub2RlVHlwZSYmZS5oYXNBdHRyaWJ1dGUoTCkmJihlLnJlbW92ZUF0dHJpYnV0ZShMKSxvPSEwKSxyKG8pJiZPKGUsaSxwKSlyZXR1cm4gayhpLHAsITApLGU7Yz1lLGU9bmV3IHBlKHUudGFnTmFtZShjKS50b0xvd2VyQ2FzZSgpLHt9LFtdLHZvaWQgMCxjKX12YXIgdj1lLmVsbSxoPXUucGFyZW50Tm9kZSh2KTtpZihmKGkscCx2Ll9sZWF2ZUNiP251bGw6aCx1Lm5leHRTaWJsaW5nKHYpKSxuKGkucGFyZW50KSlmb3IodmFyIHk9aS5wYXJlbnQsZz1tKGkpO3k7KXtmb3IodmFyIF89MDtfPHMuZGVzdHJveS5sZW5ndGg7KytfKXMuZGVzdHJveVtfXSh5KTtpZih5LmVsbT1pLmVsbSxnKXtmb3IodmFyIHc9MDt3PHMuY3JlYXRlLmxlbmd0aDsrK3cpcy5jcmVhdGVbd10obnIseSk7dmFyIEM9eS5kYXRhLmhvb2suaW5zZXJ0O2lmKEMubWVyZ2VkKWZvcih2YXIgQT0xO0E8Qy5mbnMubGVuZ3RoO0ErKylDLmZuc1tBXSgpfWVsc2UgdHIoeSk7eT15LnBhcmVudH1uKGgpPyQoMCxbZV0sMCwwKTpuKGUudGFnKSYmYihlKX19cmV0dXJuIGsoaSxwLGwpLGkuZWxtfW4oZSkmJmIoZSl9fSh7bm9kZU9wczpRbixtb2R1bGVzOlttcix4cixuaSxvaSxtaSx6P3tjcmVhdGU6VWksYWN0aXZhdGU6VWkscmVtb3ZlOmZ1bmN0aW9uKGUsdCl7ITAhPT1lLmRhdGEuc2hvdz9SaShlLHQpOnQoKX19Ont9XS5jb25jYXQocHIpfSk7VyYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNlbGVjdGlvbmNoYW5nZVwiLGZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtlJiZlLnZtb2RlbCYmWGkoZSxcImlucHV0XCIpfSk7dmFyIFZpPXtpbnNlcnRlZDpmdW5jdGlvbihlLHQsbixyKXtcInNlbGVjdFwiPT09bi50YWc/KHIuZWxtJiYhci5lbG0uX3ZPcHRpb25zP2l0KG4sXCJwb3N0cGF0Y2hcIixmdW5jdGlvbigpe1ZpLmNvbXBvbmVudFVwZGF0ZWQoZSx0LG4pfSk6S2koZSx0LG4uY29udGV4dCksZS5fdk9wdGlvbnM9W10ubWFwLmNhbGwoZS5vcHRpb25zLFdpKSk6KFwidGV4dGFyZWFcIj09PW4udGFnfHxYbihlLnR5cGUpKSYmKGUuX3ZNb2RpZmllcnM9dC5tb2RpZmllcnMsdC5tb2RpZmllcnMubGF6eXx8KGUuYWRkRXZlbnRMaXN0ZW5lcihcImNvbXBvc2l0aW9uc3RhcnRcIixaaSksZS5hZGRFdmVudExpc3RlbmVyKFwiY29tcG9zaXRpb25lbmRcIixHaSksZS5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsR2kpLFcmJihlLnZtb2RlbD0hMCkpKX0sY29tcG9uZW50VXBkYXRlZDpmdW5jdGlvbihlLHQsbil7aWYoXCJzZWxlY3RcIj09PW4udGFnKXtLaShlLHQsbi5jb250ZXh0KTt2YXIgcj1lLl92T3B0aW9ucyxpPWUuX3ZPcHRpb25zPVtdLm1hcC5jYWxsKGUub3B0aW9ucyxXaSk7aWYoaS5zb21lKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIU4oZSxyW3RdKX0pKShlLm11bHRpcGxlP3QudmFsdWUuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gcWkoZSxpKX0pOnQudmFsdWUhPT10Lm9sZFZhbHVlJiZxaSh0LnZhbHVlLGkpKSYmWGkoZSxcImNoYW5nZVwiKX19fTtmdW5jdGlvbiBLaShlLHQsbil7SmkoZSx0LG4pLChxfHxaKSYmc2V0VGltZW91dChmdW5jdGlvbigpe0ppKGUsdCxuKX0sMCl9ZnVuY3Rpb24gSmkoZSx0LG4pe3ZhciByPXQudmFsdWUsaT1lLm11bHRpcGxlO2lmKCFpfHxBcnJheS5pc0FycmF5KHIpKXtmb3IodmFyIG8sYSxzPTAsYz1lLm9wdGlvbnMubGVuZ3RoO3M8YztzKyspaWYoYT1lLm9wdGlvbnNbc10saSlvPWoocixXaShhKSk+LTEsYS5zZWxlY3RlZCE9PW8mJihhLnNlbGVjdGVkPW8pO2Vsc2UgaWYoTihXaShhKSxyKSlyZXR1cm4gdm9pZChlLnNlbGVjdGVkSW5kZXghPT1zJiYoZS5zZWxlY3RlZEluZGV4PXMpKTtpfHwoZS5zZWxlY3RlZEluZGV4PS0xKX19ZnVuY3Rpb24gcWkoZSx0KXtyZXR1cm4gdC5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm4hTih0LGUpfSl9ZnVuY3Rpb24gV2koZSl7cmV0dXJuXCJfdmFsdWVcImluIGU/ZS5fdmFsdWU6ZS52YWx1ZX1mdW5jdGlvbiBaaShlKXtlLnRhcmdldC5jb21wb3Npbmc9ITB9ZnVuY3Rpb24gR2koZSl7ZS50YXJnZXQuY29tcG9zaW5nJiYoZS50YXJnZXQuY29tcG9zaW5nPSExLFhpKGUudGFyZ2V0LFwiaW5wdXRcIikpfWZ1bmN0aW9uIFhpKGUsdCl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJIVE1MRXZlbnRzXCIpO24uaW5pdEV2ZW50KHQsITAsITApLGUuZGlzcGF0Y2hFdmVudChuKX1mdW5jdGlvbiBZaShlKXtyZXR1cm4hZS5jb21wb25lbnRJbnN0YW5jZXx8ZS5kYXRhJiZlLmRhdGEudHJhbnNpdGlvbj9lOllpKGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlKX12YXIgUWk9e21vZGVsOlZpLHNob3c6e2JpbmQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQudmFsdWUsaT0obj1ZaShuKSkuZGF0YSYmbi5kYXRhLnRyYW5zaXRpb24sbz1lLl9fdk9yaWdpbmFsRGlzcGxheT1cIm5vbmVcIj09PWUuc3R5bGUuZGlzcGxheT9cIlwiOmUuc3R5bGUuZGlzcGxheTtyJiZpPyhuLmRhdGEuc2hvdz0hMCxQaShuLGZ1bmN0aW9uKCl7ZS5zdHlsZS5kaXNwbGF5PW99KSk6ZS5zdHlsZS5kaXNwbGF5PXI/bzpcIm5vbmVcIn0sdXBkYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10LnZhbHVlOyFyIT0hdC5vbGRWYWx1ZSYmKChuPVlpKG4pKS5kYXRhJiZuLmRhdGEudHJhbnNpdGlvbj8obi5kYXRhLnNob3c9ITAscj9QaShuLGZ1bmN0aW9uKCl7ZS5zdHlsZS5kaXNwbGF5PWUuX192T3JpZ2luYWxEaXNwbGF5fSk6UmkobixmdW5jdGlvbigpe2Uuc3R5bGUuZGlzcGxheT1cIm5vbmVcIn0pKTplLnN0eWxlLmRpc3BsYXk9cj9lLl9fdk9yaWdpbmFsRGlzcGxheTpcIm5vbmVcIil9LHVuYmluZDpmdW5jdGlvbihlLHQsbixyLGkpe2l8fChlLnN0eWxlLmRpc3BsYXk9ZS5fX3ZPcmlnaW5hbERpc3BsYXkpfX19LGVvPXtuYW1lOlN0cmluZyxhcHBlYXI6Qm9vbGVhbixjc3M6Qm9vbGVhbixtb2RlOlN0cmluZyx0eXBlOlN0cmluZyxlbnRlckNsYXNzOlN0cmluZyxsZWF2ZUNsYXNzOlN0cmluZyxlbnRlclRvQ2xhc3M6U3RyaW5nLGxlYXZlVG9DbGFzczpTdHJpbmcsZW50ZXJBY3RpdmVDbGFzczpTdHJpbmcsbGVhdmVBY3RpdmVDbGFzczpTdHJpbmcsYXBwZWFyQ2xhc3M6U3RyaW5nLGFwcGVhckFjdGl2ZUNsYXNzOlN0cmluZyxhcHBlYXJUb0NsYXNzOlN0cmluZyxkdXJhdGlvbjpbTnVtYmVyLFN0cmluZyxPYmplY3RdfTtmdW5jdGlvbiB0byhlKXt2YXIgdD1lJiZlLmNvbXBvbmVudE9wdGlvbnM7cmV0dXJuIHQmJnQuQ3Rvci5vcHRpb25zLmFic3RyYWN0P3RvKHp0KHQuY2hpbGRyZW4pKTplfWZ1bmN0aW9uIG5vKGUpe3ZhciB0PXt9LG49ZS4kb3B0aW9ucztmb3IodmFyIHIgaW4gbi5wcm9wc0RhdGEpdFtyXT1lW3JdO3ZhciBpPW4uX3BhcmVudExpc3RlbmVycztmb3IodmFyIG8gaW4gaSl0W2IobyldPWlbb107cmV0dXJuIHR9ZnVuY3Rpb24gcm8oZSx0KXtpZigvXFxkLWtlZXAtYWxpdmUkLy50ZXN0KHQudGFnKSlyZXR1cm4gZShcImtlZXAtYWxpdmVcIix7cHJvcHM6dC5jb21wb25lbnRPcHRpb25zLnByb3BzRGF0YX0pfXZhciBpbz1mdW5jdGlvbihlKXtyZXR1cm4gZS50YWd8fFV0KGUpfSxvbz1mdW5jdGlvbihlKXtyZXR1cm5cInNob3dcIj09PWUubmFtZX0sYW89e25hbWU6XCJ0cmFuc2l0aW9uXCIscHJvcHM6ZW8sYWJzdHJhY3Q6ITAscmVuZGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10aGlzLiRzbG90cy5kZWZhdWx0O2lmKG4mJihuPW4uZmlsdGVyKGlvKSkubGVuZ3RoKXt2YXIgcj10aGlzLm1vZGUsbz1uWzBdO2lmKGZ1bmN0aW9uKGUpe2Zvcig7ZT1lLnBhcmVudDspaWYoZS5kYXRhLnRyYW5zaXRpb24pcmV0dXJuITB9KHRoaXMuJHZub2RlKSlyZXR1cm4gbzt2YXIgYT10byhvKTtpZighYSlyZXR1cm4gbztpZih0aGlzLl9sZWF2aW5nKXJldHVybiBybyhlLG8pO3ZhciBzPVwiX190cmFuc2l0aW9uLVwiK3RoaXMuX3VpZCtcIi1cIjthLmtleT1udWxsPT1hLmtleT9hLmlzQ29tbWVudD9zK1wiY29tbWVudFwiOnMrYS50YWc6aShhLmtleSk/MD09PVN0cmluZyhhLmtleSkuaW5kZXhPZihzKT9hLmtleTpzK2Eua2V5OmEua2V5O3ZhciBjPShhLmRhdGF8fChhLmRhdGE9e30pKS50cmFuc2l0aW9uPW5vKHRoaXMpLHU9dGhpcy5fdm5vZGUsbD10byh1KTtpZihhLmRhdGEuZGlyZWN0aXZlcyYmYS5kYXRhLmRpcmVjdGl2ZXMuc29tZShvbykmJihhLmRhdGEuc2hvdz0hMCksbCYmbC5kYXRhJiYhZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5rZXk9PT1lLmtleSYmdC50YWc9PT1lLnRhZ30oYSxsKSYmIVV0KGwpJiYoIWwuY29tcG9uZW50SW5zdGFuY2V8fCFsLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZS5pc0NvbW1lbnQpKXt2YXIgZj1sLmRhdGEudHJhbnNpdGlvbj1BKHt9LGMpO2lmKFwib3V0LWluXCI9PT1yKXJldHVybiB0aGlzLl9sZWF2aW5nPSEwLGl0KGYsXCJhZnRlckxlYXZlXCIsZnVuY3Rpb24oKXt0Ll9sZWF2aW5nPSExLHQuJGZvcmNlVXBkYXRlKCl9KSxybyhlLG8pO2lmKFwiaW4tb3V0XCI9PT1yKXtpZihVdChhKSlyZXR1cm4gdTt2YXIgcCxkPWZ1bmN0aW9uKCl7cCgpfTtpdChjLFwiYWZ0ZXJFbnRlclwiLGQpLGl0KGMsXCJlbnRlckNhbmNlbGxlZFwiLGQpLGl0KGYsXCJkZWxheUxlYXZlXCIsZnVuY3Rpb24oZSl7cD1lfSl9fXJldHVybiBvfX19LHNvPUEoe3RhZzpTdHJpbmcsbW92ZUNsYXNzOlN0cmluZ30sZW8pO2Z1bmN0aW9uIGNvKGUpe2UuZWxtLl9tb3ZlQ2ImJmUuZWxtLl9tb3ZlQ2IoKSxlLmVsbS5fZW50ZXJDYiYmZS5lbG0uX2VudGVyQ2IoKX1mdW5jdGlvbiB1byhlKXtlLmRhdGEubmV3UG9zPWUuZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWZ1bmN0aW9uIGxvKGUpe3ZhciB0PWUuZGF0YS5wb3Msbj1lLmRhdGEubmV3UG9zLHI9dC5sZWZ0LW4ubGVmdCxpPXQudG9wLW4udG9wO2lmKHJ8fGkpe2UuZGF0YS5tb3ZlZD0hMDt2YXIgbz1lLmVsbS5zdHlsZTtvLnRyYW5zZm9ybT1vLldlYmtpdFRyYW5zZm9ybT1cInRyYW5zbGF0ZShcIityK1wicHgsXCIraStcInB4KVwiLG8udHJhbnNpdGlvbkR1cmF0aW9uPVwiMHNcIn19ZGVsZXRlIHNvLm1vZGU7dmFyIGZvPXtUcmFuc2l0aW9uOmFvLFRyYW5zaXRpb25Hcm91cDp7cHJvcHM6c28sYmVmb3JlTW91bnQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5fdXBkYXRlO3RoaXMuX3VwZGF0ZT1mdW5jdGlvbihuLHIpe3ZhciBpPVp0KGUpO2UuX19wYXRjaF9fKGUuX3Zub2RlLGUua2VwdCwhMSwhMCksZS5fdm5vZGU9ZS5rZXB0LGkoKSx0LmNhbGwoZSxuLHIpfX0scmVuZGVyOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRhZ3x8dGhpcy4kdm5vZGUuZGF0YS50YWd8fFwic3BhblwiLG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPXRoaXMucHJldkNoaWxkcmVuPXRoaXMuY2hpbGRyZW4saT10aGlzLiRzbG90cy5kZWZhdWx0fHxbXSxvPXRoaXMuY2hpbGRyZW49W10sYT1ubyh0aGlzKSxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBjPWlbc107Yy50YWcmJm51bGwhPWMua2V5JiYwIT09U3RyaW5nKGMua2V5KS5pbmRleE9mKFwiX192bGlzdFwiKSYmKG8ucHVzaChjKSxuW2Mua2V5XT1jLChjLmRhdGF8fChjLmRhdGE9e30pKS50cmFuc2l0aW9uPWEpfWlmKHIpe2Zvcih2YXIgdT1bXSxsPVtdLGY9MDtmPHIubGVuZ3RoO2YrKyl7dmFyIHA9cltmXTtwLmRhdGEudHJhbnNpdGlvbj1hLHAuZGF0YS5wb3M9cC5lbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbltwLmtleV0/dS5wdXNoKHApOmwucHVzaChwKX10aGlzLmtlcHQ9ZSh0LG51bGwsdSksdGhpcy5yZW1vdmVkPWx9cmV0dXJuIGUodCxudWxsLG8pfSx1cGRhdGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcmV2Q2hpbGRyZW4sdD10aGlzLm1vdmVDbGFzc3x8KHRoaXMubmFtZXx8XCJ2XCIpK1wiLW1vdmVcIjtlLmxlbmd0aCYmdGhpcy5oYXNNb3ZlKGVbMF0uZWxtLHQpJiYoZS5mb3JFYWNoKGNvKSxlLmZvckVhY2godW8pLGUuZm9yRWFjaChsbyksdGhpcy5fcmVmbG93PWRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0LGUuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlLmRhdGEubW92ZWQpe3ZhciBuPWUuZWxtLHI9bi5zdHlsZTtOaShuLHQpLHIudHJhbnNmb3JtPXIuV2Via2l0VHJhbnNmb3JtPXIudHJhbnNpdGlvbkR1cmF0aW9uPVwiXCIsbi5hZGRFdmVudExpc3RlbmVyKEFpLG4uX21vdmVDYj1mdW5jdGlvbiBlKHIpe3ImJnIudGFyZ2V0IT09bnx8ciYmIS90cmFuc2Zvcm0kLy50ZXN0KHIucHJvcGVydHlOYW1lKXx8KG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihBaSxlKSxuLl9tb3ZlQ2I9bnVsbCxqaShuLHQpKX0pfX0pKX0sbWV0aG9kczp7aGFzTW92ZTpmdW5jdGlvbihlLHQpe2lmKCF3aSlyZXR1cm4hMTtpZih0aGlzLl9oYXNNb3ZlKXJldHVybiB0aGlzLl9oYXNNb3ZlO3ZhciBuPWUuY2xvbmVOb2RlKCk7ZS5fdHJhbnNpdGlvbkNsYXNzZXMmJmUuX3RyYW5zaXRpb25DbGFzc2VzLmZvckVhY2goZnVuY3Rpb24oZSl7X2kobixlKX0pLGdpKG4sdCksbi5zdHlsZS5kaXNwbGF5PVwibm9uZVwiLHRoaXMuJGVsLmFwcGVuZENoaWxkKG4pO3ZhciByPU1pKG4pO3JldHVybiB0aGlzLiRlbC5yZW1vdmVDaGlsZChuKSx0aGlzLl9oYXNNb3ZlPXIuaGFzVHJhbnNmb3JtfX19fTt3bi5jb25maWcubXVzdFVzZVByb3A9am4sd24uY29uZmlnLmlzUmVzZXJ2ZWRUYWc9V24sd24uY29uZmlnLmlzUmVzZXJ2ZWRBdHRyPUVuLHduLmNvbmZpZy5nZXRUYWdOYW1lc3BhY2U9Wm4sd24uY29uZmlnLmlzVW5rbm93bkVsZW1lbnQ9ZnVuY3Rpb24oZSl7aWYoIXopcmV0dXJuITA7aWYoV24oZSkpcmV0dXJuITE7aWYoZT1lLnRvTG93ZXJDYXNlKCksbnVsbCE9R25bZV0pcmV0dXJuIEduW2VdO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSk7cmV0dXJuIGUuaW5kZXhPZihcIi1cIik+LTE/R25bZV09dC5jb25zdHJ1Y3Rvcj09PXdpbmRvdy5IVE1MVW5rbm93bkVsZW1lbnR8fHQuY29uc3RydWN0b3I9PT13aW5kb3cuSFRNTEVsZW1lbnQ6R25bZV09L0hUTUxVbmtub3duRWxlbWVudC8udGVzdCh0LnRvU3RyaW5nKCkpfSxBKHduLm9wdGlvbnMuZGlyZWN0aXZlcyxRaSksQSh3bi5vcHRpb25zLmNvbXBvbmVudHMsZm8pLHduLnByb3RvdHlwZS5fX3BhdGNoX189ej96aTpTLHduLnByb3RvdHlwZS4kbW91bnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3ZhciByO3JldHVybiBlLiRlbD10LGUuJG9wdGlvbnMucmVuZGVyfHwoZS4kb3B0aW9ucy5yZW5kZXI9dmUpLFl0KGUsXCJiZWZvcmVNb3VudFwiKSxyPWZ1bmN0aW9uKCl7ZS5fdXBkYXRlKGUuX3JlbmRlcigpLG4pfSxuZXcgZm4oZSxyLFMse2JlZm9yZTpmdW5jdGlvbigpe2UuX2lzTW91bnRlZCYmIWUuX2lzRGVzdHJveWVkJiZZdChlLFwiYmVmb3JlVXBkYXRlXCIpfX0sITApLG49ITEsbnVsbD09ZS4kdm5vZGUmJihlLl9pc01vdW50ZWQ9ITAsWXQoZSxcIm1vdW50ZWRcIikpLGV9KHRoaXMsZT1lJiZ6P1luKGUpOnZvaWQgMCx0KX0seiYmc2V0VGltZW91dChmdW5jdGlvbigpe0YuZGV2dG9vbHMmJm5lJiZuZS5lbWl0KFwiaW5pdFwiLHduKX0sMCk7dmFyIHBvPS9cXHtcXHsoKD86LnxcXHI/XFxuKSs/KVxcfVxcfS9nLHZvPS9bLS4qKz9eJHt9KCl8W1xcXVxcL1xcXFxdL2csaG89ZyhmdW5jdGlvbihlKXt2YXIgdD1lWzBdLnJlcGxhY2Uodm8sXCJcXFxcJCZcIiksbj1lWzFdLnJlcGxhY2Uodm8sXCJcXFxcJCZcIik7cmV0dXJuIG5ldyBSZWdFeHAodCtcIigoPzoufFxcXFxuKSs/KVwiK24sXCJnXCIpfSk7dmFyIG1vPXtzdGF0aWNLZXlzOltcInN0YXRpY0NsYXNzXCJdLHRyYW5zZm9ybU5vZGU6ZnVuY3Rpb24oZSx0KXt0Lndhcm47dmFyIG49RnIoZSxcImNsYXNzXCIpO24mJihlLnN0YXRpY0NsYXNzPUpTT04uc3RyaW5naWZ5KG4pKTt2YXIgcj1JcihlLFwiY2xhc3NcIiwhMSk7ciYmKGUuY2xhc3NCaW5kaW5nPXIpfSxnZW5EYXRhOmZ1bmN0aW9uKGUpe3ZhciB0PVwiXCI7cmV0dXJuIGUuc3RhdGljQ2xhc3MmJih0Kz1cInN0YXRpY0NsYXNzOlwiK2Uuc3RhdGljQ2xhc3MrXCIsXCIpLGUuY2xhc3NCaW5kaW5nJiYodCs9XCJjbGFzczpcIitlLmNsYXNzQmluZGluZytcIixcIiksdH19O3ZhciB5byxnbz17c3RhdGljS2V5czpbXCJzdGF0aWNTdHlsZVwiXSx0cmFuc2Zvcm1Ob2RlOmZ1bmN0aW9uKGUsdCl7dC53YXJuO3ZhciBuPUZyKGUsXCJzdHlsZVwiKTtuJiYoZS5zdGF0aWNTdHlsZT1KU09OLnN0cmluZ2lmeShhaShuKSkpO3ZhciByPUlyKGUsXCJzdHlsZVwiLCExKTtyJiYoZS5zdHlsZUJpbmRpbmc9cil9LGdlbkRhdGE6ZnVuY3Rpb24oZSl7dmFyIHQ9XCJcIjtyZXR1cm4gZS5zdGF0aWNTdHlsZSYmKHQrPVwic3RhdGljU3R5bGU6XCIrZS5zdGF0aWNTdHlsZStcIixcIiksZS5zdHlsZUJpbmRpbmcmJih0Kz1cInN0eWxlOihcIitlLnN0eWxlQmluZGluZytcIiksXCIpLHR9fSxfbz1mdW5jdGlvbihlKXtyZXR1cm4oeW89eW98fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLmlubmVySFRNTD1lLHlvLnRleHRDb250ZW50fSxibz1wKFwiYXJlYSxiYXNlLGJyLGNvbCxlbWJlZCxmcmFtZSxocixpbWcsaW5wdXQsaXNpbmRleCxrZXlnZW4sbGluayxtZXRhLHBhcmFtLHNvdXJjZSx0cmFjayx3YnJcIiksJG89cChcImNvbGdyb3VwLGRkLGR0LGxpLG9wdGlvbnMscCx0ZCx0Zm9vdCx0aCx0aGVhZCx0cixzb3VyY2VcIiksd289cChcImFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxiYXNlLGJsb2NrcXVvdGUsYm9keSxjYXB0aW9uLGNvbCxjb2xncm91cCxkZCxkZXRhaWxzLGRpYWxvZyxkaXYsZGwsZHQsZmllbGRzZXQsZmlnY2FwdGlvbixmaWd1cmUsZm9vdGVyLGZvcm0saDEsaDIsaDMsaDQsaDUsaDYsaGVhZCxoZWFkZXIsaGdyb3VwLGhyLGh0bWwsbGVnZW5kLGxpLG1lbnVpdGVtLG1ldGEsb3B0Z3JvdXAsb3B0aW9uLHBhcmFtLHJwLHJ0LHNvdXJjZSxzdHlsZSxzdW1tYXJ5LHRib2R5LHRkLHRmb290LHRoLHRoZWFkLHRpdGxlLHRyLHRyYWNrXCIpLENvPS9eXFxzKihbXlxcc1wiJzw+XFwvPV0rKSg/OlxccyooPSlcXHMqKD86XCIoW15cIl0qKVwiK3wnKFteJ10qKScrfChbXlxcc1wiJz08PmBdKykpKT8vLHhvPS9eXFxzKigoPzp2LVtcXHctXSs6fEB8OnwjKVxcW1tePV0rXFxdW15cXHNcIic8PlxcLz1dKikoPzpcXHMqKD0pXFxzKig/OlwiKFteXCJdKilcIit8JyhbXiddKiknK3woW15cXHNcIic9PD5gXSspKSk/Lyxrbz1cIlthLXpBLVpfXVtcXFxcLVxcXFwuMC05X2EtekEtWlwiK1Auc291cmNlK1wiXSpcIixBbz1cIigoPzpcIitrbytcIlxcXFw6KT9cIitrbytcIilcIixPbz1uZXcgUmVnRXhwKFwiXjxcIitBbyksU289L15cXHMqKFxcLz8pPi8sVG89bmV3IFJlZ0V4cChcIl48XFxcXC9cIitBbytcIltePl0qPlwiKSxFbz0vXjwhRE9DVFlQRSBbXj5dKz4vaSxObz0vXjwhXFwtLS8sam89L148IVxcWy8sRG89cChcInNjcmlwdCxzdHlsZSx0ZXh0YXJlYVwiLCEwKSxMbz17fSxNbz17XCImbHQ7XCI6XCI8XCIsXCImZ3Q7XCI6XCI+XCIsXCImcXVvdDtcIjonXCInLFwiJmFtcDtcIjpcIiZcIixcIiYjMTA7XCI6XCJcXG5cIixcIiYjOTtcIjpcIlxcdFwiLFwiJiMzOTtcIjpcIidcIn0sSW89LyYoPzpsdHxndHxxdW90fGFtcHwjMzkpOy9nLEZvPS8mKD86bHR8Z3R8cXVvdHxhbXB8IzM5fCMxMHwjOSk7L2csUG89cChcInByZSx0ZXh0YXJlYVwiLCEwKSxSbz1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZQbyhlKSYmXCJcXG5cIj09PXRbMF19O2Z1bmN0aW9uIEhvKGUsdCl7dmFyIG49dD9GbzpJbztyZXR1cm4gZS5yZXBsYWNlKG4sZnVuY3Rpb24oZSl7cmV0dXJuIE1vW2VdfSl9dmFyIEJvLFVvLHpvLFZvLEtvLEpvLHFvLFdvLFpvPS9eQHxedi1vbjovLEdvPS9edi18XkB8XjovLFhvPS8oW1xcc1xcU10qPylcXHMrKD86aW58b2YpXFxzKyhbXFxzXFxTXSopLyxZbz0vLChbXixcXH1cXF1dKikoPzosKFteLFxcfVxcXV0qKSk/JC8sUW89L15cXCh8XFwpJC9nLGVhPS9eXFxbLipcXF0kLyx0YT0vOiguKikkLyxuYT0vXjp8XlxcLnxedi1iaW5kOi8scmE9L1xcLlteLlxcXV0rKD89W15cXF1dKiQpL2csaWE9L152LXNsb3QoOnwkKXxeIy8sb2E9L1tcXHJcXG5dLyxhYT0vXFxzKy9nLHNhPWcoX28pLGNhPVwiX2VtcHR5X1wiO2Z1bmN0aW9uIHVhKGUsdCxuKXtyZXR1cm57dHlwZToxLHRhZzplLGF0dHJzTGlzdDp0LGF0dHJzTWFwOm1hKHQpLHJhd0F0dHJzTWFwOnt9LHBhcmVudDpuLGNoaWxkcmVuOltdfX1mdW5jdGlvbiBsYShlLHQpe0JvPXQud2Fybnx8U3IsSm89dC5pc1ByZVRhZ3x8VCxxbz10Lm11c3RVc2VQcm9wfHxULFdvPXQuZ2V0VGFnTmFtZXNwYWNlfHxUO3QuaXNSZXNlcnZlZFRhZzt6bz1Ucih0Lm1vZHVsZXMsXCJ0cmFuc2Zvcm1Ob2RlXCIpLFZvPVRyKHQubW9kdWxlcyxcInByZVRyYW5zZm9ybU5vZGVcIiksS289VHIodC5tb2R1bGVzLFwicG9zdFRyYW5zZm9ybU5vZGVcIiksVW89dC5kZWxpbWl0ZXJzO3ZhciBuLHIsaT1bXSxvPSExIT09dC5wcmVzZXJ2ZVdoaXRlc3BhY2UsYT10LndoaXRlc3BhY2Uscz0hMSxjPSExO2Z1bmN0aW9uIHUoZSl7aWYobChlKSxzfHxlLnByb2Nlc3NlZHx8KGU9ZmEoZSx0KSksaS5sZW5ndGh8fGU9PT1ufHxuLmlmJiYoZS5lbHNlaWZ8fGUuZWxzZSkmJmRhKG4se2V4cDplLmVsc2VpZixibG9jazplfSksciYmIWUuZm9yYmlkZGVuKWlmKGUuZWxzZWlmfHxlLmVsc2UpYT1lLCh1PWZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2Zvcig7dC0tOyl7aWYoMT09PWVbdF0udHlwZSlyZXR1cm4gZVt0XTtlLnBvcCgpfX0oci5jaGlsZHJlbikpJiZ1LmlmJiZkYSh1LHtleHA6YS5lbHNlaWYsYmxvY2s6YX0pO2Vsc2V7aWYoZS5zbG90U2NvcGUpe3ZhciBvPWUuc2xvdFRhcmdldHx8J1wiZGVmYXVsdFwiJzsoci5zY29wZWRTbG90c3x8KHIuc2NvcGVkU2xvdHM9e30pKVtvXT1lfXIuY2hpbGRyZW4ucHVzaChlKSxlLnBhcmVudD1yfXZhciBhLHU7ZS5jaGlsZHJlbj1lLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5zbG90U2NvcGV9KSxsKGUpLGUucHJlJiYocz0hMSksSm8oZS50YWcpJiYoYz0hMSk7Zm9yKHZhciBmPTA7ZjxLby5sZW5ndGg7ZisrKUtvW2ZdKGUsdCl9ZnVuY3Rpb24gbChlKXtpZighYylmb3IodmFyIHQ7KHQ9ZS5jaGlsZHJlbltlLmNoaWxkcmVuLmxlbmd0aC0xXSkmJjM9PT10LnR5cGUmJlwiIFwiPT09dC50ZXh0OyllLmNoaWxkcmVuLnBvcCgpfXJldHVybiBmdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyLGk9W10sbz10LmV4cGVjdEhUTUwsYT10LmlzVW5hcnlUYWd8fFQscz10LmNhbkJlTGVmdE9wZW5UYWd8fFQsYz0wO2U7KXtpZihuPWUsciYmRG8ocikpe3ZhciB1PTAsbD1yLnRvTG93ZXJDYXNlKCksZj1Mb1tsXXx8KExvW2xdPW5ldyBSZWdFeHAoXCIoW1xcXFxzXFxcXFNdKj8pKDwvXCIrbCtcIltePl0qPilcIixcImlcIikpLHA9ZS5yZXBsYWNlKGYsZnVuY3Rpb24oZSxuLHIpe3JldHVybiB1PXIubGVuZ3RoLERvKGwpfHxcIm5vc2NyaXB0XCI9PT1sfHwobj1uLnJlcGxhY2UoLzwhXFwtLShbXFxzXFxTXSo/KS0tPi9nLFwiJDFcIikucmVwbGFjZSgvPCFcXFtDREFUQVxcWyhbXFxzXFxTXSo/KV1dPi9nLFwiJDFcIikpLFJvKGwsbikmJihuPW4uc2xpY2UoMSkpLHQuY2hhcnMmJnQuY2hhcnMobiksXCJcIn0pO2MrPWUubGVuZ3RoLXAubGVuZ3RoLGU9cCxBKGwsYy11LGMpfWVsc2V7dmFyIGQ9ZS5pbmRleE9mKFwiPFwiKTtpZigwPT09ZCl7aWYoTm8udGVzdChlKSl7dmFyIHY9ZS5pbmRleE9mKFwiLS1cXHgzZVwiKTtpZih2Pj0wKXt0LnNob3VsZEtlZXBDb21tZW50JiZ0LmNvbW1lbnQoZS5zdWJzdHJpbmcoNCx2KSxjLGMrdiszKSxDKHYrMyk7Y29udGludWV9fWlmKGpvLnRlc3QoZSkpe3ZhciBoPWUuaW5kZXhPZihcIl0+XCIpO2lmKGg+PTApe0MoaCsyKTtjb250aW51ZX19dmFyIG09ZS5tYXRjaChFbyk7aWYobSl7QyhtWzBdLmxlbmd0aCk7Y29udGludWV9dmFyIHk9ZS5tYXRjaChUbyk7aWYoeSl7dmFyIGc9YztDKHlbMF0ubGVuZ3RoKSxBKHlbMV0sZyxjKTtjb250aW51ZX12YXIgXz14KCk7aWYoXyl7ayhfKSxSbyhfLnRhZ05hbWUsZSkmJkMoMSk7Y29udGludWV9fXZhciBiPXZvaWQgMCwkPXZvaWQgMCx3PXZvaWQgMDtpZihkPj0wKXtmb3IoJD1lLnNsaWNlKGQpOyEoVG8udGVzdCgkKXx8T28udGVzdCgkKXx8Tm8udGVzdCgkKXx8am8udGVzdCgkKXx8KHc9JC5pbmRleE9mKFwiPFwiLDEpKTwwKTspZCs9dywkPWUuc2xpY2UoZCk7Yj1lLnN1YnN0cmluZygwLGQpfWQ8MCYmKGI9ZSksYiYmQyhiLmxlbmd0aCksdC5jaGFycyYmYiYmdC5jaGFycyhiLGMtYi5sZW5ndGgsYyl9aWYoZT09PW4pe3QuY2hhcnMmJnQuY2hhcnMoZSk7YnJlYWt9fWZ1bmN0aW9uIEModCl7Yys9dCxlPWUuc3Vic3RyaW5nKHQpfWZ1bmN0aW9uIHgoKXt2YXIgdD1lLm1hdGNoKE9vKTtpZih0KXt2YXIgbixyLGk9e3RhZ05hbWU6dFsxXSxhdHRyczpbXSxzdGFydDpjfTtmb3IoQyh0WzBdLmxlbmd0aCk7IShuPWUubWF0Y2goU28pKSYmKHI9ZS5tYXRjaCh4byl8fGUubWF0Y2goQ28pKTspci5zdGFydD1jLEMoclswXS5sZW5ndGgpLHIuZW5kPWMsaS5hdHRycy5wdXNoKHIpO2lmKG4pcmV0dXJuIGkudW5hcnlTbGFzaD1uWzFdLEMoblswXS5sZW5ndGgpLGkuZW5kPWMsaX19ZnVuY3Rpb24gayhlKXt2YXIgbj1lLnRhZ05hbWUsYz1lLnVuYXJ5U2xhc2g7byYmKFwicFwiPT09ciYmd28obikmJkEocikscyhuKSYmcj09PW4mJkEobikpO2Zvcih2YXIgdT1hKG4pfHwhIWMsbD1lLmF0dHJzLmxlbmd0aCxmPW5ldyBBcnJheShsKSxwPTA7cDxsO3ArKyl7dmFyIGQ9ZS5hdHRyc1twXSx2PWRbM118fGRbNF18fGRbNV18fFwiXCIsaD1cImFcIj09PW4mJlwiaHJlZlwiPT09ZFsxXT90LnNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZjp0LnNob3VsZERlY29kZU5ld2xpbmVzO2ZbcF09e25hbWU6ZFsxXSx2YWx1ZTpIbyh2LGgpfX11fHwoaS5wdXNoKHt0YWc6bixsb3dlckNhc2VkVGFnOm4udG9Mb3dlckNhc2UoKSxhdHRyczpmLHN0YXJ0OmUuc3RhcnQsZW5kOmUuZW5kfSkscj1uKSx0LnN0YXJ0JiZ0LnN0YXJ0KG4sZix1LGUuc3RhcnQsZS5lbmQpfWZ1bmN0aW9uIEEoZSxuLG8pe3ZhciBhLHM7aWYobnVsbD09biYmKG49YyksbnVsbD09byYmKG89YyksZSlmb3Iocz1lLnRvTG93ZXJDYXNlKCksYT1pLmxlbmd0aC0xO2E+PTAmJmlbYV0ubG93ZXJDYXNlZFRhZyE9PXM7YS0tKTtlbHNlIGE9MDtpZihhPj0wKXtmb3IodmFyIHU9aS5sZW5ndGgtMTt1Pj1hO3UtLSl0LmVuZCYmdC5lbmQoaVt1XS50YWcsbixvKTtpLmxlbmd0aD1hLHI9YSYmaVthLTFdLnRhZ31lbHNlXCJiclwiPT09cz90LnN0YXJ0JiZ0LnN0YXJ0KGUsW10sITAsbixvKTpcInBcIj09PXMmJih0LnN0YXJ0JiZ0LnN0YXJ0KGUsW10sITEsbixvKSx0LmVuZCYmdC5lbmQoZSxuLG8pKX1BKCl9KGUse3dhcm46Qm8sZXhwZWN0SFRNTDp0LmV4cGVjdEhUTUwsaXNVbmFyeVRhZzp0LmlzVW5hcnlUYWcsY2FuQmVMZWZ0T3BlblRhZzp0LmNhbkJlTGVmdE9wZW5UYWcsc2hvdWxkRGVjb2RlTmV3bGluZXM6dC5zaG91bGREZWNvZGVOZXdsaW5lcyxzaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWY6dC5zaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWYsc2hvdWxkS2VlcENvbW1lbnQ6dC5jb21tZW50cyxvdXRwdXRTb3VyY2VSYW5nZTp0Lm91dHB1dFNvdXJjZVJhbmdlLHN0YXJ0OmZ1bmN0aW9uKGUsbyxhLGwsZil7dmFyIHA9ciYmci5uc3x8V28oZSk7cSYmXCJzdmdcIj09PXAmJihvPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07eWEudGVzdChyLm5hbWUpfHwoci5uYW1lPXIubmFtZS5yZXBsYWNlKGdhLFwiXCIpLHQucHVzaChyKSl9cmV0dXJuIHR9KG8pKTt2YXIgZCx2PXVhKGUsbyxyKTtwJiYodi5ucz1wKSxcInN0eWxlXCIhPT0oZD12KS50YWcmJihcInNjcmlwdFwiIT09ZC50YWd8fGQuYXR0cnNNYXAudHlwZSYmXCJ0ZXh0L2phdmFzY3JpcHRcIiE9PWQuYXR0cnNNYXAudHlwZSl8fHRlKCl8fCh2LmZvcmJpZGRlbj0hMCk7Zm9yKHZhciBoPTA7aDxWby5sZW5ndGg7aCsrKXY9Vm9baF0odix0KXx8djtzfHwoIWZ1bmN0aW9uKGUpe251bGwhPUZyKGUsXCJ2LXByZVwiKSYmKGUucHJlPSEwKX0odiksdi5wcmUmJihzPSEwKSksSm8odi50YWcpJiYoYz0hMCkscz9mdW5jdGlvbihlKXt2YXIgdD1lLmF0dHJzTGlzdCxuPXQubGVuZ3RoO2lmKG4pZm9yKHZhciByPWUuYXR0cnM9bmV3IEFycmF5KG4pLGk9MDtpPG47aSsrKXJbaV09e25hbWU6dFtpXS5uYW1lLHZhbHVlOkpTT04uc3RyaW5naWZ5KHRbaV0udmFsdWUpfSxudWxsIT10W2ldLnN0YXJ0JiYocltpXS5zdGFydD10W2ldLnN0YXJ0LHJbaV0uZW5kPXRbaV0uZW5kKTtlbHNlIGUucHJlfHwoZS5wbGFpbj0hMCl9KHYpOnYucHJvY2Vzc2VkfHwocGEodiksZnVuY3Rpb24oZSl7dmFyIHQ9RnIoZSxcInYtaWZcIik7aWYodCllLmlmPXQsZGEoZSx7ZXhwOnQsYmxvY2s6ZX0pO2Vsc2V7bnVsbCE9RnIoZSxcInYtZWxzZVwiKSYmKGUuZWxzZT0hMCk7dmFyIG49RnIoZSxcInYtZWxzZS1pZlwiKTtuJiYoZS5lbHNlaWY9bil9fSh2KSxmdW5jdGlvbihlKXtudWxsIT1GcihlLFwidi1vbmNlXCIpJiYoZS5vbmNlPSEwKX0odikpLG58fChuPXYpLGE/dSh2KToocj12LGkucHVzaCh2KSl9LGVuZDpmdW5jdGlvbihlLHQsbil7dmFyIG89aVtpLmxlbmd0aC0xXTtpLmxlbmd0aC09MSxyPWlbaS5sZW5ndGgtMV0sdShvKX0sY2hhcnM6ZnVuY3Rpb24oZSx0LG4pe2lmKHImJighcXx8XCJ0ZXh0YXJlYVwiIT09ci50YWd8fHIuYXR0cnNNYXAucGxhY2Vob2xkZXIhPT1lKSl7dmFyIGksdSxsLGY9ci5jaGlsZHJlbjtpZihlPWN8fGUudHJpbSgpP1wic2NyaXB0XCI9PT0oaT1yKS50YWd8fFwic3R5bGVcIj09PWkudGFnP2U6c2EoZSk6Zi5sZW5ndGg/YT9cImNvbmRlbnNlXCI9PT1hJiZvYS50ZXN0KGUpP1wiXCI6XCIgXCI6bz9cIiBcIjpcIlwiOlwiXCIpY3x8XCJjb25kZW5zZVwiIT09YXx8KGU9ZS5yZXBsYWNlKGFhLFwiIFwiKSksIXMmJlwiIFwiIT09ZSYmKHU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10P2hvKHQpOnBvO2lmKG4udGVzdChlKSl7Zm9yKHZhciByLGksbyxhPVtdLHM9W10sYz1uLmxhc3RJbmRleD0wO3I9bi5leGVjKGUpOyl7KGk9ci5pbmRleCk+YyYmKHMucHVzaChvPWUuc2xpY2UoYyxpKSksYS5wdXNoKEpTT04uc3RyaW5naWZ5KG8pKSk7dmFyIHU9QXIoclsxXS50cmltKCkpO2EucHVzaChcIl9zKFwiK3UrXCIpXCIpLHMucHVzaCh7XCJAYmluZGluZ1wiOnV9KSxjPWkrclswXS5sZW5ndGh9cmV0dXJuIGM8ZS5sZW5ndGgmJihzLnB1c2gobz1lLnNsaWNlKGMpKSxhLnB1c2goSlNPTi5zdHJpbmdpZnkobykpKSx7ZXhwcmVzc2lvbjphLmpvaW4oXCIrXCIpLHRva2VuczpzfX19KGUsVW8pKT9sPXt0eXBlOjIsZXhwcmVzc2lvbjp1LmV4cHJlc3Npb24sdG9rZW5zOnUudG9rZW5zLHRleHQ6ZX06XCIgXCI9PT1lJiZmLmxlbmd0aCYmXCIgXCI9PT1mW2YubGVuZ3RoLTFdLnRleHR8fChsPXt0eXBlOjMsdGV4dDplfSksbCYmZi5wdXNoKGwpfX0sY29tbWVudDpmdW5jdGlvbihlLHQsbil7aWYocil7dmFyIGk9e3R5cGU6Myx0ZXh0OmUsaXNDb21tZW50OiEwfTtyLmNoaWxkcmVuLnB1c2goaSl9fX0pLG59ZnVuY3Rpb24gZmEoZSx0KXt2YXIgbixyOyhyPUlyKG49ZSxcImtleVwiKSkmJihuLmtleT1yKSxlLnBsYWluPSFlLmtleSYmIWUuc2NvcGVkU2xvdHMmJiFlLmF0dHJzTGlzdC5sZW5ndGgsZnVuY3Rpb24oZSl7dmFyIHQ9SXIoZSxcInJlZlwiKTt0JiYoZS5yZWY9dCxlLnJlZkluRm9yPWZ1bmN0aW9uKGUpe3ZhciB0PWU7Zm9yKDt0Oyl7aWYodm9pZCAwIT09dC5mb3IpcmV0dXJuITA7dD10LnBhcmVudH1yZXR1cm4hMX0oZSkpfShlKSxmdW5jdGlvbihlKXt2YXIgdDtcInRlbXBsYXRlXCI9PT1lLnRhZz8odD1GcihlLFwic2NvcGVcIiksZS5zbG90U2NvcGU9dHx8RnIoZSxcInNsb3Qtc2NvcGVcIikpOih0PUZyKGUsXCJzbG90LXNjb3BlXCIpKSYmKGUuc2xvdFNjb3BlPXQpO3ZhciBuPUlyKGUsXCJzbG90XCIpO24mJihlLnNsb3RUYXJnZXQ9J1wiXCInPT09bj8nXCJkZWZhdWx0XCInOm4sZS5zbG90VGFyZ2V0RHluYW1pYz0hKCFlLmF0dHJzTWFwW1wiOnNsb3RcIl0mJiFlLmF0dHJzTWFwW1widi1iaW5kOnNsb3RcIl0pLFwidGVtcGxhdGVcIj09PWUudGFnfHxlLnNsb3RTY29wZXx8TnIoZSxcInNsb3RcIixuLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucmF3QXR0cnNNYXBbXCI6XCIrdF18fGUucmF3QXR0cnNNYXBbXCJ2LWJpbmQ6XCIrdF18fGUucmF3QXR0cnNNYXBbdF19KGUsXCJzbG90XCIpKSk7aWYoXCJ0ZW1wbGF0ZVwiPT09ZS50YWcpe3ZhciByPVByKGUsaWEpO2lmKHIpe3ZhciBpPXZhKHIpLG89aS5uYW1lLGE9aS5keW5hbWljO2Uuc2xvdFRhcmdldD1vLGUuc2xvdFRhcmdldER5bmFtaWM9YSxlLnNsb3RTY29wZT1yLnZhbHVlfHxjYX19ZWxzZXt2YXIgcz1QcihlLGlhKTtpZihzKXt2YXIgYz1lLnNjb3BlZFNsb3RzfHwoZS5zY29wZWRTbG90cz17fSksdT12YShzKSxsPXUubmFtZSxmPXUuZHluYW1pYyxwPWNbbF09dWEoXCJ0ZW1wbGF0ZVwiLFtdLGUpO3Auc2xvdFRhcmdldD1sLHAuc2xvdFRhcmdldER5bmFtaWM9ZixwLmNoaWxkcmVuPWUuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGUpe2lmKCFlLnNsb3RTY29wZSlyZXR1cm4gZS5wYXJlbnQ9cCwhMH0pLHAuc2xvdFNjb3BlPXMudmFsdWV8fGNhLGUuY2hpbGRyZW49W10sZS5wbGFpbj0hMX19fShlKSxmdW5jdGlvbihlKXtcInNsb3RcIj09PWUudGFnJiYoZS5zbG90TmFtZT1JcihlLFwibmFtZVwiKSl9KGUpLGZ1bmN0aW9uKGUpe3ZhciB0Oyh0PUlyKGUsXCJpc1wiKSkmJihlLmNvbXBvbmVudD10KTtudWxsIT1GcihlLFwiaW5saW5lLXRlbXBsYXRlXCIpJiYoZS5pbmxpbmVUZW1wbGF0ZT0hMCl9KGUpO2Zvcih2YXIgaT0wO2k8em8ubGVuZ3RoO2krKyllPXpvW2ldKGUsdCl8fGU7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8sYSxzLGMsdT1lLmF0dHJzTGlzdDtmb3IodD0wLG49dS5sZW5ndGg7dDxuO3QrKylpZihyPWk9dVt0XS5uYW1lLG89dVt0XS52YWx1ZSxHby50ZXN0KHIpKWlmKGUuaGFzQmluZGluZ3M9ITAsKGE9aGEoci5yZXBsYWNlKEdvLFwiXCIpKSkmJihyPXIucmVwbGFjZShyYSxcIlwiKSksbmEudGVzdChyKSlyPXIucmVwbGFjZShuYSxcIlwiKSxvPUFyKG8pLChjPWVhLnRlc3QocikpJiYocj1yLnNsaWNlKDEsLTEpKSxhJiYoYS5wcm9wJiYhYyYmXCJpbm5lckh0bWxcIj09PShyPWIocikpJiYocj1cImlubmVySFRNTFwiKSxhLmNhbWVsJiYhYyYmKHI9YihyKSksYS5zeW5jJiYocz1CcihvLFwiJGV2ZW50XCIpLGM/TXIoZSwnXCJ1cGRhdGU6XCIrKCcrcitcIilcIixzLG51bGwsITEsMCx1W3RdLCEwKTooTXIoZSxcInVwZGF0ZTpcIitiKHIpLHMsbnVsbCwhMSwwLHVbdF0pLEMocikhPT1iKHIpJiZNcihlLFwidXBkYXRlOlwiK0MocikscyxudWxsLCExLDAsdVt0XSkpKSksYSYmYS5wcm9wfHwhZS5jb21wb25lbnQmJnFvKGUudGFnLGUuYXR0cnNNYXAudHlwZSxyKT9FcihlLHIsbyx1W3RdLGMpOk5yKGUscixvLHVbdF0sYyk7ZWxzZSBpZihaby50ZXN0KHIpKXI9ci5yZXBsYWNlKFpvLFwiXCIpLChjPWVhLnRlc3QocikpJiYocj1yLnNsaWNlKDEsLTEpKSxNcihlLHIsbyxhLCExLDAsdVt0XSxjKTtlbHNle3ZhciBsPShyPXIucmVwbGFjZShHbyxcIlwiKSkubWF0Y2godGEpLGY9bCYmbFsxXTtjPSExLGYmJihyPXIuc2xpY2UoMCwtKGYubGVuZ3RoKzEpKSxlYS50ZXN0KGYpJiYoZj1mLnNsaWNlKDEsLTEpLGM9ITApKSxEcihlLHIsaSxvLGYsYyxhLHVbdF0pfWVsc2UgTnIoZSxyLEpTT04uc3RyaW5naWZ5KG8pLHVbdF0pLCFlLmNvbXBvbmVudCYmXCJtdXRlZFwiPT09ciYmcW8oZS50YWcsZS5hdHRyc01hcC50eXBlLHIpJiZFcihlLHIsXCJ0cnVlXCIsdVt0XSl9KGUpLGV9ZnVuY3Rpb24gcGEoZSl7dmFyIHQ7aWYodD1GcihlLFwidi1mb3JcIikpe3ZhciBuPWZ1bmN0aW9uKGUpe3ZhciB0PWUubWF0Y2goWG8pO2lmKCF0KXJldHVybjt2YXIgbj17fTtuLmZvcj10WzJdLnRyaW0oKTt2YXIgcj10WzFdLnRyaW0oKS5yZXBsYWNlKFFvLFwiXCIpLGk9ci5tYXRjaChZbyk7aT8obi5hbGlhcz1yLnJlcGxhY2UoWW8sXCJcIikudHJpbSgpLG4uaXRlcmF0b3IxPWlbMV0udHJpbSgpLGlbMl0mJihuLml0ZXJhdG9yMj1pWzJdLnRyaW0oKSkpOm4uYWxpYXM9cjtyZXR1cm4gbn0odCk7biYmQShlLG4pfX1mdW5jdGlvbiBkYShlLHQpe2UuaWZDb25kaXRpb25zfHwoZS5pZkNvbmRpdGlvbnM9W10pLGUuaWZDb25kaXRpb25zLnB1c2godCl9ZnVuY3Rpb24gdmEoZSl7dmFyIHQ9ZS5uYW1lLnJlcGxhY2UoaWEsXCJcIik7cmV0dXJuIHR8fFwiI1wiIT09ZS5uYW1lWzBdJiYodD1cImRlZmF1bHRcIiksZWEudGVzdCh0KT97bmFtZTp0LnNsaWNlKDEsLTEpLGR5bmFtaWM6ITB9OntuYW1lOidcIicrdCsnXCInLGR5bmFtaWM6ITF9fWZ1bmN0aW9uIGhhKGUpe3ZhciB0PWUubWF0Y2gocmEpO2lmKHQpe3ZhciBuPXt9O3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24oZSl7bltlLnNsaWNlKDEpXT0hMH0pLG59fWZ1bmN0aW9uIG1hKGUpe2Zvcih2YXIgdD17fSxuPTAscj1lLmxlbmd0aDtuPHI7bisrKXRbZVtuXS5uYW1lXT1lW25dLnZhbHVlO3JldHVybiB0fXZhciB5YT0vXnhtbG5zOk5TXFxkKy8sZ2E9L15OU1xcZCs6LztmdW5jdGlvbiBfYShlKXtyZXR1cm4gdWEoZS50YWcsZS5hdHRyc0xpc3Quc2xpY2UoKSxlLnBhcmVudCl9dmFyIGJhPVttbyxnbyx7cHJlVHJhbnNmb3JtTm9kZTpmdW5jdGlvbihlLHQpe2lmKFwiaW5wdXRcIj09PWUudGFnKXt2YXIgbixyPWUuYXR0cnNNYXA7aWYoIXJbXCJ2LW1vZGVsXCJdKXJldHVybjtpZigocltcIjp0eXBlXCJdfHxyW1widi1iaW5kOnR5cGVcIl0pJiYobj1JcihlLFwidHlwZVwiKSksci50eXBlfHxufHwhcltcInYtYmluZFwiXXx8KG49XCIoXCIrcltcInYtYmluZFwiXStcIikudHlwZVwiKSxuKXt2YXIgaT1GcihlLFwidi1pZlwiLCEwKSxvPWk/XCImJihcIitpK1wiKVwiOlwiXCIsYT1udWxsIT1GcihlLFwidi1lbHNlXCIsITApLHM9RnIoZSxcInYtZWxzZS1pZlwiLCEwKSxjPV9hKGUpO3BhKGMpLGpyKGMsXCJ0eXBlXCIsXCJjaGVja2JveFwiKSxmYShjLHQpLGMucHJvY2Vzc2VkPSEwLGMuaWY9XCIoXCIrbitcIik9PT0nY2hlY2tib3gnXCIrbyxkYShjLHtleHA6Yy5pZixibG9jazpjfSk7dmFyIHU9X2EoZSk7RnIodSxcInYtZm9yXCIsITApLGpyKHUsXCJ0eXBlXCIsXCJyYWRpb1wiKSxmYSh1LHQpLGRhKGMse2V4cDpcIihcIituK1wiKT09PSdyYWRpbydcIitvLGJsb2NrOnV9KTt2YXIgbD1fYShlKTtyZXR1cm4gRnIobCxcInYtZm9yXCIsITApLGpyKGwsXCI6dHlwZVwiLG4pLGZhKGwsdCksZGEoYyx7ZXhwOmksYmxvY2s6bH0pLGE/Yy5lbHNlPSEwOnMmJihjLmVsc2VpZj1zKSxjfX19fV07dmFyICRhLHdhLENhPXtleHBlY3RIVE1MOiEwLG1vZHVsZXM6YmEsZGlyZWN0aXZlczp7bW9kZWw6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQudmFsdWUsaT10Lm1vZGlmaWVycyxvPWUudGFnLGE9ZS5hdHRyc01hcC50eXBlO2lmKGUuY29tcG9uZW50KXJldHVybiBIcihlLHIsaSksITE7aWYoXCJzZWxlY3RcIj09PW8pIWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0ndmFyICQkc2VsZWN0ZWRWYWwgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoJGV2ZW50LnRhcmdldC5vcHRpb25zLGZ1bmN0aW9uKG8pe3JldHVybiBvLnNlbGVjdGVkfSkubWFwKGZ1bmN0aW9uKG8pe3ZhciB2YWwgPSBcIl92YWx1ZVwiIGluIG8gPyBvLl92YWx1ZSA6IG8udmFsdWU7cmV0dXJuICcrKG4mJm4ubnVtYmVyP1wiX24odmFsKVwiOlwidmFsXCIpK1wifSk7XCI7cj1yK1wiIFwiK0JyKHQsXCIkZXZlbnQudGFyZ2V0Lm11bHRpcGxlID8gJCRzZWxlY3RlZFZhbCA6ICQkc2VsZWN0ZWRWYWxbMF1cIiksTXIoZSxcImNoYW5nZVwiLHIsbnVsbCwhMCl9KGUscixpKTtlbHNlIGlmKFwiaW5wdXRcIj09PW8mJlwiY2hlY2tib3hcIj09PWEpIWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uJiZuLm51bWJlcixpPUlyKGUsXCJ2YWx1ZVwiKXx8XCJudWxsXCIsbz1JcihlLFwidHJ1ZS12YWx1ZVwiKXx8XCJ0cnVlXCIsYT1JcihlLFwiZmFsc2UtdmFsdWVcIil8fFwiZmFsc2VcIjtFcihlLFwiY2hlY2tlZFwiLFwiQXJyYXkuaXNBcnJheShcIit0K1wiKT9faShcIit0K1wiLFwiK2krXCIpPi0xXCIrKFwidHJ1ZVwiPT09bz9cIjooXCIrdCtcIilcIjpcIjpfcShcIit0K1wiLFwiK28rXCIpXCIpKSxNcihlLFwiY2hhbmdlXCIsXCJ2YXIgJCRhPVwiK3QrXCIsJCRlbD0kZXZlbnQudGFyZ2V0LCQkYz0kJGVsLmNoZWNrZWQ/KFwiK28rXCIpOihcIithK1wiKTtpZihBcnJheS5pc0FycmF5KCQkYSkpe3ZhciAkJHY9XCIrKHI/XCJfbihcIitpK1wiKVwiOmkpK1wiLCQkaT1faSgkJGEsJCR2KTtpZigkJGVsLmNoZWNrZWQpeyQkaTwwJiYoXCIrQnIodCxcIiQkYS5jb25jYXQoWyQkdl0pXCIpK1wiKX1lbHNleyQkaT4tMSYmKFwiK0JyKHQsXCIkJGEuc2xpY2UoMCwkJGkpLmNvbmNhdCgkJGEuc2xpY2UoJCRpKzEpKVwiKStcIil9fWVsc2V7XCIrQnIodCxcIiQkY1wiKStcIn1cIixudWxsLCEwKX0oZSxyLGkpO2Vsc2UgaWYoXCJpbnB1dFwiPT09byYmXCJyYWRpb1wiPT09YSkhZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4mJm4ubnVtYmVyLGk9SXIoZSxcInZhbHVlXCIpfHxcIm51bGxcIjtFcihlLFwiY2hlY2tlZFwiLFwiX3EoXCIrdCtcIixcIisoaT1yP1wiX24oXCIraStcIilcIjppKStcIilcIiksTXIoZSxcImNoYW5nZVwiLEJyKHQsaSksbnVsbCwhMCl9KGUscixpKTtlbHNlIGlmKFwiaW5wdXRcIj09PW98fFwidGV4dGFyZWFcIj09PW8pIWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLmF0dHJzTWFwLnR5cGUsaT1ufHx7fSxvPWkubGF6eSxhPWkubnVtYmVyLHM9aS50cmltLGM9IW8mJlwicmFuZ2VcIiE9PXIsdT1vP1wiY2hhbmdlXCI6XCJyYW5nZVwiPT09cj9XcjpcImlucHV0XCIsbD1cIiRldmVudC50YXJnZXQudmFsdWVcIjtzJiYobD1cIiRldmVudC50YXJnZXQudmFsdWUudHJpbSgpXCIpLGEmJihsPVwiX24oXCIrbCtcIilcIik7dmFyIGY9QnIodCxsKTtjJiYoZj1cImlmKCRldmVudC50YXJnZXQuY29tcG9zaW5nKXJldHVybjtcIitmKSxFcihlLFwidmFsdWVcIixcIihcIit0K1wiKVwiKSxNcihlLHUsZixudWxsLCEwKSwoc3x8YSkmJk1yKGUsXCJibHVyXCIsXCIkZm9yY2VVcGRhdGUoKVwiKX0oZSxyLGkpO2Vsc2UgaWYoIUYuaXNSZXNlcnZlZFRhZyhvKSlyZXR1cm4gSHIoZSxyLGkpLCExO3JldHVybiEwfSx0ZXh0OmZ1bmN0aW9uKGUsdCl7dC52YWx1ZSYmRXIoZSxcInRleHRDb250ZW50XCIsXCJfcyhcIit0LnZhbHVlK1wiKVwiLHQpfSxodG1sOmZ1bmN0aW9uKGUsdCl7dC52YWx1ZSYmRXIoZSxcImlubmVySFRNTFwiLFwiX3MoXCIrdC52YWx1ZStcIilcIix0KX19LGlzUHJlVGFnOmZ1bmN0aW9uKGUpe3JldHVyblwicHJlXCI9PT1lfSxpc1VuYXJ5VGFnOmJvLG11c3RVc2VQcm9wOmpuLGNhbkJlTGVmdE9wZW5UYWc6JG8saXNSZXNlcnZlZFRhZzpXbixnZXRUYWdOYW1lc3BhY2U6Wm4sc3RhdGljS2V5czpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jb25jYXQodC5zdGF0aWNLZXlzfHxbXSl9LFtdKS5qb2luKFwiLFwiKX0oYmEpfSx4YT1nKGZ1bmN0aW9uKGUpe3JldHVybiBwKFwidHlwZSx0YWcsYXR0cnNMaXN0LGF0dHJzTWFwLHBsYWluLHBhcmVudCxjaGlsZHJlbixhdHRycyxzdGFydCxlbmQscmF3QXR0cnNNYXBcIisoZT9cIixcIitlOlwiXCIpKX0pO2Z1bmN0aW9uIGthKGUsdCl7ZSYmKCRhPXhhKHQuc3RhdGljS2V5c3x8XCJcIiksd2E9dC5pc1Jlc2VydmVkVGFnfHxULGZ1bmN0aW9uIGUodCl7dC5zdGF0aWM9ZnVuY3Rpb24oZSl7aWYoMj09PWUudHlwZSlyZXR1cm4hMTtpZigzPT09ZS50eXBlKXJldHVybiEwO3JldHVybiEoIWUucHJlJiYoZS5oYXNCaW5kaW5nc3x8ZS5pZnx8ZS5mb3J8fGQoZS50YWcpfHwhd2EoZS50YWcpfHxmdW5jdGlvbihlKXtmb3IoO2UucGFyZW50Oyl7aWYoXCJ0ZW1wbGF0ZVwiIT09KGU9ZS5wYXJlbnQpLnRhZylyZXR1cm4hMTtpZihlLmZvcilyZXR1cm4hMH1yZXR1cm4hMX0oZSl8fCFPYmplY3Qua2V5cyhlKS5ldmVyeSgkYSkpKX0odCk7aWYoMT09PXQudHlwZSl7aWYoIXdhKHQudGFnKSYmXCJzbG90XCIhPT10LnRhZyYmbnVsbD09dC5hdHRyc01hcFtcImlubGluZS10ZW1wbGF0ZVwiXSlyZXR1cm47Zm9yKHZhciBuPTAscj10LmNoaWxkcmVuLmxlbmd0aDtuPHI7bisrKXt2YXIgaT10LmNoaWxkcmVuW25dO2UoaSksaS5zdGF0aWN8fCh0LnN0YXRpYz0hMSl9aWYodC5pZkNvbmRpdGlvbnMpZm9yKHZhciBvPTEsYT10LmlmQ29uZGl0aW9ucy5sZW5ndGg7bzxhO28rKyl7dmFyIHM9dC5pZkNvbmRpdGlvbnNbb10uYmxvY2s7ZShzKSxzLnN0YXRpY3x8KHQuc3RhdGljPSExKX19fShlKSxmdW5jdGlvbiBlKHQsbil7aWYoMT09PXQudHlwZSl7aWYoKHQuc3RhdGljfHx0Lm9uY2UpJiYodC5zdGF0aWNJbkZvcj1uKSx0LnN0YXRpYyYmdC5jaGlsZHJlbi5sZW5ndGgmJigxIT09dC5jaGlsZHJlbi5sZW5ndGh8fDMhPT10LmNoaWxkcmVuWzBdLnR5cGUpKXJldHVybiB2b2lkKHQuc3RhdGljUm9vdD0hMCk7aWYodC5zdGF0aWNSb290PSExLHQuY2hpbGRyZW4pZm9yKHZhciByPTAsaT10LmNoaWxkcmVuLmxlbmd0aDtyPGk7cisrKWUodC5jaGlsZHJlbltyXSxufHwhIXQuZm9yKTtpZih0LmlmQ29uZGl0aW9ucylmb3IodmFyIG89MSxhPXQuaWZDb25kaXRpb25zLmxlbmd0aDtvPGE7bysrKWUodC5pZkNvbmRpdGlvbnNbb10uYmxvY2ssbil9fShlLCExKSl9dmFyIEFhPS9eKFtcXHckX10rfFxcKFteKV0qP1xcKSlcXHMqPT58XmZ1bmN0aW9uXFxzKig/OltcXHckXSspP1xccypcXCgvLE9hPS9cXChbXildKj9cXCk7KiQvLFNhPS9eW0EtWmEtel8kXVtcXHckXSooPzpcXC5bQS1aYS16XyRdW1xcdyRdKnxcXFsnW14nXSo/J118XFxbXCJbXlwiXSo/XCJdfFxcW1xcZCtdfFxcW1tBLVphLXpfJF1bXFx3JF0qXSkqJC8sVGE9e2VzYzoyNyx0YWI6OSxlbnRlcjoxMyxzcGFjZTozMix1cDozOCxsZWZ0OjM3LHJpZ2h0OjM5LGRvd246NDAsZGVsZXRlOls4LDQ2XX0sRWE9e2VzYzpbXCJFc2NcIixcIkVzY2FwZVwiXSx0YWI6XCJUYWJcIixlbnRlcjpcIkVudGVyXCIsc3BhY2U6W1wiIFwiLFwiU3BhY2ViYXJcIl0sdXA6W1wiVXBcIixcIkFycm93VXBcIl0sbGVmdDpbXCJMZWZ0XCIsXCJBcnJvd0xlZnRcIl0scmlnaHQ6W1wiUmlnaHRcIixcIkFycm93UmlnaHRcIl0sZG93bjpbXCJEb3duXCIsXCJBcnJvd0Rvd25cIl0sZGVsZXRlOltcIkJhY2tzcGFjZVwiLFwiRGVsZXRlXCIsXCJEZWxcIl19LE5hPWZ1bmN0aW9uKGUpe3JldHVyblwiaWYoXCIrZStcIilyZXR1cm4gbnVsbDtcIn0samE9e3N0b3A6XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCIscHJldmVudDpcIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1wiLHNlbGY6TmEoXCIkZXZlbnQudGFyZ2V0ICE9PSAkZXZlbnQuY3VycmVudFRhcmdldFwiKSxjdHJsOk5hKFwiISRldmVudC5jdHJsS2V5XCIpLHNoaWZ0Ok5hKFwiISRldmVudC5zaGlmdEtleVwiKSxhbHQ6TmEoXCIhJGV2ZW50LmFsdEtleVwiKSxtZXRhOk5hKFwiISRldmVudC5tZXRhS2V5XCIpLGxlZnQ6TmEoXCInYnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMFwiKSxtaWRkbGU6TmEoXCInYnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMVwiKSxyaWdodDpOYShcIididXR0b24nIGluICRldmVudCAmJiAkZXZlbnQuYnV0dG9uICE9PSAyXCIpfTtmdW5jdGlvbiBEYShlLHQpe3ZhciBuPXQ/XCJuYXRpdmVPbjpcIjpcIm9uOlwiLHI9XCJcIixpPVwiXCI7Zm9yKHZhciBvIGluIGUpe3ZhciBhPUxhKGVbb10pO2Vbb10mJmVbb10uZHluYW1pYz9pKz1vK1wiLFwiK2ErXCIsXCI6cis9J1wiJytvKydcIjonK2ErXCIsXCJ9cmV0dXJuIHI9XCJ7XCIrci5zbGljZSgwLC0xKStcIn1cIixpP24rXCJfZChcIityK1wiLFtcIitpLnNsaWNlKDAsLTEpK1wiXSlcIjpuK3J9ZnVuY3Rpb24gTGEoZSl7aWYoIWUpcmV0dXJuXCJmdW5jdGlvbigpe31cIjtpZihBcnJheS5pc0FycmF5KGUpKXJldHVyblwiW1wiK2UubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBMYShlKX0pLmpvaW4oXCIsXCIpK1wiXVwiO3ZhciB0PVNhLnRlc3QoZS52YWx1ZSksbj1BYS50ZXN0KGUudmFsdWUpLHI9U2EudGVzdChlLnZhbHVlLnJlcGxhY2UoT2EsXCJcIikpO2lmKGUubW9kaWZpZXJzKXt2YXIgaT1cIlwiLG89XCJcIixhPVtdO2Zvcih2YXIgcyBpbiBlLm1vZGlmaWVycylpZihqYVtzXSlvKz1qYVtzXSxUYVtzXSYmYS5wdXNoKHMpO2Vsc2UgaWYoXCJleGFjdFwiPT09cyl7dmFyIGM9ZS5tb2RpZmllcnM7bys9TmEoW1wiY3RybFwiLFwic2hpZnRcIixcImFsdFwiLFwibWV0YVwiXS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWNbZV19KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuXCIkZXZlbnQuXCIrZStcIktleVwifSkuam9pbihcInx8XCIpKX1lbHNlIGEucHVzaChzKTtyZXR1cm4gYS5sZW5ndGgmJihpKz1mdW5jdGlvbihlKXtyZXR1cm5cImlmKCEkZXZlbnQudHlwZS5pbmRleE9mKCdrZXknKSYmXCIrZS5tYXAoTWEpLmpvaW4oXCImJlwiKStcIilyZXR1cm4gbnVsbDtcIn0oYSkpLG8mJihpKz1vKSxcImZ1bmN0aW9uKCRldmVudCl7XCIraSsodD9cInJldHVybiBcIitlLnZhbHVlK1wiKCRldmVudClcIjpuP1wicmV0dXJuIChcIitlLnZhbHVlK1wiKSgkZXZlbnQpXCI6cj9cInJldHVybiBcIitlLnZhbHVlOmUudmFsdWUpK1wifVwifXJldHVybiB0fHxuP2UudmFsdWU6XCJmdW5jdGlvbigkZXZlbnQpe1wiKyhyP1wicmV0dXJuIFwiK2UudmFsdWU6ZS52YWx1ZSkrXCJ9XCJ9ZnVuY3Rpb24gTWEoZSl7dmFyIHQ9cGFyc2VJbnQoZSwxMCk7aWYodClyZXR1cm5cIiRldmVudC5rZXlDb2RlIT09XCIrdDt2YXIgbj1UYVtlXSxyPUVhW2VdO3JldHVyblwiX2soJGV2ZW50LmtleUNvZGUsXCIrSlNPTi5zdHJpbmdpZnkoZSkrXCIsXCIrSlNPTi5zdHJpbmdpZnkobikrXCIsJGV2ZW50LmtleSxcIitKU09OLnN0cmluZ2lmeShyKStcIilcIn12YXIgSWE9e29uOmZ1bmN0aW9uKGUsdCl7ZS53cmFwTGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3JldHVyblwiX2coXCIrZStcIixcIit0LnZhbHVlK1wiKVwifX0sYmluZDpmdW5jdGlvbihlLHQpe2Uud3JhcERhdGE9ZnVuY3Rpb24obil7cmV0dXJuXCJfYihcIituK1wiLCdcIitlLnRhZytcIicsXCIrdC52YWx1ZStcIixcIisodC5tb2RpZmllcnMmJnQubW9kaWZpZXJzLnByb3A/XCJ0cnVlXCI6XCJmYWxzZVwiKSsodC5tb2RpZmllcnMmJnQubW9kaWZpZXJzLnN5bmM/XCIsdHJ1ZVwiOlwiXCIpK1wiKVwifX0sY2xvYWs6U30sRmE9ZnVuY3Rpb24oZSl7dGhpcy5vcHRpb25zPWUsdGhpcy53YXJuPWUud2Fybnx8U3IsdGhpcy50cmFuc2Zvcm1zPVRyKGUubW9kdWxlcyxcInRyYW5zZm9ybUNvZGVcIiksdGhpcy5kYXRhR2VuRm5zPVRyKGUubW9kdWxlcyxcImdlbkRhdGFcIiksdGhpcy5kaXJlY3RpdmVzPUEoQSh7fSxJYSksZS5kaXJlY3RpdmVzKTt2YXIgdD1lLmlzUmVzZXJ2ZWRUYWd8fFQ7dGhpcy5tYXliZUNvbXBvbmVudD1mdW5jdGlvbihlKXtyZXR1cm4hIWUuY29tcG9uZW50fHwhdChlLnRhZyl9LHRoaXMub25jZUlkPTAsdGhpcy5zdGF0aWNSZW5kZXJGbnM9W10sdGhpcy5wcmU9ITF9O2Z1bmN0aW9uIFBhKGUsdCl7dmFyIG49bmV3IEZhKHQpO3JldHVybntyZW5kZXI6XCJ3aXRoKHRoaXMpe3JldHVybiBcIisoZT9SYShlLG4pOidfYyhcImRpdlwiKScpK1wifVwiLHN0YXRpY1JlbmRlckZuczpuLnN0YXRpY1JlbmRlckZuc319ZnVuY3Rpb24gUmEoZSx0KXtpZihlLnBhcmVudCYmKGUucHJlPWUucHJlfHxlLnBhcmVudC5wcmUpLGUuc3RhdGljUm9vdCYmIWUuc3RhdGljUHJvY2Vzc2VkKXJldHVybiBIYShlLHQpO2lmKGUub25jZSYmIWUub25jZVByb2Nlc3NlZClyZXR1cm4gQmEoZSx0KTtpZihlLmZvciYmIWUuZm9yUHJvY2Vzc2VkKXJldHVybiB6YShlLHQpO2lmKGUuaWYmJiFlLmlmUHJvY2Vzc2VkKXJldHVybiBVYShlLHQpO2lmKFwidGVtcGxhdGVcIiE9PWUudGFnfHxlLnNsb3RUYXJnZXR8fHQucHJlKXtpZihcInNsb3RcIj09PWUudGFnKXJldHVybiBmdW5jdGlvbihlLHQpe3ZhciBuPWUuc2xvdE5hbWV8fCdcImRlZmF1bHRcIicscj1xYShlLHQpLGk9XCJfdChcIituKyhyP1wiLFwiK3I6XCJcIiksbz1lLmF0dHJzfHxlLmR5bmFtaWNBdHRycz9HYSgoZS5hdHRyc3x8W10pLmNvbmNhdChlLmR5bmFtaWNBdHRyc3x8W10pLm1hcChmdW5jdGlvbihlKXtyZXR1cm57bmFtZTpiKGUubmFtZSksdmFsdWU6ZS52YWx1ZSxkeW5hbWljOmUuZHluYW1pY319KSk6bnVsbCxhPWUuYXR0cnNNYXBbXCJ2LWJpbmRcIl07IW8mJiFhfHxyfHwoaSs9XCIsbnVsbFwiKTtvJiYoaSs9XCIsXCIrbyk7YSYmKGkrPShvP1wiXCI6XCIsbnVsbFwiKStcIixcIithKTtyZXR1cm4gaStcIilcIn0oZSx0KTt2YXIgbjtpZihlLmNvbXBvbmVudCluPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10LmlubGluZVRlbXBsYXRlP251bGw6cWEodCxuLCEwKTtyZXR1cm5cIl9jKFwiK2UrXCIsXCIrVmEodCxuKSsocj9cIixcIityOlwiXCIpK1wiKVwifShlLmNvbXBvbmVudCxlLHQpO2Vsc2V7dmFyIHI7KCFlLnBsYWlufHxlLnByZSYmdC5tYXliZUNvbXBvbmVudChlKSkmJihyPVZhKGUsdCkpO3ZhciBpPWUuaW5saW5lVGVtcGxhdGU/bnVsbDpxYShlLHQsITApO249XCJfYygnXCIrZS50YWcrXCInXCIrKHI/XCIsXCIrcjpcIlwiKSsoaT9cIixcIitpOlwiXCIpK1wiKVwifWZvcih2YXIgbz0wO288dC50cmFuc2Zvcm1zLmxlbmd0aDtvKyspbj10LnRyYW5zZm9ybXNbb10oZSxuKTtyZXR1cm4gbn1yZXR1cm4gcWEoZSx0KXx8XCJ2b2lkIDBcIn1mdW5jdGlvbiBIYShlLHQpe2Uuc3RhdGljUHJvY2Vzc2VkPSEwO3ZhciBuPXQucHJlO3JldHVybiBlLnByZSYmKHQucHJlPWUucHJlKSx0LnN0YXRpY1JlbmRlckZucy5wdXNoKFwid2l0aCh0aGlzKXtyZXR1cm4gXCIrUmEoZSx0KStcIn1cIiksdC5wcmU9bixcIl9tKFwiKyh0LnN0YXRpY1JlbmRlckZucy5sZW5ndGgtMSkrKGUuc3RhdGljSW5Gb3I/XCIsdHJ1ZVwiOlwiXCIpK1wiKVwifWZ1bmN0aW9uIEJhKGUsdCl7aWYoZS5vbmNlUHJvY2Vzc2VkPSEwLGUuaWYmJiFlLmlmUHJvY2Vzc2VkKXJldHVybiBVYShlLHQpO2lmKGUuc3RhdGljSW5Gb3Ipe2Zvcih2YXIgbj1cIlwiLHI9ZS5wYXJlbnQ7cjspe2lmKHIuZm9yKXtuPXIua2V5O2JyZWFrfXI9ci5wYXJlbnR9cmV0dXJuIG4/XCJfbyhcIitSYShlLHQpK1wiLFwiK3Qub25jZUlkKysrXCIsXCIrbitcIilcIjpSYShlLHQpfXJldHVybiBIYShlLHQpfWZ1bmN0aW9uIFVhKGUsdCxuLHIpe3JldHVybiBlLmlmUHJvY2Vzc2VkPSEwLGZ1bmN0aW9uIGUodCxuLHIsaSl7aWYoIXQubGVuZ3RoKXJldHVybiBpfHxcIl9lKClcIjt2YXIgbz10LnNoaWZ0KCk7cmV0dXJuIG8uZXhwP1wiKFwiK28uZXhwK1wiKT9cIithKG8uYmxvY2spK1wiOlwiK2UodCxuLHIsaSk6XCJcIithKG8uYmxvY2spO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIHI/cihlLG4pOmUub25jZT9CYShlLG4pOlJhKGUsbil9fShlLmlmQ29uZGl0aW9ucy5zbGljZSgpLHQsbixyKX1mdW5jdGlvbiB6YShlLHQsbixyKXt2YXIgaT1lLmZvcixvPWUuYWxpYXMsYT1lLml0ZXJhdG9yMT9cIixcIitlLml0ZXJhdG9yMTpcIlwiLHM9ZS5pdGVyYXRvcjI/XCIsXCIrZS5pdGVyYXRvcjI6XCJcIjtyZXR1cm4gZS5mb3JQcm9jZXNzZWQ9ITAsKHJ8fFwiX2xcIikrXCIoKFwiK2krXCIpLGZ1bmN0aW9uKFwiK28rYStzK1wiKXtyZXR1cm4gXCIrKG58fFJhKShlLHQpK1wifSlcIn1mdW5jdGlvbiBWYShlLHQpe3ZhciBuPVwie1wiLHI9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmRpcmVjdGl2ZXM7aWYoIW4pcmV0dXJuO3ZhciByLGksbyxhLHM9XCJkaXJlY3RpdmVzOltcIixjPSExO2ZvcihyPTAsaT1uLmxlbmd0aDtyPGk7cisrKXtvPW5bcl0sYT0hMDt2YXIgdT10LmRpcmVjdGl2ZXNbby5uYW1lXTt1JiYoYT0hIXUoZSxvLHQud2FybikpLGEmJihjPSEwLHMrPSd7bmFtZTpcIicrby5uYW1lKydcIixyYXdOYW1lOlwiJytvLnJhd05hbWUrJ1wiJysoby52YWx1ZT9cIix2YWx1ZTooXCIrby52YWx1ZStcIiksZXhwcmVzc2lvbjpcIitKU09OLnN0cmluZ2lmeShvLnZhbHVlKTpcIlwiKSsoby5hcmc/XCIsYXJnOlwiKyhvLmlzRHluYW1pY0FyZz9vLmFyZzonXCInK28uYXJnKydcIicpOlwiXCIpKyhvLm1vZGlmaWVycz9cIixtb2RpZmllcnM6XCIrSlNPTi5zdHJpbmdpZnkoby5tb2RpZmllcnMpOlwiXCIpK1wifSxcIil9aWYoYylyZXR1cm4gcy5zbGljZSgwLC0xKStcIl1cIn0oZSx0KTtyJiYobis9citcIixcIiksZS5rZXkmJihuKz1cImtleTpcIitlLmtleStcIixcIiksZS5yZWYmJihuKz1cInJlZjpcIitlLnJlZitcIixcIiksZS5yZWZJbkZvciYmKG4rPVwicmVmSW5Gb3I6dHJ1ZSxcIiksZS5wcmUmJihuKz1cInByZTp0cnVlLFwiKSxlLmNvbXBvbmVudCYmKG4rPSd0YWc6XCInK2UudGFnKydcIiwnKTtmb3IodmFyIGk9MDtpPHQuZGF0YUdlbkZucy5sZW5ndGg7aSsrKW4rPXQuZGF0YUdlbkZuc1tpXShlKTtpZihlLmF0dHJzJiYobis9XCJhdHRyczpcIitHYShlLmF0dHJzKStcIixcIiksZS5wcm9wcyYmKG4rPVwiZG9tUHJvcHM6XCIrR2EoZS5wcm9wcykrXCIsXCIpLGUuZXZlbnRzJiYobis9RGEoZS5ldmVudHMsITEpK1wiLFwiKSxlLm5hdGl2ZUV2ZW50cyYmKG4rPURhKGUubmF0aXZlRXZlbnRzLCEwKStcIixcIiksZS5zbG90VGFyZ2V0JiYhZS5zbG90U2NvcGUmJihuKz1cInNsb3Q6XCIrZS5zbG90VGFyZ2V0K1wiLFwiKSxlLnNjb3BlZFNsb3RzJiYobis9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuZm9yfHxPYmplY3Qua2V5cyh0KS5zb21lKGZ1bmN0aW9uKGUpe3ZhciBuPXRbZV07cmV0dXJuIG4uc2xvdFRhcmdldER5bmFtaWN8fG4uaWZ8fG4uZm9yfHxLYShuKX0pLGk9ISFlLmlmO2lmKCFyKWZvcih2YXIgbz1lLnBhcmVudDtvOyl7aWYoby5zbG90U2NvcGUmJm8uc2xvdFNjb3BlIT09Y2F8fG8uZm9yKXtyPSEwO2JyZWFrfW8uaWYmJihpPSEwKSxvPW8ucGFyZW50fXZhciBhPU9iamVjdC5rZXlzKHQpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gSmEodFtlXSxuKX0pLmpvaW4oXCIsXCIpO3JldHVyblwic2NvcGVkU2xvdHM6X3UoW1wiK2ErXCJdXCIrKHI/XCIsbnVsbCx0cnVlXCI6XCJcIikrKCFyJiZpP1wiLG51bGwsZmFsc2UsXCIrZnVuY3Rpb24oZSl7dmFyIHQ9NTM4MSxuPWUubGVuZ3RoO2Zvcig7bjspdD0zMyp0XmUuY2hhckNvZGVBdCgtLW4pO3JldHVybiB0Pj4+MH0oYSk6XCJcIikrXCIpXCJ9KGUsZS5zY29wZWRTbG90cyx0KStcIixcIiksZS5tb2RlbCYmKG4rPVwibW9kZWw6e3ZhbHVlOlwiK2UubW9kZWwudmFsdWUrXCIsY2FsbGJhY2s6XCIrZS5tb2RlbC5jYWxsYmFjaytcIixleHByZXNzaW9uOlwiK2UubW9kZWwuZXhwcmVzc2lvbitcIn0sXCIpLGUuaW5saW5lVGVtcGxhdGUpe3ZhciBvPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5jaGlsZHJlblswXTtpZihuJiYxPT09bi50eXBlKXt2YXIgcj1QYShuLHQub3B0aW9ucyk7cmV0dXJuXCJpbmxpbmVUZW1wbGF0ZTp7cmVuZGVyOmZ1bmN0aW9uKCl7XCIrci5yZW5kZXIrXCJ9LHN0YXRpY1JlbmRlckZuczpbXCIrci5zdGF0aWNSZW5kZXJGbnMubWFwKGZ1bmN0aW9uKGUpe3JldHVyblwiZnVuY3Rpb24oKXtcIitlK1wifVwifSkuam9pbihcIixcIikrXCJdfVwifX0oZSx0KTtvJiYobis9bytcIixcIil9cmV0dXJuIG49bi5yZXBsYWNlKC8sJC8sXCJcIikrXCJ9XCIsZS5keW5hbWljQXR0cnMmJihuPVwiX2IoXCIrbisnLFwiJytlLnRhZysnXCIsJytHYShlLmR5bmFtaWNBdHRycykrXCIpXCIpLGUud3JhcERhdGEmJihuPWUud3JhcERhdGEobikpLGUud3JhcExpc3RlbmVycyYmKG49ZS53cmFwTGlzdGVuZXJzKG4pKSxufWZ1bmN0aW9uIEthKGUpe3JldHVybiAxPT09ZS50eXBlJiYoXCJzbG90XCI9PT1lLnRhZ3x8ZS5jaGlsZHJlbi5zb21lKEthKSl9ZnVuY3Rpb24gSmEoZSx0KXt2YXIgbj1lLmF0dHJzTWFwW1wic2xvdC1zY29wZVwiXTtpZihlLmlmJiYhZS5pZlByb2Nlc3NlZCYmIW4pcmV0dXJuIFVhKGUsdCxKYSxcIm51bGxcIik7aWYoZS5mb3ImJiFlLmZvclByb2Nlc3NlZClyZXR1cm4gemEoZSx0LEphKTt2YXIgcj1lLnNsb3RTY29wZT09PWNhP1wiXCI6U3RyaW5nKGUuc2xvdFNjb3BlKSxpPVwiZnVuY3Rpb24oXCIrcitcIil7cmV0dXJuIFwiKyhcInRlbXBsYXRlXCI9PT1lLnRhZz9lLmlmJiZuP1wiKFwiK2UuaWYrXCIpP1wiKyhxYShlLHQpfHxcInVuZGVmaW5lZFwiKStcIjp1bmRlZmluZWRcIjpxYShlLHQpfHxcInVuZGVmaW5lZFwiOlJhKGUsdCkpK1wifVwiLG89cj9cIlwiOlwiLHByb3h5OnRydWVcIjtyZXR1cm5cIntrZXk6XCIrKGUuc2xvdFRhcmdldHx8J1wiZGVmYXVsdFwiJykrXCIsZm46XCIraStvK1wifVwifWZ1bmN0aW9uIHFhKGUsdCxuLHIsaSl7dmFyIG89ZS5jaGlsZHJlbjtpZihvLmxlbmd0aCl7dmFyIGE9b1swXTtpZigxPT09by5sZW5ndGgmJmEuZm9yJiZcInRlbXBsYXRlXCIhPT1hLnRhZyYmXCJzbG90XCIhPT1hLnRhZyl7dmFyIHM9bj90Lm1heWJlQ29tcG9uZW50KGEpP1wiLDFcIjpcIiwwXCI6XCJcIjtyZXR1cm5cIlwiKyhyfHxSYSkoYSx0KStzfXZhciBjPW4/ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MCxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBpPWVbcl07aWYoMT09PWkudHlwZSl7aWYoV2EoaSl8fGkuaWZDb25kaXRpb25zJiZpLmlmQ29uZGl0aW9ucy5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBXYShlLmJsb2NrKX0pKXtuPTI7YnJlYWt9KHQoaSl8fGkuaWZDb25kaXRpb25zJiZpLmlmQ29uZGl0aW9ucy5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiB0KGUuYmxvY2spfSkpJiYobj0xKX19cmV0dXJuIG59KG8sdC5tYXliZUNvbXBvbmVudCk6MCx1PWl8fFphO3JldHVyblwiW1wiK28ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB1KGUsdCl9KS5qb2luKFwiLFwiKStcIl1cIisoYz9cIixcIitjOlwiXCIpfX1mdW5jdGlvbiBXYShlKXtyZXR1cm4gdm9pZCAwIT09ZS5mb3J8fFwidGVtcGxhdGVcIj09PWUudGFnfHxcInNsb3RcIj09PWUudGFnfWZ1bmN0aW9uIFphKGUsdCl7cmV0dXJuIDE9PT1lLnR5cGU/UmEoZSx0KTozPT09ZS50eXBlJiZlLmlzQ29tbWVudD8ocj1lLFwiX2UoXCIrSlNPTi5zdHJpbmdpZnkoci50ZXh0KStcIilcIik6XCJfdihcIisoMj09PShuPWUpLnR5cGU/bi5leHByZXNzaW9uOlhhKEpTT04uc3RyaW5naWZ5KG4udGV4dCkpKStcIilcIjt2YXIgbixyfWZ1bmN0aW9uIEdhKGUpe2Zvcih2YXIgdD1cIlwiLG49XCJcIixyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBpPWVbcl0sbz1YYShpLnZhbHVlKTtpLmR5bmFtaWM/bis9aS5uYW1lK1wiLFwiK28rXCIsXCI6dCs9J1wiJytpLm5hbWUrJ1wiOicrbytcIixcIn1yZXR1cm4gdD1cIntcIit0LnNsaWNlKDAsLTEpK1wifVwiLG4/XCJfZChcIit0K1wiLFtcIituLnNsaWNlKDAsLTEpK1wiXSlcIjp0fWZ1bmN0aW9uIFhhKGUpe3JldHVybiBlLnJlcGxhY2UoL1xcdTIwMjgvZyxcIlxcXFx1MjAyOFwiKS5yZXBsYWNlKC9cXHUyMDI5L2csXCJcXFxcdTIwMjlcIil9bmV3IFJlZ0V4cChcIlxcXFxiXCIrXCJkbyxpZixmb3IsbGV0LG5ldyx0cnksdmFyLGNhc2UsZWxzZSx3aXRoLGF3YWl0LGJyZWFrLGNhdGNoLGNsYXNzLGNvbnN0LHN1cGVyLHRocm93LHdoaWxlLHlpZWxkLGRlbGV0ZSxleHBvcnQsaW1wb3J0LHJldHVybixzd2l0Y2gsZGVmYXVsdCxleHRlbmRzLGZpbmFsbHksY29udGludWUsZGVidWdnZXIsZnVuY3Rpb24sYXJndW1lbnRzXCIuc3BsaXQoXCIsXCIpLmpvaW4oXCJcXFxcYnxcXFxcYlwiKStcIlxcXFxiXCIpO2Z1bmN0aW9uIFlhKGUsdCl7dHJ5e3JldHVybiBuZXcgRnVuY3Rpb24oZSl9Y2F0Y2gobil7cmV0dXJuIHQucHVzaCh7ZXJyOm4sY29kZTplfSksU319ZnVuY3Rpb24gUWEoZSl7dmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gZnVuY3Rpb24obixyLGkpeyhyPUEoe30scikpLndhcm47ZGVsZXRlIHIud2Fybjt2YXIgbz1yLmRlbGltaXRlcnM/U3RyaW5nKHIuZGVsaW1pdGVycykrbjpuO2lmKHRbb10pcmV0dXJuIHRbb107dmFyIGE9ZShuLHIpLHM9e30sYz1bXTtyZXR1cm4gcy5yZW5kZXI9WWEoYS5yZW5kZXIsYykscy5zdGF0aWNSZW5kZXJGbnM9YS5zdGF0aWNSZW5kZXJGbnMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBZYShlLGMpfSksdFtvXT1zfX12YXIgZXMsdHMsbnM9KGVzPWZ1bmN0aW9uKGUsdCl7dmFyIG49bGEoZS50cmltKCksdCk7ITEhPT10Lm9wdGltaXplJiZrYShuLHQpO3ZhciByPVBhKG4sdCk7cmV0dXJue2FzdDpuLHJlbmRlcjpyLnJlbmRlcixzdGF0aWNSZW5kZXJGbnM6ci5zdGF0aWNSZW5kZXJGbnN9fSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQsbil7dmFyIHI9T2JqZWN0LmNyZWF0ZShlKSxpPVtdLG89W107aWYobilmb3IodmFyIGEgaW4gbi5tb2R1bGVzJiYoci5tb2R1bGVzPShlLm1vZHVsZXN8fFtdKS5jb25jYXQobi5tb2R1bGVzKSksbi5kaXJlY3RpdmVzJiYoci5kaXJlY3RpdmVzPUEoT2JqZWN0LmNyZWF0ZShlLmRpcmVjdGl2ZXN8fG51bGwpLG4uZGlyZWN0aXZlcykpLG4pXCJtb2R1bGVzXCIhPT1hJiZcImRpcmVjdGl2ZXNcIiE9PWEmJihyW2FdPW5bYV0pO3Iud2Fybj1mdW5jdGlvbihlLHQsbil7KG4/bzppKS5wdXNoKGUpfTt2YXIgcz1lcyh0LnRyaW0oKSxyKTtyZXR1cm4gcy5lcnJvcnM9aSxzLnRpcHM9byxzfXJldHVybntjb21waWxlOnQsY29tcGlsZVRvRnVuY3Rpb25zOlFhKHQpfX0pKENhKSxycz0obnMuY29tcGlsZSxucy5jb21waWxlVG9GdW5jdGlvbnMpO2Z1bmN0aW9uIGlzKGUpe3JldHVybih0cz10c3x8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSkuaW5uZXJIVE1MPWU/JzxhIGhyZWY9XCJcXG5cIi8+JzonPGRpdiBhPVwiXFxuXCIvPicsdHMuaW5uZXJIVE1MLmluZGV4T2YoXCImIzEwO1wiKT4wfXZhciBvcz0hIXomJmlzKCExKSxhcz0hIXomJmlzKCEwKSxzcz1nKGZ1bmN0aW9uKGUpe3ZhciB0PVluKGUpO3JldHVybiB0JiZ0LmlubmVySFRNTH0pLGNzPXduLnByb3RvdHlwZS4kbW91bnQ7d24ucHJvdG90eXBlLiRtb3VudD1mdW5jdGlvbihlLHQpe2lmKChlPWUmJlluKGUpKT09PWRvY3VtZW50LmJvZHl8fGU9PT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy4kb3B0aW9ucztpZighbi5yZW5kZXIpe3ZhciByPW4udGVtcGxhdGU7aWYocilpZihcInN0cmluZ1wiPT10eXBlb2YgcilcIiNcIj09PXIuY2hhckF0KDApJiYocj1zcyhyKSk7ZWxzZXtpZighci5ub2RlVHlwZSlyZXR1cm4gdGhpcztyPXIuaW5uZXJIVE1MfWVsc2UgZSYmKHI9ZnVuY3Rpb24oZSl7aWYoZS5vdXRlckhUTUwpcmV0dXJuIGUub3V0ZXJIVE1MO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7cmV0dXJuIHQuYXBwZW5kQ2hpbGQoZS5jbG9uZU5vZGUoITApKSx0LmlubmVySFRNTH0oZSkpO2lmKHIpe3ZhciBpPXJzKHIse291dHB1dFNvdXJjZVJhbmdlOiExLHNob3VsZERlY29kZU5ld2xpbmVzOm9zLHNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZjphcyxkZWxpbWl0ZXJzOm4uZGVsaW1pdGVycyxjb21tZW50czpuLmNvbW1lbnRzfSx0aGlzKSxvPWkucmVuZGVyLGE9aS5zdGF0aWNSZW5kZXJGbnM7bi5yZW5kZXI9byxuLnN0YXRpY1JlbmRlckZucz1hfX1yZXR1cm4gY3MuY2FsbCh0aGlzLGUsdCl9LHduLmNvbXBpbGU9cnMsbW9kdWxlLmV4cG9ydHM9d247IiwiaWYgKFwicHJvZHVjdGlvblwiID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL3Z1ZS5ydW50aW1lLmNvbW1vbi5wcm9kLmpzJylcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi92dWUucnVudGltZS5jb21tb24uZGV2LmpzJylcbn1cbiIsIi8qIVxuICogVnVlLmpzIHYyLjYuMTBcbiAqIChjKSAyMDE0LTIwMTkgRXZhbiBZb3VcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuXCJ1c2Ugc3RyaWN0XCI7dmFyIHQ9T2JqZWN0LmZyZWV6ZSh7fSk7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gbnVsbD09dH1mdW5jdGlvbiBuKHQpe3JldHVybiBudWxsIT10fWZ1bmN0aW9uIHIodCl7cmV0dXJuITA9PT10fWZ1bmN0aW9uIG8odCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHR8fFwibnVtYmVyXCI9PXR5cGVvZiB0fHxcInN5bWJvbFwiPT10eXBlb2YgdHx8XCJib29sZWFuXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIGkodCl7cmV0dXJuIG51bGwhPT10JiZcIm9iamVjdFwiPT10eXBlb2YgdH12YXIgYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIHModCl7cmV0dXJuXCJbb2JqZWN0IE9iamVjdF1cIj09PWEuY2FsbCh0KX1mdW5jdGlvbiBjKHQpe3ZhciBlPXBhcnNlRmxvYXQoU3RyaW5nKHQpKTtyZXR1cm4gZT49MCYmTWF0aC5mbG9vcihlKT09PWUmJmlzRmluaXRlKHQpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIG4odCkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQudGhlbiYmXCJmdW5jdGlvblwiPT10eXBlb2YgdC5jYXRjaH1mdW5jdGlvbiBsKHQpe3JldHVybiBudWxsPT10P1wiXCI6QXJyYXkuaXNBcnJheSh0KXx8cyh0KSYmdC50b1N0cmluZz09PWE/SlNPTi5zdHJpbmdpZnkodCxudWxsLDIpOlN0cmluZyh0KX1mdW5jdGlvbiBmKHQpe3ZhciBlPXBhcnNlRmxvYXQodCk7cmV0dXJuIGlzTmFOKGUpP3Q6ZX1mdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciBuPU9iamVjdC5jcmVhdGUobnVsbCkscj10LnNwbGl0KFwiLFwiKSxvPTA7bzxyLmxlbmd0aDtvKyspbltyW29dXT0hMDtyZXR1cm4gZT9mdW5jdGlvbih0KXtyZXR1cm4gblt0LnRvTG93ZXJDYXNlKCldfTpmdW5jdGlvbih0KXtyZXR1cm4gblt0XX19dmFyIGQ9cChcImtleSxyZWYsc2xvdCxzbG90LXNjb3BlLGlzXCIpO2Z1bmN0aW9uIHYodCxlKXtpZih0Lmxlbmd0aCl7dmFyIG49dC5pbmRleE9mKGUpO2lmKG4+LTEpcmV0dXJuIHQuc3BsaWNlKG4sMSl9fXZhciBoPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gbSh0LGUpe3JldHVybiBoLmNhbGwodCxlKX1mdW5jdGlvbiB5KHQpe3ZhciBlPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBlW25dfHwoZVtuXT10KG4pKX19dmFyIGc9Ly0oXFx3KS9nLF89eShmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKGcsZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9lLnRvVXBwZXJDYXNlKCk6XCJcIn0pfSksYj15KGZ1bmN0aW9uKHQpe3JldHVybiB0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSl9KSxDPS9cXEIoW0EtWl0pL2csJD15KGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoQyxcIi0kMVwiKS50b0xvd2VyQ2FzZSgpfSk7dmFyIHc9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ/ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5iaW5kKGUpfTpmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4obil7dmFyIHI9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gcj9yPjE/dC5hcHBseShlLGFyZ3VtZW50cyk6dC5jYWxsKGUsbik6dC5jYWxsKGUpfXJldHVybiBuLl9sZW5ndGg9dC5sZW5ndGgsbn07ZnVuY3Rpb24gQSh0LGUpe2U9ZXx8MDtmb3IodmFyIG49dC5sZW5ndGgtZSxyPW5ldyBBcnJheShuKTtuLS07KXJbbl09dFtuK2VdO3JldHVybiByfWZ1bmN0aW9uIHgodCxlKXtmb3IodmFyIG4gaW4gZSl0W25dPWVbbl07cmV0dXJuIHR9ZnVuY3Rpb24gTyh0KXtmb3IodmFyIGU9e30sbj0wO248dC5sZW5ndGg7bisrKXRbbl0mJngoZSx0W25dKTtyZXR1cm4gZX1mdW5jdGlvbiBrKHQsZSxuKXt9dmFyIFM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiExfSxFPWZ1bmN0aW9uKHQpe3JldHVybiB0fTtmdW5jdGlvbiBqKHQsZSl7aWYodD09PWUpcmV0dXJuITA7dmFyIG49aSh0KSxyPWkoZSk7aWYoIW58fCFyKXJldHVybiFuJiYhciYmU3RyaW5nKHQpPT09U3RyaW5nKGUpO3RyeXt2YXIgbz1BcnJheS5pc0FycmF5KHQpLGE9QXJyYXkuaXNBcnJheShlKTtpZihvJiZhKXJldHVybiB0Lmxlbmd0aD09PWUubGVuZ3RoJiZ0LmV2ZXJ5KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGoodCxlW25dKX0pO2lmKHQgaW5zdGFuY2VvZiBEYXRlJiZlIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gdC5nZXRUaW1lKCk9PT1lLmdldFRpbWUoKTtpZihvfHxhKXJldHVybiExO3ZhciBzPU9iamVjdC5rZXlzKHQpLGM9T2JqZWN0LmtleXMoZSk7cmV0dXJuIHMubGVuZ3RoPT09Yy5sZW5ndGgmJnMuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIGoodFtuXSxlW25dKX0pfWNhdGNoKHQpe3JldHVybiExfX1mdW5jdGlvbiBUKHQsZSl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspaWYoaih0W25dLGUpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIEkodCl7dmFyIGU9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7ZXx8KGU9ITAsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX12YXIgRD1cImRhdGEtc2VydmVyLXJlbmRlcmVkXCIsTj1bXCJjb21wb25lbnRcIixcImRpcmVjdGl2ZVwiLFwiZmlsdGVyXCJdLFA9W1wiYmVmb3JlQ3JlYXRlXCIsXCJjcmVhdGVkXCIsXCJiZWZvcmVNb3VudFwiLFwibW91bnRlZFwiLFwiYmVmb3JlVXBkYXRlXCIsXCJ1cGRhdGVkXCIsXCJiZWZvcmVEZXN0cm95XCIsXCJkZXN0cm95ZWRcIixcImFjdGl2YXRlZFwiLFwiZGVhY3RpdmF0ZWRcIixcImVycm9yQ2FwdHVyZWRcIixcInNlcnZlclByZWZldGNoXCJdLEw9e29wdGlvbk1lcmdlU3RyYXRlZ2llczpPYmplY3QuY3JlYXRlKG51bGwpLHNpbGVudDohMSxwcm9kdWN0aW9uVGlwOiExLGRldnRvb2xzOiExLHBlcmZvcm1hbmNlOiExLGVycm9ySGFuZGxlcjpudWxsLHdhcm5IYW5kbGVyOm51bGwsaWdub3JlZEVsZW1lbnRzOltdLGtleUNvZGVzOk9iamVjdC5jcmVhdGUobnVsbCksaXNSZXNlcnZlZFRhZzpTLGlzUmVzZXJ2ZWRBdHRyOlMsaXNVbmtub3duRWxlbWVudDpTLGdldFRhZ05hbWVzcGFjZTprLHBhcnNlUGxhdGZvcm1UYWdOYW1lOkUsbXVzdFVzZVByb3A6Uyxhc3luYzohMCxfbGlmZWN5Y2xlSG9va3M6UH07ZnVuY3Rpb24gTSh0LGUsbixyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpuLGVudW1lcmFibGU6ISFyLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfXZhciBGPW5ldyBSZWdFeHAoXCJbXlwiKy9hLXpBLVpcXHUwMEI3XFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMzdEXFx1MDM3Ri1cXHUxRkZGXFx1MjAwQy1cXHUyMDBEXFx1MjAzRi1cXHUyMDQwXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZELy5zb3VyY2UrXCIuJF9cXFxcZF1cIik7dmFyIFIsVT1cIl9fcHJvdG9fX1wiaW57fSxIPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3csQj1cInVuZGVmaW5lZFwiIT10eXBlb2YgV1hFbnZpcm9ubWVudCYmISFXWEVudmlyb25tZW50LnBsYXRmb3JtLFY9QiYmV1hFbnZpcm9ubWVudC5wbGF0Zm9ybS50b0xvd2VyQ2FzZSgpLHo9SCYmd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSxXPXomJi9tc2llfHRyaWRlbnQvLnRlc3QoeikscT16JiZ6LmluZGV4T2YoXCJtc2llIDkuMFwiKT4wLEs9eiYmei5pbmRleE9mKFwiZWRnZS9cIik+MCxYPSh6JiZ6LmluZGV4T2YoXCJhbmRyb2lkXCIpLHomJi9pcGhvbmV8aXBhZHxpcG9kfGlvcy8udGVzdCh6KXx8XCJpb3NcIj09PVYpLEc9KHomJi9jaHJvbWVcXC9cXGQrLy50ZXN0KHopLHomJi9waGFudG9tanMvLnRlc3QoeikseiYmei5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pKSxaPXt9LndhdGNoLEo9ITE7aWYoSCl0cnl7dmFyIFE9e307T2JqZWN0LmRlZmluZVByb3BlcnR5KFEsXCJwYXNzaXZlXCIse2dldDpmdW5jdGlvbigpe0o9ITB9fSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ0ZXN0LXBhc3NpdmVcIixudWxsLFEpfWNhdGNoKHQpe312YXIgWT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT1SJiYoUj0hSCYmIUImJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWwmJihnbG9iYWwucHJvY2VzcyYmXCJzZXJ2ZXJcIj09PWdsb2JhbC5wcm9jZXNzLmVudi5WVUVfRU5WKSksUn0sdHQ9SCYmd2luZG93Ll9fVlVFX0RFVlRPT0xTX0dMT0JBTF9IT09LX187ZnVuY3Rpb24gZXQodCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmL25hdGl2ZSBjb2RlLy50ZXN0KHQudG9TdHJpbmcoKSl9dmFyIG50LHJ0PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmV0KFN5bWJvbCkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBSZWZsZWN0JiZldChSZWZsZWN0Lm93bktleXMpO250PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTZXQmJmV0KFNldCk/U2V0OmZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMuc2V0PU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4hMD09PXRoaXMuc2V0W3RdfSx0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7dGhpcy5zZXRbdF09ITB9LHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zZXQ9T2JqZWN0LmNyZWF0ZShudWxsKX0sdH0oKTt2YXIgb3Q9ayxpdD0wLGF0PWZ1bmN0aW9uKCl7dGhpcy5pZD1pdCsrLHRoaXMuc3Vicz1bXX07YXQucHJvdG90eXBlLmFkZFN1Yj1mdW5jdGlvbih0KXt0aGlzLnN1YnMucHVzaCh0KX0sYXQucHJvdG90eXBlLnJlbW92ZVN1Yj1mdW5jdGlvbih0KXt2KHRoaXMuc3Vicyx0KX0sYXQucHJvdG90eXBlLmRlcGVuZD1mdW5jdGlvbigpe2F0LnRhcmdldCYmYXQudGFyZ2V0LmFkZERlcCh0aGlzKX0sYXQucHJvdG90eXBlLm5vdGlmeT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnN1YnMuc2xpY2UoKSxlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKXRbZV0udXBkYXRlKCl9LGF0LnRhcmdldD1udWxsO3ZhciBzdD1bXTtmdW5jdGlvbiBjdCh0KXtzdC5wdXNoKHQpLGF0LnRhcmdldD10fWZ1bmN0aW9uIHV0KCl7c3QucG9wKCksYXQudGFyZ2V0PXN0W3N0Lmxlbmd0aC0xXX12YXIgbHQ9ZnVuY3Rpb24odCxlLG4scixvLGksYSxzKXt0aGlzLnRhZz10LHRoaXMuZGF0YT1lLHRoaXMuY2hpbGRyZW49bix0aGlzLnRleHQ9cix0aGlzLmVsbT1vLHRoaXMubnM9dm9pZCAwLHRoaXMuY29udGV4dD1pLHRoaXMuZm5Db250ZXh0PXZvaWQgMCx0aGlzLmZuT3B0aW9ucz12b2lkIDAsdGhpcy5mblNjb3BlSWQ9dm9pZCAwLHRoaXMua2V5PWUmJmUua2V5LHRoaXMuY29tcG9uZW50T3B0aW9ucz1hLHRoaXMuY29tcG9uZW50SW5zdGFuY2U9dm9pZCAwLHRoaXMucGFyZW50PXZvaWQgMCx0aGlzLnJhdz0hMSx0aGlzLmlzU3RhdGljPSExLHRoaXMuaXNSb290SW5zZXJ0PSEwLHRoaXMuaXNDb21tZW50PSExLHRoaXMuaXNDbG9uZWQ9ITEsdGhpcy5pc09uY2U9ITEsdGhpcy5hc3luY0ZhY3Rvcnk9cyx0aGlzLmFzeW5jTWV0YT12b2lkIDAsdGhpcy5pc0FzeW5jUGxhY2Vob2xkZXI9ITF9LGZ0PXtjaGlsZDp7Y29uZmlndXJhYmxlOiEwfX07ZnQuY2hpbGQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29tcG9uZW50SW5zdGFuY2V9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGx0LnByb3RvdHlwZSxmdCk7dmFyIHB0PWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PVwiXCIpO3ZhciBlPW5ldyBsdDtyZXR1cm4gZS50ZXh0PXQsZS5pc0NvbW1lbnQ9ITAsZX07ZnVuY3Rpb24gZHQodCl7cmV0dXJuIG5ldyBsdCh2b2lkIDAsdm9pZCAwLHZvaWQgMCxTdHJpbmcodCkpfWZ1bmN0aW9uIHZ0KHQpe3ZhciBlPW5ldyBsdCh0LnRhZyx0LmRhdGEsdC5jaGlsZHJlbiYmdC5jaGlsZHJlbi5zbGljZSgpLHQudGV4dCx0LmVsbSx0LmNvbnRleHQsdC5jb21wb25lbnRPcHRpb25zLHQuYXN5bmNGYWN0b3J5KTtyZXR1cm4gZS5ucz10Lm5zLGUuaXNTdGF0aWM9dC5pc1N0YXRpYyxlLmtleT10LmtleSxlLmlzQ29tbWVudD10LmlzQ29tbWVudCxlLmZuQ29udGV4dD10LmZuQ29udGV4dCxlLmZuT3B0aW9ucz10LmZuT3B0aW9ucyxlLmZuU2NvcGVJZD10LmZuU2NvcGVJZCxlLmFzeW5jTWV0YT10LmFzeW5jTWV0YSxlLmlzQ2xvbmVkPSEwLGV9dmFyIGh0PUFycmF5LnByb3RvdHlwZSxtdD1PYmplY3QuY3JlYXRlKGh0KTtbXCJwdXNoXCIsXCJwb3BcIixcInNoaWZ0XCIsXCJ1bnNoaWZ0XCIsXCJzcGxpY2VcIixcInNvcnRcIixcInJldmVyc2VcIl0uZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1odFt0XTtNKG10LHQsZnVuY3Rpb24oKXtmb3IodmFyIG49W10scj1hcmd1bWVudHMubGVuZ3RoO3ItLTspbltyXT1hcmd1bWVudHNbcl07dmFyIG8saT1lLmFwcGx5KHRoaXMsbiksYT10aGlzLl9fb2JfXztzd2l0Y2godCl7Y2FzZVwicHVzaFwiOmNhc2VcInVuc2hpZnRcIjpvPW47YnJlYWs7Y2FzZVwic3BsaWNlXCI6bz1uLnNsaWNlKDIpfXJldHVybiBvJiZhLm9ic2VydmVBcnJheShvKSxhLmRlcC5ub3RpZnkoKSxpfSl9KTt2YXIgeXQ9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobXQpLGd0PSEwO2Z1bmN0aW9uIF90KHQpe2d0PXR9dmFyIGJ0PWZ1bmN0aW9uKHQpe3ZhciBlO3RoaXMudmFsdWU9dCx0aGlzLmRlcD1uZXcgYXQsdGhpcy52bUNvdW50PTAsTSh0LFwiX19vYl9fXCIsdGhpcyksQXJyYXkuaXNBcnJheSh0KT8oVT8oZT1tdCx0Ll9fcHJvdG9fXz1lKTpmdW5jdGlvbih0LGUsbil7Zm9yKHZhciByPTAsbz1uLmxlbmd0aDtyPG87cisrKXt2YXIgaT1uW3JdO00odCxpLGVbaV0pfX0odCxtdCx5dCksdGhpcy5vYnNlcnZlQXJyYXkodCkpOnRoaXMud2Fsayh0KX07ZnVuY3Rpb24gQ3QodCxlKXt2YXIgbjtpZihpKHQpJiYhKHQgaW5zdGFuY2VvZiBsdCkpcmV0dXJuIG0odCxcIl9fb2JfX1wiKSYmdC5fX29iX18gaW5zdGFuY2VvZiBidD9uPXQuX19vYl9fOmd0JiYhWSgpJiYoQXJyYXkuaXNBcnJheSh0KXx8cyh0KSkmJk9iamVjdC5pc0V4dGVuc2libGUodCkmJiF0Ll9pc1Z1ZSYmKG49bmV3IGJ0KHQpKSxlJiZuJiZuLnZtQ291bnQrKyxufWZ1bmN0aW9uICR0KHQsZSxuLHIsbyl7dmFyIGk9bmV3IGF0LGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpO2lmKCFhfHwhMSE9PWEuY29uZmlndXJhYmxlKXt2YXIgcz1hJiZhLmdldCxjPWEmJmEuc2V0O3MmJiFjfHwyIT09YXJndW1lbnRzLmxlbmd0aHx8KG49dFtlXSk7dmFyIHU9IW8mJkN0KG4pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciBlPXM/cy5jYWxsKHQpOm47cmV0dXJuIGF0LnRhcmdldCYmKGkuZGVwZW5kKCksdSYmKHUuZGVwLmRlcGVuZCgpLEFycmF5LmlzQXJyYXkoZSkmJmZ1bmN0aW9uIHQoZSl7Zm9yKHZhciBuPXZvaWQgMCxyPTAsbz1lLmxlbmd0aDtyPG87cisrKShuPWVbcl0pJiZuLl9fb2JfXyYmbi5fX29iX18uZGVwLmRlcGVuZCgpLEFycmF5LmlzQXJyYXkobikmJnQobil9KGUpKSksZX0sc2V0OmZ1bmN0aW9uKGUpe3ZhciByPXM/cy5jYWxsKHQpOm47ZT09PXJ8fGUhPWUmJnIhPXJ8fHMmJiFjfHwoYz9jLmNhbGwodCxlKTpuPWUsdT0hbyYmQ3QoZSksaS5ub3RpZnkoKSl9fSl9fWZ1bmN0aW9uIHd0KHQsZSxuKXtpZihBcnJheS5pc0FycmF5KHQpJiZjKGUpKXJldHVybiB0Lmxlbmd0aD1NYXRoLm1heCh0Lmxlbmd0aCxlKSx0LnNwbGljZShlLDEsbiksbjtpZihlIGluIHQmJiEoZSBpbiBPYmplY3QucHJvdG90eXBlKSlyZXR1cm4gdFtlXT1uLG47dmFyIHI9dC5fX29iX187cmV0dXJuIHQuX2lzVnVlfHxyJiZyLnZtQ291bnQ/bjpyPygkdChyLnZhbHVlLGUsbiksci5kZXAubm90aWZ5KCksbik6KHRbZV09bixuKX1mdW5jdGlvbiBBdCh0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkmJmMoZSkpdC5zcGxpY2UoZSwxKTtlbHNle3ZhciBuPXQuX19vYl9fO3QuX2lzVnVlfHxuJiZuLnZtQ291bnR8fG0odCxlKSYmKGRlbGV0ZSB0W2VdLG4mJm4uZGVwLm5vdGlmeSgpKX19YnQucHJvdG90eXBlLndhbGs9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKHQpLG49MDtuPGUubGVuZ3RoO24rKykkdCh0LGVbbl0pfSxidC5wcm90b3R5cGUub2JzZXJ2ZUFycmF5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLG49dC5sZW5ndGg7ZTxuO2UrKylDdCh0W2VdKX07dmFyIHh0PUwub3B0aW9uTWVyZ2VTdHJhdGVnaWVzO2Z1bmN0aW9uIE90KHQsZSl7aWYoIWUpcmV0dXJuIHQ7Zm9yKHZhciBuLHIsbyxpPXJ0P1JlZmxlY3Qub3duS2V5cyhlKTpPYmplY3Qua2V5cyhlKSxhPTA7YTxpLmxlbmd0aDthKyspXCJfX29iX19cIiE9PShuPWlbYV0pJiYocj10W25dLG89ZVtuXSxtKHQsbik/ciE9PW8mJnMocikmJnMobykmJk90KHIsbyk6d3QodCxuLG8pKTtyZXR1cm4gdH1mdW5jdGlvbiBrdCh0LGUsbil7cmV0dXJuIG4/ZnVuY3Rpb24oKXt2YXIgcj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2UuY2FsbChuLG4pOmUsbz1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3QuY2FsbChuLG4pOnQ7cmV0dXJuIHI/T3QocixvKTpvfTplP3Q/ZnVuY3Rpb24oKXtyZXR1cm4gT3QoXCJmdW5jdGlvblwiPT10eXBlb2YgZT9lLmNhbGwodGhpcyx0aGlzKTplLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dC5jYWxsKHRoaXMsdGhpcyk6dCl9OmU6dH1mdW5jdGlvbiBTdCh0LGUpe3ZhciBuPWU/dD90LmNvbmNhdChlKTpBcnJheS5pc0FycmF5KGUpP2U6W2VdOnQ7cmV0dXJuIG4/ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLG49MDtuPHQubGVuZ3RoO24rKyktMT09PWUuaW5kZXhPZih0W25dKSYmZS5wdXNoKHRbbl0pO3JldHVybiBlfShuKTpufWZ1bmN0aW9uIEV0KHQsZSxuLHIpe3ZhciBvPU9iamVjdC5jcmVhdGUodHx8bnVsbCk7cmV0dXJuIGU/eChvLGUpOm99eHQuZGF0YT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG4/a3QodCxlLG4pOmUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDprdCh0LGUpfSxQLmZvckVhY2goZnVuY3Rpb24odCl7eHRbdF09U3R9KSxOLmZvckVhY2goZnVuY3Rpb24odCl7eHRbdCtcInNcIl09RXR9KSx4dC53YXRjaD1mdW5jdGlvbih0LGUsbixyKXtpZih0PT09WiYmKHQ9dm9pZCAwKSxlPT09WiYmKGU9dm9pZCAwKSwhZSlyZXR1cm4gT2JqZWN0LmNyZWF0ZSh0fHxudWxsKTtpZighdClyZXR1cm4gZTt2YXIgbz17fTtmb3IodmFyIGkgaW4geChvLHQpLGUpe3ZhciBhPW9baV0scz1lW2ldO2EmJiFBcnJheS5pc0FycmF5KGEpJiYoYT1bYV0pLG9baV09YT9hLmNvbmNhdChzKTpBcnJheS5pc0FycmF5KHMpP3M6W3NdfXJldHVybiBvfSx4dC5wcm9wcz14dC5tZXRob2RzPXh0LmluamVjdD14dC5jb21wdXRlZD1mdW5jdGlvbih0LGUsbixyKXtpZighdClyZXR1cm4gZTt2YXIgbz1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiB4KG8sdCksZSYmeChvLGUpLG99LHh0LnByb3ZpZGU9a3Q7dmFyIGp0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWU/dDplfTtmdW5jdGlvbiBUdCh0LGUsbil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmKGU9ZS5vcHRpb25zKSxmdW5jdGlvbih0LGUpe3ZhciBuPXQucHJvcHM7aWYobil7dmFyIHIsbyxpPXt9O2lmKEFycmF5LmlzQXJyYXkobikpZm9yKHI9bi5sZW5ndGg7ci0tOylcInN0cmluZ1wiPT10eXBlb2Yobz1uW3JdKSYmKGlbXyhvKV09e3R5cGU6bnVsbH0pO2Vsc2UgaWYocyhuKSlmb3IodmFyIGEgaW4gbilvPW5bYV0saVtfKGEpXT1zKG8pP286e3R5cGU6b307dC5wcm9wcz1pfX0oZSksZnVuY3Rpb24odCxlKXt2YXIgbj10LmluamVjdDtpZihuKXt2YXIgcj10LmluamVjdD17fTtpZihBcnJheS5pc0FycmF5KG4pKWZvcih2YXIgbz0wO288bi5sZW5ndGg7bysrKXJbbltvXV09e2Zyb206bltvXX07ZWxzZSBpZihzKG4pKWZvcih2YXIgaSBpbiBuKXt2YXIgYT1uW2ldO3JbaV09cyhhKT94KHtmcm9tOml9LGEpOntmcm9tOmF9fX19KGUpLGZ1bmN0aW9uKHQpe3ZhciBlPXQuZGlyZWN0aXZlcztpZihlKWZvcih2YXIgbiBpbiBlKXt2YXIgcj1lW25dO1wiZnVuY3Rpb25cIj09dHlwZW9mIHImJihlW25dPXtiaW5kOnIsdXBkYXRlOnJ9KX19KGUpLCFlLl9iYXNlJiYoZS5leHRlbmRzJiYodD1UdCh0LGUuZXh0ZW5kcyxuKSksZS5taXhpbnMpKWZvcih2YXIgcj0wLG89ZS5taXhpbnMubGVuZ3RoO3I8bztyKyspdD1UdCh0LGUubWl4aW5zW3JdLG4pO3ZhciBpLGE9e307Zm9yKGkgaW4gdCljKGkpO2ZvcihpIGluIGUpbSh0LGkpfHxjKGkpO2Z1bmN0aW9uIGMocil7dmFyIG89eHRbcl18fGp0O2Fbcl09byh0W3JdLGVbcl0sbixyKX1yZXR1cm4gYX1mdW5jdGlvbiBJdCh0LGUsbixyKXtpZihcInN0cmluZ1wiPT10eXBlb2Ygbil7dmFyIG89dFtlXTtpZihtKG8sbikpcmV0dXJuIG9bbl07dmFyIGk9XyhuKTtpZihtKG8saSkpcmV0dXJuIG9baV07dmFyIGE9YihpKTtyZXR1cm4gbShvLGEpP29bYV06b1tuXXx8b1tpXXx8b1thXX19ZnVuY3Rpb24gRHQodCxlLG4scil7dmFyIG89ZVt0XSxpPSFtKG4sdCksYT1uW3RdLHM9THQoQm9vbGVhbixvLnR5cGUpO2lmKHM+LTEpaWYoaSYmIW0obyxcImRlZmF1bHRcIikpYT0hMTtlbHNlIGlmKFwiXCI9PT1hfHxhPT09JCh0KSl7dmFyIGM9THQoU3RyaW5nLG8udHlwZSk7KGM8MHx8czxjKSYmKGE9ITApfWlmKHZvaWQgMD09PWEpe2E9ZnVuY3Rpb24odCxlLG4pe2lmKCFtKGUsXCJkZWZhdWx0XCIpKXJldHVybjt2YXIgcj1lLmRlZmF1bHQ7aWYodCYmdC4kb3B0aW9ucy5wcm9wc0RhdGEmJnZvaWQgMD09PXQuJG9wdGlvbnMucHJvcHNEYXRhW25dJiZ2b2lkIDAhPT10Ll9wcm9wc1tuXSlyZXR1cm4gdC5fcHJvcHNbbl07cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgciYmXCJGdW5jdGlvblwiIT09TnQoZS50eXBlKT9yLmNhbGwodCk6cn0ocixvLHQpO3ZhciB1PWd0O190KCEwKSxDdChhKSxfdCh1KX1yZXR1cm4gYX1mdW5jdGlvbiBOdCh0KXt2YXIgZT10JiZ0LnRvU3RyaW5nKCkubWF0Y2goL15cXHMqZnVuY3Rpb24gKFxcdyspLyk7cmV0dXJuIGU/ZVsxXTpcIlwifWZ1bmN0aW9uIFB0KHQsZSl7cmV0dXJuIE50KHQpPT09TnQoZSl9ZnVuY3Rpb24gTHQodCxlKXtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gUHQoZSx0KT8wOi0xO2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKylpZihQdChlW25dLHQpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIE10KHQsZSxuKXtjdCgpO3RyeXtpZihlKWZvcih2YXIgcj1lO3I9ci4kcGFyZW50Oyl7dmFyIG89ci4kb3B0aW9ucy5lcnJvckNhcHR1cmVkO2lmKG8pZm9yKHZhciBpPTA7aTxvLmxlbmd0aDtpKyspdHJ5e2lmKCExPT09b1tpXS5jYWxsKHIsdCxlLG4pKXJldHVybn1jYXRjaCh0KXtSdCh0LHIsXCJlcnJvckNhcHR1cmVkIGhvb2tcIil9fVJ0KHQsZSxuKX1maW5hbGx5e3V0KCl9fWZ1bmN0aW9uIEZ0KHQsZSxuLHIsbyl7dmFyIGk7dHJ5eyhpPW4/dC5hcHBseShlLG4pOnQuY2FsbChlKSkmJiFpLl9pc1Z1ZSYmdShpKSYmIWkuX2hhbmRsZWQmJihpLmNhdGNoKGZ1bmN0aW9uKHQpe3JldHVybiBNdCh0LHIsbytcIiAoUHJvbWlzZS9hc3luYylcIil9KSxpLl9oYW5kbGVkPSEwKX1jYXRjaCh0KXtNdCh0LHIsbyl9cmV0dXJuIGl9ZnVuY3Rpb24gUnQodCxlLG4pe2lmKEwuZXJyb3JIYW5kbGVyKXRyeXtyZXR1cm4gTC5lcnJvckhhbmRsZXIuY2FsbChudWxsLHQsZSxuKX1jYXRjaChlKXtlIT09dCYmVXQoZSxudWxsLFwiY29uZmlnLmVycm9ySGFuZGxlclwiKX1VdCh0LGUsbil9ZnVuY3Rpb24gVXQodCxlLG4pe2lmKCFIJiYhQnx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIGNvbnNvbGUpdGhyb3cgdDtjb25zb2xlLmVycm9yKHQpfXZhciBIdCxCdD0hMSxWdD1bXSx6dD0hMTtmdW5jdGlvbiBXdCgpe3p0PSExO3ZhciB0PVZ0LnNsaWNlKDApO1Z0Lmxlbmd0aD0wO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0oKX1pZihcInVuZGVmaW5lZFwiIT10eXBlb2YgUHJvbWlzZSYmZXQoUHJvbWlzZSkpe3ZhciBxdD1Qcm9taXNlLnJlc29sdmUoKTtIdD1mdW5jdGlvbigpe3F0LnRoZW4oV3QpLFgmJnNldFRpbWVvdXQoayl9LEJ0PSEwfWVsc2UgaWYoV3x8XCJ1bmRlZmluZWRcIj09dHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXJ8fCFldChNdXRhdGlvbk9ic2VydmVyKSYmXCJbb2JqZWN0IE11dGF0aW9uT2JzZXJ2ZXJDb25zdHJ1Y3Rvcl1cIiE9PU11dGF0aW9uT2JzZXJ2ZXIudG9TdHJpbmcoKSlIdD1cInVuZGVmaW5lZFwiIT10eXBlb2Ygc2V0SW1tZWRpYXRlJiZldChzZXRJbW1lZGlhdGUpP2Z1bmN0aW9uKCl7c2V0SW1tZWRpYXRlKFd0KX06ZnVuY3Rpb24oKXtzZXRUaW1lb3V0KFd0LDApfTtlbHNle3ZhciBLdD0xLFh0PW5ldyBNdXRhdGlvbk9ic2VydmVyKFd0KSxHdD1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShTdHJpbmcoS3QpKTtYdC5vYnNlcnZlKEd0LHtjaGFyYWN0ZXJEYXRhOiEwfSksSHQ9ZnVuY3Rpb24oKXtLdD0oS3QrMSklMixHdC5kYXRhPVN0cmluZyhLdCl9LEJ0PSEwfWZ1bmN0aW9uIFp0KHQsZSl7dmFyIG47aWYoVnQucHVzaChmdW5jdGlvbigpe2lmKHQpdHJ5e3QuY2FsbChlKX1jYXRjaCh0KXtNdCh0LGUsXCJuZXh0VGlja1wiKX1lbHNlIG4mJm4oZSl9KSx6dHx8KHp0PSEwLEh0KCkpLCF0JiZcInVuZGVmaW5lZFwiIT10eXBlb2YgUHJvbWlzZSlyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCl7bj10fSl9dmFyIEp0PW5ldyBudDtmdW5jdGlvbiBRdCh0KXshZnVuY3Rpb24gdChlLG4pe3ZhciByLG87dmFyIGE9QXJyYXkuaXNBcnJheShlKTtpZighYSYmIWkoZSl8fE9iamVjdC5pc0Zyb3plbihlKXx8ZSBpbnN0YW5jZW9mIGx0KXJldHVybjtpZihlLl9fb2JfXyl7dmFyIHM9ZS5fX29iX18uZGVwLmlkO2lmKG4uaGFzKHMpKXJldHVybjtuLmFkZChzKX1pZihhKWZvcihyPWUubGVuZ3RoO3ItLTspdChlW3JdLG4pO2Vsc2UgZm9yKG89T2JqZWN0LmtleXMoZSkscj1vLmxlbmd0aDtyLS07KXQoZVtvW3JdXSxuKX0odCxKdCksSnQuY2xlYXIoKX12YXIgWXQ9eShmdW5jdGlvbih0KXt2YXIgZT1cIiZcIj09PXQuY2hhckF0KDApLG49XCJ+XCI9PT0odD1lP3Quc2xpY2UoMSk6dCkuY2hhckF0KDApLHI9XCIhXCI9PT0odD1uP3Quc2xpY2UoMSk6dCkuY2hhckF0KDApO3JldHVybntuYW1lOnQ9cj90LnNsaWNlKDEpOnQsb25jZTpuLGNhcHR1cmU6cixwYXNzaXZlOmV9fSk7ZnVuY3Rpb24gdGUodCxlKXtmdW5jdGlvbiBuKCl7dmFyIHQ9YXJndW1lbnRzLHI9bi5mbnM7aWYoIUFycmF5LmlzQXJyYXkocikpcmV0dXJuIEZ0KHIsbnVsbCxhcmd1bWVudHMsZSxcInYtb24gaGFuZGxlclwiKTtmb3IodmFyIG89ci5zbGljZSgpLGk9MDtpPG8ubGVuZ3RoO2krKylGdChvW2ldLG51bGwsdCxlLFwidi1vbiBoYW5kbGVyXCIpfXJldHVybiBuLmZucz10LG59ZnVuY3Rpb24gZWUodCxuLG8saSxhLHMpe3ZhciBjLHUsbCxmO2ZvcihjIGluIHQpdT10W2NdLGw9bltjXSxmPVl0KGMpLGUodSl8fChlKGwpPyhlKHUuZm5zKSYmKHU9dFtjXT10ZSh1LHMpKSxyKGYub25jZSkmJih1PXRbY109YShmLm5hbWUsdSxmLmNhcHR1cmUpKSxvKGYubmFtZSx1LGYuY2FwdHVyZSxmLnBhc3NpdmUsZi5wYXJhbXMpKTp1IT09bCYmKGwuZm5zPXUsdFtjXT1sKSk7Zm9yKGMgaW4gbillKHRbY10pJiZpKChmPVl0KGMpKS5uYW1lLG5bY10sZi5jYXB0dXJlKX1mdW5jdGlvbiBuZSh0LG8saSl7dmFyIGE7dCBpbnN0YW5jZW9mIGx0JiYodD10LmRhdGEuaG9va3x8KHQuZGF0YS5ob29rPXt9KSk7dmFyIHM9dFtvXTtmdW5jdGlvbiBjKCl7aS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdihhLmZucyxjKX1lKHMpP2E9dGUoW2NdKTpuKHMuZm5zKSYmcihzLm1lcmdlZCk/KGE9cykuZm5zLnB1c2goYyk6YT10ZShbcyxjXSksYS5tZXJnZWQ9ITAsdFtvXT1hfWZ1bmN0aW9uIHJlKHQsZSxyLG8saSl7aWYobihlKSl7aWYobShlLHIpKXJldHVybiB0W3JdPWVbcl0saXx8ZGVsZXRlIGVbcl0sITA7aWYobShlLG8pKXJldHVybiB0W3JdPWVbb10saXx8ZGVsZXRlIGVbb10sITB9cmV0dXJuITF9ZnVuY3Rpb24gb2UodCl7cmV0dXJuIG8odCk/W2R0KHQpXTpBcnJheS5pc0FycmF5KHQpP2Z1bmN0aW9uIHQoaSxhKXt2YXIgcz1bXTt2YXIgYyx1LGwsZjtmb3IoYz0wO2M8aS5sZW5ndGg7YysrKWUodT1pW2NdKXx8XCJib29sZWFuXCI9PXR5cGVvZiB1fHwobD1zLmxlbmd0aC0xLGY9c1tsXSxBcnJheS5pc0FycmF5KHUpP3UubGVuZ3RoPjAmJihpZSgodT10KHUsKGF8fFwiXCIpK1wiX1wiK2MpKVswXSkmJmllKGYpJiYoc1tsXT1kdChmLnRleHQrdVswXS50ZXh0KSx1LnNoaWZ0KCkpLHMucHVzaC5hcHBseShzLHUpKTpvKHUpP2llKGYpP3NbbF09ZHQoZi50ZXh0K3UpOlwiXCIhPT11JiZzLnB1c2goZHQodSkpOmllKHUpJiZpZShmKT9zW2xdPWR0KGYudGV4dCt1LnRleHQpOihyKGkuX2lzVkxpc3QpJiZuKHUudGFnKSYmZSh1LmtleSkmJm4oYSkmJih1LmtleT1cIl9fdmxpc3RcIithK1wiX1wiK2MrXCJfX1wiKSxzLnB1c2godSkpKTtyZXR1cm4gc30odCk6dm9pZCAwfWZ1bmN0aW9uIGllKHQpe3JldHVybiBuKHQpJiZuKHQudGV4dCkmJiExPT09dC5pc0NvbW1lbnR9ZnVuY3Rpb24gYWUodCxlKXtpZih0KXtmb3IodmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxyPXJ0P1JlZmxlY3Qub3duS2V5cyh0KTpPYmplY3Qua2V5cyh0KSxvPTA7bzxyLmxlbmd0aDtvKyspe3ZhciBpPXJbb107aWYoXCJfX29iX19cIiE9PWkpe2Zvcih2YXIgYT10W2ldLmZyb20scz1lO3M7KXtpZihzLl9wcm92aWRlZCYmbShzLl9wcm92aWRlZCxhKSl7bltpXT1zLl9wcm92aWRlZFthXTticmVha31zPXMuJHBhcmVudH1pZighcyYmXCJkZWZhdWx0XCJpbiB0W2ldKXt2YXIgYz10W2ldLmRlZmF1bHQ7bltpXT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBjP2MuY2FsbChlKTpjfX19cmV0dXJuIG59fWZ1bmN0aW9uIHNlKHQsZSl7aWYoIXR8fCF0Lmxlbmd0aClyZXR1cm57fTtmb3IodmFyIG49e30scj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7dmFyIGk9dFtyXSxhPWkuZGF0YTtpZihhJiZhLmF0dHJzJiZhLmF0dHJzLnNsb3QmJmRlbGV0ZSBhLmF0dHJzLnNsb3QsaS5jb250ZXh0IT09ZSYmaS5mbkNvbnRleHQhPT1lfHwhYXx8bnVsbD09YS5zbG90KShuLmRlZmF1bHR8fChuLmRlZmF1bHQ9W10pKS5wdXNoKGkpO2Vsc2V7dmFyIHM9YS5zbG90LGM9bltzXXx8KG5bc109W10pO1widGVtcGxhdGVcIj09PWkudGFnP2MucHVzaC5hcHBseShjLGkuY2hpbGRyZW58fFtdKTpjLnB1c2goaSl9fWZvcih2YXIgdSBpbiBuKW5bdV0uZXZlcnkoY2UpJiZkZWxldGUgblt1XTtyZXR1cm4gbn1mdW5jdGlvbiBjZSh0KXtyZXR1cm4gdC5pc0NvbW1lbnQmJiF0LmFzeW5jRmFjdG9yeXx8XCIgXCI9PT10LnRleHR9ZnVuY3Rpb24gdWUoZSxuLHIpe3ZhciBvLGk9T2JqZWN0LmtleXMobikubGVuZ3RoPjAsYT1lPyEhZS4kc3RhYmxlOiFpLHM9ZSYmZS4ka2V5O2lmKGUpe2lmKGUuX25vcm1hbGl6ZWQpcmV0dXJuIGUuX25vcm1hbGl6ZWQ7aWYoYSYmciYmciE9PXQmJnM9PT1yLiRrZXkmJiFpJiYhci4kaGFzTm9ybWFsKXJldHVybiByO2Zvcih2YXIgYyBpbiBvPXt9LGUpZVtjXSYmXCIkXCIhPT1jWzBdJiYob1tjXT1sZShuLGMsZVtjXSkpfWVsc2Ugbz17fTtmb3IodmFyIHUgaW4gbil1IGluIG98fChvW3VdPWZlKG4sdSkpO3JldHVybiBlJiZPYmplY3QuaXNFeHRlbnNpYmxlKGUpJiYoZS5fbm9ybWFsaXplZD1vKSxNKG8sXCIkc3RhYmxlXCIsYSksTShvLFwiJGtleVwiLHMpLE0obyxcIiRoYXNOb3JtYWxcIixpKSxvfWZ1bmN0aW9uIGxlKHQsZSxuKXt2YXIgcj1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg/bi5hcHBseShudWxsLGFyZ3VtZW50cyk6bih7fSk7cmV0dXJuKHQ9dCYmXCJvYmplY3RcIj09dHlwZW9mIHQmJiFBcnJheS5pc0FycmF5KHQpP1t0XTpvZSh0KSkmJigwPT09dC5sZW5ndGh8fDE9PT10Lmxlbmd0aCYmdFswXS5pc0NvbW1lbnQpP3ZvaWQgMDp0fTtyZXR1cm4gbi5wcm94eSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7Z2V0OnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxyfWZ1bmN0aW9uIGZlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRbZV19fWZ1bmN0aW9uIHBlKHQsZSl7dmFyIHIsbyxhLHMsYztpZihBcnJheS5pc0FycmF5KHQpfHxcInN0cmluZ1wiPT10eXBlb2YgdClmb3Iocj1uZXcgQXJyYXkodC5sZW5ndGgpLG89MCxhPXQubGVuZ3RoO288YTtvKyspcltvXT1lKHRbb10sbyk7ZWxzZSBpZihcIm51bWJlclwiPT10eXBlb2YgdClmb3Iocj1uZXcgQXJyYXkodCksbz0wO288dDtvKyspcltvXT1lKG8rMSxvKTtlbHNlIGlmKGkodCkpaWYocnQmJnRbU3ltYm9sLml0ZXJhdG9yXSl7cj1bXTtmb3IodmFyIHU9dFtTeW1ib2wuaXRlcmF0b3JdKCksbD11Lm5leHQoKTshbC5kb25lOylyLnB1c2goZShsLnZhbHVlLHIubGVuZ3RoKSksbD11Lm5leHQoKX1lbHNlIGZvcihzPU9iamVjdC5rZXlzKHQpLHI9bmV3IEFycmF5KHMubGVuZ3RoKSxvPTAsYT1zLmxlbmd0aDtvPGE7bysrKWM9c1tvXSxyW29dPWUodFtjXSxjLG8pO3JldHVybiBuKHIpfHwocj1bXSksci5faXNWTGlzdD0hMCxyfWZ1bmN0aW9uIGRlKHQsZSxuLHIpe3ZhciBvLGk9dGhpcy4kc2NvcGVkU2xvdHNbdF07aT8obj1ufHx7fSxyJiYobj14KHgoe30sciksbikpLG89aShuKXx8ZSk6bz10aGlzLiRzbG90c1t0XXx8ZTt2YXIgYT1uJiZuLnNsb3Q7cmV0dXJuIGE/dGhpcy4kY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIse3Nsb3Q6YX0sbyk6b31mdW5jdGlvbiB2ZSh0KXtyZXR1cm4gSXQodGhpcy4kb3B0aW9ucyxcImZpbHRlcnNcIix0KXx8RX1mdW5jdGlvbiBoZSh0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KHQpPy0xPT09dC5pbmRleE9mKGUpOnQhPT1lfWZ1bmN0aW9uIG1lKHQsZSxuLHIsbyl7dmFyIGk9TC5rZXlDb2Rlc1tlXXx8bjtyZXR1cm4gbyYmciYmIUwua2V5Q29kZXNbZV0/aGUobyxyKTppP2hlKGksdCk6cj8kKHIpIT09ZTp2b2lkIDB9ZnVuY3Rpb24geWUodCxlLG4scixvKXtpZihuKWlmKGkobikpe3ZhciBhO0FycmF5LmlzQXJyYXkobikmJihuPU8obikpO3ZhciBzPWZ1bmN0aW9uKGkpe2lmKFwiY2xhc3NcIj09PWl8fFwic3R5bGVcIj09PWl8fGQoaSkpYT10O2Vsc2V7dmFyIHM9dC5hdHRycyYmdC5hdHRycy50eXBlO2E9cnx8TC5tdXN0VXNlUHJvcChlLHMsaSk/dC5kb21Qcm9wc3x8KHQuZG9tUHJvcHM9e30pOnQuYXR0cnN8fCh0LmF0dHJzPXt9KX12YXIgYz1fKGkpLHU9JChpKTtjIGluIGF8fHUgaW4gYXx8KGFbaV09bltpXSxvJiYoKHQub258fCh0Lm9uPXt9KSlbXCJ1cGRhdGU6XCIraV09ZnVuY3Rpb24odCl7bltpXT10fSkpfTtmb3IodmFyIGMgaW4gbilzKGMpfWVsc2U7cmV0dXJuIHR9ZnVuY3Rpb24gZ2UodCxlKXt2YXIgbj10aGlzLl9zdGF0aWNUcmVlc3x8KHRoaXMuX3N0YXRpY1RyZWVzPVtdKSxyPW5bdF07cmV0dXJuIHImJiFlP3I6KGJlKHI9blt0XT10aGlzLiRvcHRpb25zLnN0YXRpY1JlbmRlckZuc1t0XS5jYWxsKHRoaXMuX3JlbmRlclByb3h5LG51bGwsdGhpcyksXCJfX3N0YXRpY19fXCIrdCwhMSkscil9ZnVuY3Rpb24gX2UodCxlLG4pe3JldHVybiBiZSh0LFwiX19vbmNlX19cIitlKyhuP1wiX1wiK246XCJcIiksITApLHR9ZnVuY3Rpb24gYmUodCxlLG4pe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspdFtyXSYmXCJzdHJpbmdcIiE9dHlwZW9mIHRbcl0mJkNlKHRbcl0sZStcIl9cIityLG4pO2Vsc2UgQ2UodCxlLG4pfWZ1bmN0aW9uIENlKHQsZSxuKXt0LmlzU3RhdGljPSEwLHQua2V5PWUsdC5pc09uY2U9bn1mdW5jdGlvbiAkZSh0LGUpe2lmKGUpaWYocyhlKSl7dmFyIG49dC5vbj10Lm9uP3goe30sdC5vbik6e307Zm9yKHZhciByIGluIGUpe3ZhciBvPW5bcl0saT1lW3JdO25bcl09bz9bXS5jb25jYXQobyxpKTppfX1lbHNlO3JldHVybiB0fWZ1bmN0aW9uIHdlKHQsZSxuLHIpe2U9ZXx8eyRzdGFibGU6IW59O2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXt2YXIgaT10W29dO0FycmF5LmlzQXJyYXkoaSk/d2UoaSxlLG4pOmkmJihpLnByb3h5JiYoaS5mbi5wcm94eT0hMCksZVtpLmtleV09aS5mbil9cmV0dXJuIHImJihlLiRrZXk9ciksZX1mdW5jdGlvbiBBZSh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bis9Mil7dmFyIHI9ZVtuXTtcInN0cmluZ1wiPT10eXBlb2YgciYmciYmKHRbZVtuXV09ZVtuKzFdKX1yZXR1cm4gdH1mdW5jdGlvbiB4ZSh0LGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0P2UrdDp0fWZ1bmN0aW9uIE9lKHQpe3QuX289X2UsdC5fbj1mLHQuX3M9bCx0Ll9sPXBlLHQuX3Q9ZGUsdC5fcT1qLHQuX2k9VCx0Ll9tPWdlLHQuX2Y9dmUsdC5faz1tZSx0Ll9iPXllLHQuX3Y9ZHQsdC5fZT1wdCx0Ll91PXdlLHQuX2c9JGUsdC5fZD1BZSx0Ll9wPXhlfWZ1bmN0aW9uIGtlKGUsbixvLGksYSl7dmFyIHMsYz10aGlzLHU9YS5vcHRpb25zO20oaSxcIl91aWRcIik/KHM9T2JqZWN0LmNyZWF0ZShpKSkuX29yaWdpbmFsPWk6KHM9aSxpPWkuX29yaWdpbmFsKTt2YXIgbD1yKHUuX2NvbXBpbGVkKSxmPSFsO3RoaXMuZGF0YT1lLHRoaXMucHJvcHM9bix0aGlzLmNoaWxkcmVuPW8sdGhpcy5wYXJlbnQ9aSx0aGlzLmxpc3RlbmVycz1lLm9ufHx0LHRoaXMuaW5qZWN0aW9ucz1hZSh1LmluamVjdCxpKSx0aGlzLnNsb3RzPWZ1bmN0aW9uKCl7cmV0dXJuIGMuJHNsb3RzfHx1ZShlLnNjb3BlZFNsb3RzLGMuJHNsb3RzPXNlKG8saSkpLGMuJHNsb3RzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInNjb3BlZFNsb3RzXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHVlKGUuc2NvcGVkU2xvdHMsdGhpcy5zbG90cygpKX19KSxsJiYodGhpcy4kb3B0aW9ucz11LHRoaXMuJHNsb3RzPXRoaXMuc2xvdHMoKSx0aGlzLiRzY29wZWRTbG90cz11ZShlLnNjb3BlZFNsb3RzLHRoaXMuJHNsb3RzKSksdS5fc2NvcGVJZD90aGlzLl9jPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPUxlKHMsdCxlLG4scixmKTtyZXR1cm4gbyYmIUFycmF5LmlzQXJyYXkobykmJihvLmZuU2NvcGVJZD11Ll9zY29wZUlkLG8uZm5Db250ZXh0PWkpLG99OnRoaXMuX2M9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIExlKHMsdCxlLG4scixmKX19ZnVuY3Rpb24gU2UodCxlLG4scixvKXt2YXIgaT12dCh0KTtyZXR1cm4gaS5mbkNvbnRleHQ9bixpLmZuT3B0aW9ucz1yLGUuc2xvdCYmKChpLmRhdGF8fChpLmRhdGE9e30pKS5zbG90PWUuc2xvdCksaX1mdW5jdGlvbiBFZSh0LGUpe2Zvcih2YXIgbiBpbiBlKXRbXyhuKV09ZVtuXX1PZShrZS5wcm90b3R5cGUpO3ZhciBqZT17aW5pdDpmdW5jdGlvbih0LGUpe2lmKHQuY29tcG9uZW50SW5zdGFuY2UmJiF0LmNvbXBvbmVudEluc3RhbmNlLl9pc0Rlc3Ryb3llZCYmdC5kYXRhLmtlZXBBbGl2ZSl7dmFyIHI9dDtqZS5wcmVwYXRjaChyLHIpfWVsc2V7KHQuY29tcG9uZW50SW5zdGFuY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj17X2lzQ29tcG9uZW50OiEwLF9wYXJlbnRWbm9kZTp0LHBhcmVudDplfSxvPXQuZGF0YS5pbmxpbmVUZW1wbGF0ZTtuKG8pJiYoci5yZW5kZXI9by5yZW5kZXIsci5zdGF0aWNSZW5kZXJGbnM9by5zdGF0aWNSZW5kZXJGbnMpO3JldHVybiBuZXcgdC5jb21wb25lbnRPcHRpb25zLkN0b3Iocil9KHQscWUpKS4kbW91bnQoZT90LmVsbTp2b2lkIDAsZSl9fSxwcmVwYXRjaDpmdW5jdGlvbihlLG4pe3ZhciByPW4uY29tcG9uZW50T3B0aW9uczshZnVuY3Rpb24oZSxuLHIsbyxpKXt2YXIgYT1vLmRhdGEuc2NvcGVkU2xvdHMscz1lLiRzY29wZWRTbG90cyxjPSEhKGEmJiFhLiRzdGFibGV8fHMhPT10JiYhcy4kc3RhYmxlfHxhJiZlLiRzY29wZWRTbG90cy4ka2V5IT09YS4ka2V5KSx1PSEhKGl8fGUuJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVufHxjKTtlLiRvcHRpb25zLl9wYXJlbnRWbm9kZT1vLGUuJHZub2RlPW8sZS5fdm5vZGUmJihlLl92bm9kZS5wYXJlbnQ9byk7aWYoZS4kb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW49aSxlLiRhdHRycz1vLmRhdGEuYXR0cnN8fHQsZS4kbGlzdGVuZXJzPXJ8fHQsbiYmZS4kb3B0aW9ucy5wcm9wcyl7X3QoITEpO2Zvcih2YXIgbD1lLl9wcm9wcyxmPWUuJG9wdGlvbnMuX3Byb3BLZXlzfHxbXSxwPTA7cDxmLmxlbmd0aDtwKyspe3ZhciBkPWZbcF0sdj1lLiRvcHRpb25zLnByb3BzO2xbZF09RHQoZCx2LG4sZSl9X3QoITApLGUuJG9wdGlvbnMucHJvcHNEYXRhPW59cj1yfHx0O3ZhciBoPWUuJG9wdGlvbnMuX3BhcmVudExpc3RlbmVycztlLiRvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnM9cixXZShlLHIsaCksdSYmKGUuJHNsb3RzPXNlKGksby5jb250ZXh0KSxlLiRmb3JjZVVwZGF0ZSgpKX0obi5jb21wb25lbnRJbnN0YW5jZT1lLmNvbXBvbmVudEluc3RhbmNlLHIucHJvcHNEYXRhLHIubGlzdGVuZXJzLG4sci5jaGlsZHJlbil9LGluc2VydDpmdW5jdGlvbih0KXt2YXIgZSxuPXQuY29udGV4dCxyPXQuY29tcG9uZW50SW5zdGFuY2U7ci5faXNNb3VudGVkfHwoci5faXNNb3VudGVkPSEwLFplKHIsXCJtb3VudGVkXCIpKSx0LmRhdGEua2VlcEFsaXZlJiYobi5faXNNb3VudGVkPygoZT1yKS5faW5hY3RpdmU9ITEsUWUucHVzaChlKSk6R2UociwhMCkpfSxkZXN0cm95OmZ1bmN0aW9uKHQpe3ZhciBlPXQuY29tcG9uZW50SW5zdGFuY2U7ZS5faXNEZXN0cm95ZWR8fCh0LmRhdGEua2VlcEFsaXZlP2Z1bmN0aW9uIHQoZSxuKXtpZihuJiYoZS5fZGlyZWN0SW5hY3RpdmU9ITAsWGUoZSkpKXJldHVybjtpZighZS5faW5hY3RpdmUpe2UuX2luYWN0aXZlPSEwO2Zvcih2YXIgcj0wO3I8ZS4kY2hpbGRyZW4ubGVuZ3RoO3IrKyl0KGUuJGNoaWxkcmVuW3JdKTtaZShlLFwiZGVhY3RpdmF0ZWRcIil9fShlLCEwKTplLiRkZXN0cm95KCkpfX0sVGU9T2JqZWN0LmtleXMoamUpO2Z1bmN0aW9uIEllKG8sYSxzLGMsbCl7aWYoIWUobykpe3ZhciBmPXMuJG9wdGlvbnMuX2Jhc2U7aWYoaShvKSYmKG89Zi5leHRlbmQobykpLFwiZnVuY3Rpb25cIj09dHlwZW9mIG8pe3ZhciBwO2lmKGUoby5jaWQpJiZ2b2lkIDA9PT0obz1mdW5jdGlvbih0LG8pe2lmKHIodC5lcnJvcikmJm4odC5lcnJvckNvbXApKXJldHVybiB0LmVycm9yQ29tcDtpZihuKHQucmVzb2x2ZWQpKXJldHVybiB0LnJlc29sdmVkO3ZhciBhPUZlO2EmJm4odC5vd25lcnMpJiYtMT09PXQub3duZXJzLmluZGV4T2YoYSkmJnQub3duZXJzLnB1c2goYSk7aWYocih0LmxvYWRpbmcpJiZuKHQubG9hZGluZ0NvbXApKXJldHVybiB0LmxvYWRpbmdDb21wO2lmKGEmJiFuKHQub3duZXJzKSl7dmFyIHM9dC5vd25lcnM9W2FdLGM9ITAsbD1udWxsLGY9bnVsbDthLiRvbihcImhvb2s6ZGVzdHJveWVkXCIsZnVuY3Rpb24oKXtyZXR1cm4gdihzLGEpfSk7dmFyIHA9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAsbj1zLmxlbmd0aDtlPG47ZSsrKXNbZV0uJGZvcmNlVXBkYXRlKCk7dCYmKHMubGVuZ3RoPTAsbnVsbCE9PWwmJihjbGVhclRpbWVvdXQobCksbD1udWxsKSxudWxsIT09ZiYmKGNsZWFyVGltZW91dChmKSxmPW51bGwpKX0sZD1JKGZ1bmN0aW9uKGUpe3QucmVzb2x2ZWQ9UmUoZSxvKSxjP3MubGVuZ3RoPTA6cCghMCl9KSxoPUkoZnVuY3Rpb24oZSl7bih0LmVycm9yQ29tcCkmJih0LmVycm9yPSEwLHAoITApKX0pLG09dChkLGgpO3JldHVybiBpKG0pJiYodShtKT9lKHQucmVzb2x2ZWQpJiZtLnRoZW4oZCxoKTp1KG0uY29tcG9uZW50KSYmKG0uY29tcG9uZW50LnRoZW4oZCxoKSxuKG0uZXJyb3IpJiYodC5lcnJvckNvbXA9UmUobS5lcnJvcixvKSksbihtLmxvYWRpbmcpJiYodC5sb2FkaW5nQ29tcD1SZShtLmxvYWRpbmcsbyksMD09PW0uZGVsYXk/dC5sb2FkaW5nPSEwOmw9c2V0VGltZW91dChmdW5jdGlvbigpe2w9bnVsbCxlKHQucmVzb2x2ZWQpJiZlKHQuZXJyb3IpJiYodC5sb2FkaW5nPSEwLHAoITEpKX0sbS5kZWxheXx8MjAwKSksbihtLnRpbWVvdXQpJiYoZj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Zj1udWxsLGUodC5yZXNvbHZlZCkmJmgobnVsbCl9LG0udGltZW91dCkpKSksYz0hMSx0LmxvYWRpbmc/dC5sb2FkaW5nQ29tcDp0LnJlc29sdmVkfX0ocD1vLGYpKSlyZXR1cm4gZnVuY3Rpb24odCxlLG4scixvKXt2YXIgaT1wdCgpO3JldHVybiBpLmFzeW5jRmFjdG9yeT10LGkuYXN5bmNNZXRhPXtkYXRhOmUsY29udGV4dDpuLGNoaWxkcmVuOnIsdGFnOm99LGl9KHAsYSxzLGMsbCk7YT1hfHx7fSxfbihvKSxuKGEubW9kZWwpJiZmdW5jdGlvbih0LGUpe3ZhciByPXQubW9kZWwmJnQubW9kZWwucHJvcHx8XCJ2YWx1ZVwiLG89dC5tb2RlbCYmdC5tb2RlbC5ldmVudHx8XCJpbnB1dFwiOyhlLmF0dHJzfHwoZS5hdHRycz17fSkpW3JdPWUubW9kZWwudmFsdWU7dmFyIGk9ZS5vbnx8KGUub249e30pLGE9aVtvXSxzPWUubW9kZWwuY2FsbGJhY2s7bihhKT8oQXJyYXkuaXNBcnJheShhKT8tMT09PWEuaW5kZXhPZihzKTphIT09cykmJihpW29dPVtzXS5jb25jYXQoYSkpOmlbb109c30oby5vcHRpb25zLGEpO3ZhciBkPWZ1bmN0aW9uKHQscixvKXt2YXIgaT1yLm9wdGlvbnMucHJvcHM7aWYoIWUoaSkpe3ZhciBhPXt9LHM9dC5hdHRycyxjPXQucHJvcHM7aWYobihzKXx8bihjKSlmb3IodmFyIHUgaW4gaSl7dmFyIGw9JCh1KTtyZShhLGMsdSxsLCEwKXx8cmUoYSxzLHUsbCwhMSl9cmV0dXJuIGF9fShhLG8pO2lmKHIoby5vcHRpb25zLmZ1bmN0aW9uYWwpKXJldHVybiBmdW5jdGlvbihlLHIsbyxpLGEpe3ZhciBzPWUub3B0aW9ucyxjPXt9LHU9cy5wcm9wcztpZihuKHUpKWZvcih2YXIgbCBpbiB1KWNbbF09RHQobCx1LHJ8fHQpO2Vsc2UgbihvLmF0dHJzKSYmRWUoYyxvLmF0dHJzKSxuKG8ucHJvcHMpJiZFZShjLG8ucHJvcHMpO3ZhciBmPW5ldyBrZShvLGMsYSxpLGUpLHA9cy5yZW5kZXIuY2FsbChudWxsLGYuX2MsZik7aWYocCBpbnN0YW5jZW9mIGx0KXJldHVybiBTZShwLG8sZi5wYXJlbnQscyk7aWYoQXJyYXkuaXNBcnJheShwKSl7Zm9yKHZhciBkPW9lKHApfHxbXSx2PW5ldyBBcnJheShkLmxlbmd0aCksaD0wO2g8ZC5sZW5ndGg7aCsrKXZbaF09U2UoZFtoXSxvLGYucGFyZW50LHMpO3JldHVybiB2fX0obyxkLGEscyxjKTt2YXIgaD1hLm9uO2lmKGEub249YS5uYXRpdmVPbixyKG8ub3B0aW9ucy5hYnN0cmFjdCkpe3ZhciBtPWEuc2xvdDthPXt9LG0mJihhLnNsb3Q9bSl9IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmhvb2t8fCh0Lmhvb2s9e30pLG49MDtuPFRlLmxlbmd0aDtuKyspe3ZhciByPVRlW25dLG89ZVtyXSxpPWplW3JdO289PT1pfHxvJiZvLl9tZXJnZWR8fChlW3JdPW8/RGUoaSxvKTppKX19KGEpO3ZhciB5PW8ub3B0aW9ucy5uYW1lfHxsO3JldHVybiBuZXcgbHQoXCJ2dWUtY29tcG9uZW50LVwiK28uY2lkKyh5P1wiLVwiK3k6XCJcIiksYSx2b2lkIDAsdm9pZCAwLHZvaWQgMCxzLHtDdG9yOm8scHJvcHNEYXRhOmQsbGlzdGVuZXJzOmgsdGFnOmwsY2hpbGRyZW46Y30scCl9fX1mdW5jdGlvbiBEZSh0LGUpe3ZhciBuPWZ1bmN0aW9uKG4scil7dChuLHIpLGUobixyKX07cmV0dXJuIG4uX21lcmdlZD0hMCxufXZhciBOZT0xLFBlPTI7ZnVuY3Rpb24gTGUodCxhLHMsYyx1LGwpe3JldHVybihBcnJheS5pc0FycmF5KHMpfHxvKHMpKSYmKHU9YyxjPXMscz12b2lkIDApLHIobCkmJih1PVBlKSxmdW5jdGlvbih0LG8sYSxzLGMpe2lmKG4oYSkmJm4oYS5fX29iX18pKXJldHVybiBwdCgpO24oYSkmJm4oYS5pcykmJihvPWEuaXMpO2lmKCFvKXJldHVybiBwdCgpO0FycmF5LmlzQXJyYXkocykmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHNbMF0mJigoYT1hfHx7fSkuc2NvcGVkU2xvdHM9e2RlZmF1bHQ6c1swXX0scy5sZW5ndGg9MCk7Yz09PVBlP3M9b2Uocyk6Yz09PU5lJiYocz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZihBcnJheS5pc0FycmF5KHRbZV0pKXJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLHQpO3JldHVybiB0fShzKSk7dmFyIHUsbDtpZihcInN0cmluZ1wiPT10eXBlb2Ygbyl7dmFyIGY7bD10LiR2bm9kZSYmdC4kdm5vZGUubnN8fEwuZ2V0VGFnTmFtZXNwYWNlKG8pLHU9TC5pc1Jlc2VydmVkVGFnKG8pP25ldyBsdChMLnBhcnNlUGxhdGZvcm1UYWdOYW1lKG8pLGEscyx2b2lkIDAsdm9pZCAwLHQpOmEmJmEucHJlfHwhbihmPUl0KHQuJG9wdGlvbnMsXCJjb21wb25lbnRzXCIsbykpP25ldyBsdChvLGEscyx2b2lkIDAsdm9pZCAwLHQpOkllKGYsYSx0LHMsbyl9ZWxzZSB1PUllKG8sYSx0LHMpO3JldHVybiBBcnJheS5pc0FycmF5KHUpP3U6bih1KT8obihsKSYmZnVuY3Rpb24gdChvLGksYSl7by5ucz1pO1wiZm9yZWlnbk9iamVjdFwiPT09by50YWcmJihpPXZvaWQgMCxhPSEwKTtpZihuKG8uY2hpbGRyZW4pKWZvcih2YXIgcz0wLGM9by5jaGlsZHJlbi5sZW5ndGg7czxjO3MrKyl7dmFyIHU9by5jaGlsZHJlbltzXTtuKHUudGFnKSYmKGUodS5ucyl8fHIoYSkmJlwic3ZnXCIhPT11LnRhZykmJnQodSxpLGEpfX0odSxsKSxuKGEpJiZmdW5jdGlvbih0KXtpKHQuc3R5bGUpJiZRdCh0LnN0eWxlKTtpKHQuY2xhc3MpJiZRdCh0LmNsYXNzKX0oYSksdSk6cHQoKX0odCxhLHMsYyx1KX12YXIgTWUsRmU9bnVsbDtmdW5jdGlvbiBSZSh0LGUpe3JldHVybih0Ll9fZXNNb2R1bGV8fHJ0JiZcIk1vZHVsZVwiPT09dFtTeW1ib2wudG9TdHJpbmdUYWddKSYmKHQ9dC5kZWZhdWx0KSxpKHQpP2UuZXh0ZW5kKHQpOnR9ZnVuY3Rpb24gVWUodCl7cmV0dXJuIHQuaXNDb21tZW50JiZ0LmFzeW5jRmFjdG9yeX1mdW5jdGlvbiBIZSh0KXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgcj10W2VdO2lmKG4ocikmJihuKHIuY29tcG9uZW50T3B0aW9ucyl8fFVlKHIpKSlyZXR1cm4gcn19ZnVuY3Rpb24gQmUodCxlKXtNZS4kb24odCxlKX1mdW5jdGlvbiBWZSh0LGUpe01lLiRvZmYodCxlKX1mdW5jdGlvbiB6ZSh0LGUpe3ZhciBuPU1lO3JldHVybiBmdW5jdGlvbiByKCl7bnVsbCE9PWUuYXBwbHkobnVsbCxhcmd1bWVudHMpJiZuLiRvZmYodCxyKX19ZnVuY3Rpb24gV2UodCxlLG4pe01lPXQsZWUoZSxufHx7fSxCZSxWZSx6ZSx0KSxNZT12b2lkIDB9dmFyIHFlPW51bGw7ZnVuY3Rpb24gS2UodCl7dmFyIGU9cWU7cmV0dXJuIHFlPXQsZnVuY3Rpb24oKXtxZT1lfX1mdW5jdGlvbiBYZSh0KXtmb3IoO3QmJih0PXQuJHBhcmVudCk7KWlmKHQuX2luYWN0aXZlKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEdlKHQsZSl7aWYoZSl7aWYodC5fZGlyZWN0SW5hY3RpdmU9ITEsWGUodCkpcmV0dXJufWVsc2UgaWYodC5fZGlyZWN0SW5hY3RpdmUpcmV0dXJuO2lmKHQuX2luYWN0aXZlfHxudWxsPT09dC5faW5hY3RpdmUpe3QuX2luYWN0aXZlPSExO2Zvcih2YXIgbj0wO248dC4kY2hpbGRyZW4ubGVuZ3RoO24rKylHZSh0LiRjaGlsZHJlbltuXSk7WmUodCxcImFjdGl2YXRlZFwiKX19ZnVuY3Rpb24gWmUodCxlKXtjdCgpO3ZhciBuPXQuJG9wdGlvbnNbZV0scj1lK1wiIGhvb2tcIjtpZihuKWZvcih2YXIgbz0wLGk9bi5sZW5ndGg7bzxpO28rKylGdChuW29dLHQsbnVsbCx0LHIpO3QuX2hhc0hvb2tFdmVudCYmdC4kZW1pdChcImhvb2s6XCIrZSksdXQoKX12YXIgSmU9W10sUWU9W10sWWU9e30sdG49ITEsZW49ITEsbm49MDt2YXIgcm49MCxvbj1EYXRlLm5vdztpZihIJiYhVyl7dmFyIGFuPXdpbmRvdy5wZXJmb3JtYW5jZTthbiYmXCJmdW5jdGlvblwiPT10eXBlb2YgYW4ubm93JiZvbigpPmRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIikudGltZVN0YW1wJiYob249ZnVuY3Rpb24oKXtyZXR1cm4gYW4ubm93KCl9KX1mdW5jdGlvbiBzbigpe3ZhciB0LGU7Zm9yKHJuPW9uKCksZW49ITAsSmUuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmlkLWUuaWR9KSxubj0wO25uPEplLmxlbmd0aDtubisrKSh0PUplW25uXSkuYmVmb3JlJiZ0LmJlZm9yZSgpLGU9dC5pZCxZZVtlXT1udWxsLHQucnVuKCk7dmFyIG49UWUuc2xpY2UoKSxyPUplLnNsaWNlKCk7bm49SmUubGVuZ3RoPVFlLmxlbmd0aD0wLFllPXt9LHRuPWVuPSExLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0uX2luYWN0aXZlPSEwLEdlKHRbZV0sITApfShuKSxmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtmb3IoO2UtLTspe3ZhciBuPXRbZV0scj1uLnZtO3IuX3dhdGNoZXI9PT1uJiZyLl9pc01vdW50ZWQmJiFyLl9pc0Rlc3Ryb3llZCYmWmUocixcInVwZGF0ZWRcIil9fShyKSx0dCYmTC5kZXZ0b29scyYmdHQuZW1pdChcImZsdXNoXCIpfXZhciBjbj0wLHVuPWZ1bmN0aW9uKHQsZSxuLHIsbyl7dGhpcy52bT10LG8mJih0Ll93YXRjaGVyPXRoaXMpLHQuX3dhdGNoZXJzLnB1c2godGhpcykscj8odGhpcy5kZWVwPSEhci5kZWVwLHRoaXMudXNlcj0hIXIudXNlcix0aGlzLmxhenk9ISFyLmxhenksdGhpcy5zeW5jPSEhci5zeW5jLHRoaXMuYmVmb3JlPXIuYmVmb3JlKTp0aGlzLmRlZXA9dGhpcy51c2VyPXRoaXMubGF6eT10aGlzLnN5bmM9ITEsdGhpcy5jYj1uLHRoaXMuaWQ9Kytjbix0aGlzLmFjdGl2ZT0hMCx0aGlzLmRpcnR5PXRoaXMubGF6eSx0aGlzLmRlcHM9W10sdGhpcy5uZXdEZXBzPVtdLHRoaXMuZGVwSWRzPW5ldyBudCx0aGlzLm5ld0RlcElkcz1uZXcgbnQsdGhpcy5leHByZXNzaW9uPVwiXCIsXCJmdW5jdGlvblwiPT10eXBlb2YgZT90aGlzLmdldHRlcj1lOih0aGlzLmdldHRlcj1mdW5jdGlvbih0KXtpZighRi50ZXN0KHQpKXt2YXIgZT10LnNwbGl0KFwiLlwiKTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe2lmKCF0KXJldHVybjt0PXRbZVtuXV19cmV0dXJuIHR9fX0oZSksdGhpcy5nZXR0ZXJ8fCh0aGlzLmdldHRlcj1rKSksdGhpcy52YWx1ZT10aGlzLmxhenk/dm9pZCAwOnRoaXMuZ2V0KCl9O3VuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXt2YXIgdDtjdCh0aGlzKTt2YXIgZT10aGlzLnZtO3RyeXt0PXRoaXMuZ2V0dGVyLmNhbGwoZSxlKX1jYXRjaCh0KXtpZighdGhpcy51c2VyKXRocm93IHQ7TXQodCxlLCdnZXR0ZXIgZm9yIHdhdGNoZXIgXCInK3RoaXMuZXhwcmVzc2lvbisnXCInKX1maW5hbGx5e3RoaXMuZGVlcCYmUXQodCksdXQoKSx0aGlzLmNsZWFudXBEZXBzKCl9cmV0dXJuIHR9LHVuLnByb3RvdHlwZS5hZGREZXA9ZnVuY3Rpb24odCl7dmFyIGU9dC5pZDt0aGlzLm5ld0RlcElkcy5oYXMoZSl8fCh0aGlzLm5ld0RlcElkcy5hZGQoZSksdGhpcy5uZXdEZXBzLnB1c2godCksdGhpcy5kZXBJZHMuaGFzKGUpfHx0LmFkZFN1Yih0aGlzKSl9LHVuLnByb3RvdHlwZS5jbGVhbnVwRGVwcz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmRlcHMubGVuZ3RoO3QtLTspe3ZhciBlPXRoaXMuZGVwc1t0XTt0aGlzLm5ld0RlcElkcy5oYXMoZS5pZCl8fGUucmVtb3ZlU3ViKHRoaXMpfXZhciBuPXRoaXMuZGVwSWRzO3RoaXMuZGVwSWRzPXRoaXMubmV3RGVwSWRzLHRoaXMubmV3RGVwSWRzPW4sdGhpcy5uZXdEZXBJZHMuY2xlYXIoKSxuPXRoaXMuZGVwcyx0aGlzLmRlcHM9dGhpcy5uZXdEZXBzLHRoaXMubmV3RGVwcz1uLHRoaXMubmV3RGVwcy5sZW5ndGg9MH0sdW4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3RoaXMubGF6eT90aGlzLmRpcnR5PSEwOnRoaXMuc3luYz90aGlzLnJ1bigpOmZ1bmN0aW9uKHQpe3ZhciBlPXQuaWQ7aWYobnVsbD09WWVbZV0pe2lmKFllW2VdPSEwLGVuKXtmb3IodmFyIG49SmUubGVuZ3RoLTE7bj5ubiYmSmVbbl0uaWQ+dC5pZDspbi0tO0plLnNwbGljZShuKzEsMCx0KX1lbHNlIEplLnB1c2godCk7dG58fCh0bj0hMCxadChzbikpfX0odGhpcyl9LHVuLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXtpZih0aGlzLmFjdGl2ZSl7dmFyIHQ9dGhpcy5nZXQoKTtpZih0IT09dGhpcy52YWx1ZXx8aSh0KXx8dGhpcy5kZWVwKXt2YXIgZT10aGlzLnZhbHVlO2lmKHRoaXMudmFsdWU9dCx0aGlzLnVzZXIpdHJ5e3RoaXMuY2IuY2FsbCh0aGlzLnZtLHQsZSl9Y2F0Y2godCl7TXQodCx0aGlzLnZtLCdjYWxsYmFjayBmb3Igd2F0Y2hlciBcIicrdGhpcy5leHByZXNzaW9uKydcIicpfWVsc2UgdGhpcy5jYi5jYWxsKHRoaXMudm0sdCxlKX19fSx1bi5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oKXt0aGlzLnZhbHVlPXRoaXMuZ2V0KCksdGhpcy5kaXJ0eT0hMX0sdW4ucHJvdG90eXBlLmRlcGVuZD1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmRlcHMubGVuZ3RoO3QtLTspdGhpcy5kZXBzW3RdLmRlcGVuZCgpfSx1bi5wcm90b3R5cGUudGVhcmRvd249ZnVuY3Rpb24oKXtpZih0aGlzLmFjdGl2ZSl7dGhpcy52bS5faXNCZWluZ0Rlc3Ryb3llZHx8dih0aGlzLnZtLl93YXRjaGVycyx0aGlzKTtmb3IodmFyIHQ9dGhpcy5kZXBzLmxlbmd0aDt0LS07KXRoaXMuZGVwc1t0XS5yZW1vdmVTdWIodGhpcyk7dGhpcy5hY3RpdmU9ITF9fTt2YXIgbG49e2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDprLHNldDprfTtmdW5jdGlvbiBmbih0LGUsbil7bG4uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbZV1bbl19LGxuLnNldD1mdW5jdGlvbih0KXt0aGlzW2VdW25dPXR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4sbG4pfWZ1bmN0aW9uIHBuKHQpe3QuX3dhdGNoZXJzPVtdO3ZhciBlPXQuJG9wdGlvbnM7ZS5wcm9wcyYmZnVuY3Rpb24odCxlKXt2YXIgbj10LiRvcHRpb25zLnByb3BzRGF0YXx8e30scj10Ll9wcm9wcz17fSxvPXQuJG9wdGlvbnMuX3Byb3BLZXlzPVtdO3QuJHBhcmVudCYmX3QoITEpO3ZhciBpPWZ1bmN0aW9uKGkpe28ucHVzaChpKTt2YXIgYT1EdChpLGUsbix0KTskdChyLGksYSksaSBpbiB0fHxmbih0LFwiX3Byb3BzXCIsaSl9O2Zvcih2YXIgYSBpbiBlKWkoYSk7X3QoITApfSh0LGUucHJvcHMpLGUubWV0aG9kcyYmZnVuY3Rpb24odCxlKXt0LiRvcHRpb25zLnByb3BzO2Zvcih2YXIgbiBpbiBlKXRbbl09XCJmdW5jdGlvblwiIT10eXBlb2YgZVtuXT9rOncoZVtuXSx0KX0odCxlLm1ldGhvZHMpLGUuZGF0YT9mdW5jdGlvbih0KXt2YXIgZT10LiRvcHRpb25zLmRhdGE7cyhlPXQuX2RhdGE9XCJmdW5jdGlvblwiPT10eXBlb2YgZT9mdW5jdGlvbih0LGUpe2N0KCk7dHJ5e3JldHVybiB0LmNhbGwoZSxlKX1jYXRjaCh0KXtyZXR1cm4gTXQodCxlLFwiZGF0YSgpXCIpLHt9fWZpbmFsbHl7dXQoKX19KGUsdCk6ZXx8e30pfHwoZT17fSk7dmFyIG49T2JqZWN0LmtleXMoZSkscj10LiRvcHRpb25zLnByb3BzLG89KHQuJG9wdGlvbnMubWV0aG9kcyxuLmxlbmd0aCk7Zm9yKDtvLS07KXt2YXIgaT1uW29dO3ImJm0ocixpKXx8KGE9dm9pZCAwLDM2IT09KGE9KGkrXCJcIikuY2hhckNvZGVBdCgwKSkmJjk1IT09YSYmZm4odCxcIl9kYXRhXCIsaSkpfXZhciBhO0N0KGUsITApfSh0KTpDdCh0Ll9kYXRhPXt9LCEwKSxlLmNvbXB1dGVkJiZmdW5jdGlvbih0LGUpe3ZhciBuPXQuX2NvbXB1dGVkV2F0Y2hlcnM9T2JqZWN0LmNyZWF0ZShudWxsKSxyPVkoKTtmb3IodmFyIG8gaW4gZSl7dmFyIGk9ZVtvXSxhPVwiZnVuY3Rpb25cIj09dHlwZW9mIGk/aTppLmdldDtyfHwobltvXT1uZXcgdW4odCxhfHxrLGssZG4pKSxvIGluIHR8fHZuKHQsbyxpKX19KHQsZS5jb21wdXRlZCksZS53YXRjaCYmZS53YXRjaCE9PVomJmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuIGluIGUpe3ZhciByPWVbbl07aWYoQXJyYXkuaXNBcnJheShyKSlmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKyl5bih0LG4scltvXSk7ZWxzZSB5bih0LG4scil9fSh0LGUud2F0Y2gpfXZhciBkbj17bGF6eTohMH07ZnVuY3Rpb24gdm4odCxlLG4pe3ZhciByPSFZKCk7XCJmdW5jdGlvblwiPT10eXBlb2Ygbj8obG4uZ2V0PXI/aG4oZSk6bW4obiksbG4uc2V0PWspOihsbi5nZXQ9bi5nZXQ/ciYmITEhPT1uLmNhY2hlP2huKGUpOm1uKG4uZ2V0KTprLGxuLnNldD1uLnNldHx8ayksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxsbil9ZnVuY3Rpb24gaG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY29tcHV0ZWRXYXRjaGVycyYmdGhpcy5fY29tcHV0ZWRXYXRjaGVyc1t0XTtpZihlKXJldHVybiBlLmRpcnR5JiZlLmV2YWx1YXRlKCksYXQudGFyZ2V0JiZlLmRlcGVuZCgpLGUudmFsdWV9fWZ1bmN0aW9uIG1uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmNhbGwodGhpcyx0aGlzKX19ZnVuY3Rpb24geW4odCxlLG4scil7cmV0dXJuIHMobikmJihyPW4sbj1uLmhhbmRsZXIpLFwic3RyaW5nXCI9PXR5cGVvZiBuJiYobj10W25dKSx0LiR3YXRjaChlLG4scil9dmFyIGduPTA7ZnVuY3Rpb24gX24odCl7dmFyIGU9dC5vcHRpb25zO2lmKHQuc3VwZXIpe3ZhciBuPV9uKHQuc3VwZXIpO2lmKG4hPT10LnN1cGVyT3B0aW9ucyl7dC5zdXBlck9wdGlvbnM9bjt2YXIgcj1mdW5jdGlvbih0KXt2YXIgZSxuPXQub3B0aW9ucyxyPXQuc2VhbGVkT3B0aW9ucztmb3IodmFyIG8gaW4gbiluW29dIT09cltvXSYmKGV8fChlPXt9KSxlW29dPW5bb10pO3JldHVybiBlfSh0KTtyJiZ4KHQuZXh0ZW5kT3B0aW9ucyxyKSwoZT10Lm9wdGlvbnM9VHQobix0LmV4dGVuZE9wdGlvbnMpKS5uYW1lJiYoZS5jb21wb25lbnRzW2UubmFtZV09dCl9fXJldHVybiBlfWZ1bmN0aW9uIGJuKHQpe3RoaXMuX2luaXQodCl9ZnVuY3Rpb24gQ24odCl7dC5jaWQ9MDt2YXIgZT0xO3QuZXh0ZW5kPWZ1bmN0aW9uKHQpe3Q9dHx8e307dmFyIG49dGhpcyxyPW4uY2lkLG89dC5fQ3Rvcnx8KHQuX0N0b3I9e30pO2lmKG9bcl0pcmV0dXJuIG9bcl07dmFyIGk9dC5uYW1lfHxuLm9wdGlvbnMubmFtZSxhPWZ1bmN0aW9uKHQpe3RoaXMuX2luaXQodCl9O3JldHVybihhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKSkuY29uc3RydWN0b3I9YSxhLmNpZD1lKyssYS5vcHRpb25zPVR0KG4ub3B0aW9ucyx0KSxhLnN1cGVyPW4sYS5vcHRpb25zLnByb3BzJiZmdW5jdGlvbih0KXt2YXIgZT10Lm9wdGlvbnMucHJvcHM7Zm9yKHZhciBuIGluIGUpZm4odC5wcm90b3R5cGUsXCJfcHJvcHNcIixuKX0oYSksYS5vcHRpb25zLmNvbXB1dGVkJiZmdW5jdGlvbih0KXt2YXIgZT10Lm9wdGlvbnMuY29tcHV0ZWQ7Zm9yKHZhciBuIGluIGUpdm4odC5wcm90b3R5cGUsbixlW25dKX0oYSksYS5leHRlbmQ9bi5leHRlbmQsYS5taXhpbj1uLm1peGluLGEudXNlPW4udXNlLE4uZm9yRWFjaChmdW5jdGlvbih0KXthW3RdPW5bdF19KSxpJiYoYS5vcHRpb25zLmNvbXBvbmVudHNbaV09YSksYS5zdXBlck9wdGlvbnM9bi5vcHRpb25zLGEuZXh0ZW5kT3B0aW9ucz10LGEuc2VhbGVkT3B0aW9ucz14KHt9LGEub3B0aW9ucyksb1tyXT1hLGF9fWZ1bmN0aW9uICRuKHQpe3JldHVybiB0JiYodC5DdG9yLm9wdGlvbnMubmFtZXx8dC50YWcpfWZ1bmN0aW9uIHduKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dC5pbmRleE9mKGUpPi0xOlwic3RyaW5nXCI9PXR5cGVvZiB0P3Quc3BsaXQoXCIsXCIpLmluZGV4T2YoZSk+LTE6KG49dCxcIltvYmplY3QgUmVnRXhwXVwiPT09YS5jYWxsKG4pJiZ0LnRlc3QoZSkpO3ZhciBufWZ1bmN0aW9uIEFuKHQsZSl7dmFyIG49dC5jYWNoZSxyPXQua2V5cyxvPXQuX3Zub2RlO2Zvcih2YXIgaSBpbiBuKXt2YXIgYT1uW2ldO2lmKGEpe3ZhciBzPSRuKGEuY29tcG9uZW50T3B0aW9ucyk7cyYmIWUocykmJnhuKG4saSxyLG8pfX19ZnVuY3Rpb24geG4odCxlLG4scil7dmFyIG89dFtlXTshb3x8ciYmby50YWc9PT1yLnRhZ3x8by5jb21wb25lbnRJbnN0YW5jZS4kZGVzdHJveSgpLHRbZV09bnVsbCx2KG4sZSl9IWZ1bmN0aW9uKGUpe2UucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXM7bi5fdWlkPWduKyssbi5faXNWdWU9ITAsZSYmZS5faXNDb21wb25lbnQ/ZnVuY3Rpb24odCxlKXt2YXIgbj10LiRvcHRpb25zPU9iamVjdC5jcmVhdGUodC5jb25zdHJ1Y3Rvci5vcHRpb25zKSxyPWUuX3BhcmVudFZub2RlO24ucGFyZW50PWUucGFyZW50LG4uX3BhcmVudFZub2RlPXI7dmFyIG89ci5jb21wb25lbnRPcHRpb25zO24ucHJvcHNEYXRhPW8ucHJvcHNEYXRhLG4uX3BhcmVudExpc3RlbmVycz1vLmxpc3RlbmVycyxuLl9yZW5kZXJDaGlsZHJlbj1vLmNoaWxkcmVuLG4uX2NvbXBvbmVudFRhZz1vLnRhZyxlLnJlbmRlciYmKG4ucmVuZGVyPWUucmVuZGVyLG4uc3RhdGljUmVuZGVyRm5zPWUuc3RhdGljUmVuZGVyRm5zKX0obixlKTpuLiRvcHRpb25zPVR0KF9uKG4uY29uc3RydWN0b3IpLGV8fHt9LG4pLG4uX3JlbmRlclByb3h5PW4sbi5fc2VsZj1uLGZ1bmN0aW9uKHQpe3ZhciBlPXQuJG9wdGlvbnMsbj1lLnBhcmVudDtpZihuJiYhZS5hYnN0cmFjdCl7Zm9yKDtuLiRvcHRpb25zLmFic3RyYWN0JiZuLiRwYXJlbnQ7KW49bi4kcGFyZW50O24uJGNoaWxkcmVuLnB1c2godCl9dC4kcGFyZW50PW4sdC4kcm9vdD1uP24uJHJvb3Q6dCx0LiRjaGlsZHJlbj1bXSx0LiRyZWZzPXt9LHQuX3dhdGNoZXI9bnVsbCx0Ll9pbmFjdGl2ZT1udWxsLHQuX2RpcmVjdEluYWN0aXZlPSExLHQuX2lzTW91bnRlZD0hMSx0Ll9pc0Rlc3Ryb3llZD0hMSx0Ll9pc0JlaW5nRGVzdHJveWVkPSExfShuKSxmdW5jdGlvbih0KXt0Ll9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0Ll9oYXNIb29rRXZlbnQ9ITE7dmFyIGU9dC4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO2UmJldlKHQsZSl9KG4pLGZ1bmN0aW9uKGUpe2UuX3Zub2RlPW51bGwsZS5fc3RhdGljVHJlZXM9bnVsbDt2YXIgbj1lLiRvcHRpb25zLHI9ZS4kdm5vZGU9bi5fcGFyZW50Vm5vZGUsbz1yJiZyLmNvbnRleHQ7ZS4kc2xvdHM9c2Uobi5fcmVuZGVyQ2hpbGRyZW4sbyksZS4kc2NvcGVkU2xvdHM9dCxlLl9jPWZ1bmN0aW9uKHQsbixyLG8pe3JldHVybiBMZShlLHQsbixyLG8sITEpfSxlLiRjcmVhdGVFbGVtZW50PWZ1bmN0aW9uKHQsbixyLG8pe3JldHVybiBMZShlLHQsbixyLG8sITApfTt2YXIgaT1yJiZyLmRhdGE7JHQoZSxcIiRhdHRyc1wiLGkmJmkuYXR0cnN8fHQsbnVsbCwhMCksJHQoZSxcIiRsaXN0ZW5lcnNcIixuLl9wYXJlbnRMaXN0ZW5lcnN8fHQsbnVsbCwhMCl9KG4pLFplKG4sXCJiZWZvcmVDcmVhdGVcIiksZnVuY3Rpb24odCl7dmFyIGU9YWUodC4kb3B0aW9ucy5pbmplY3QsdCk7ZSYmKF90KCExKSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4peyR0KHQsbixlW25dKX0pLF90KCEwKSl9KG4pLHBuKG4pLGZ1bmN0aW9uKHQpe3ZhciBlPXQuJG9wdGlvbnMucHJvdmlkZTtlJiYodC5fcHJvdmlkZWQ9XCJmdW5jdGlvblwiPT10eXBlb2YgZT9lLmNhbGwodCk6ZSl9KG4pLFplKG4sXCJjcmVhdGVkXCIpLG4uJG9wdGlvbnMuZWwmJm4uJG1vdW50KG4uJG9wdGlvbnMuZWwpfX0oYm4pLGZ1bmN0aW9uKHQpe3ZhciBlPXtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YX19LG49e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcm9wc319O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxcIiRkYXRhXCIsZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLFwiJHByb3BzXCIsbiksdC5wcm90b3R5cGUuJHNldD13dCx0LnByb3RvdHlwZS4kZGVsZXRlPUF0LHQucHJvdG90eXBlLiR3YXRjaD1mdW5jdGlvbih0LGUsbil7aWYocyhlKSlyZXR1cm4geW4odGhpcyx0LGUsbik7KG49bnx8e30pLnVzZXI9ITA7dmFyIHI9bmV3IHVuKHRoaXMsdCxlLG4pO2lmKG4uaW1tZWRpYXRlKXRyeXtlLmNhbGwodGhpcyxyLnZhbHVlKX1jYXRjaCh0KXtNdCh0LHRoaXMsJ2NhbGxiYWNrIGZvciBpbW1lZGlhdGUgd2F0Y2hlciBcIicrci5leHByZXNzaW9uKydcIicpfXJldHVybiBmdW5jdGlvbigpe3IudGVhcmRvd24oKX19fShibiksZnVuY3Rpb24odCl7dmFyIGU9L15ob29rOi87dC5wcm90b3R5cGUuJG9uPWZ1bmN0aW9uKHQsbil7dmFyIHI9dGhpcztpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgbz0wLGk9dC5sZW5ndGg7bzxpO28rKylyLiRvbih0W29dLG4pO2Vsc2Uoci5fZXZlbnRzW3RdfHwoci5fZXZlbnRzW3RdPVtdKSkucHVzaChuKSxlLnRlc3QodCkmJihyLl9oYXNIb29rRXZlbnQ9ITApO3JldHVybiByfSx0LnByb3RvdHlwZS4kb25jZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7ZnVuY3Rpb24gcigpe24uJG9mZih0LHIpLGUuYXBwbHkobixhcmd1bWVudHMpfXJldHVybiByLmZuPWUsbi4kb24odCxyKSxufSx0LnByb3RvdHlwZS4kb2ZmPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcztpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbi5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksbjtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIHI9MCxvPXQubGVuZ3RoO3I8bztyKyspbi4kb2ZmKHRbcl0sZSk7cmV0dXJuIG59dmFyIGksYT1uLl9ldmVudHNbdF07aWYoIWEpcmV0dXJuIG47aWYoIWUpcmV0dXJuIG4uX2V2ZW50c1t0XT1udWxsLG47Zm9yKHZhciBzPWEubGVuZ3RoO3MtLTspaWYoKGk9YVtzXSk9PT1lfHxpLmZuPT09ZSl7YS5zcGxpY2UocywxKTticmVha31yZXR1cm4gbn0sdC5wcm90b3R5cGUuJGVtaXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZXZlbnRzW3RdO2lmKGUpe2U9ZS5sZW5ndGg+MT9BKGUpOmU7Zm9yKHZhciBuPUEoYXJndW1lbnRzLDEpLHI9J2V2ZW50IGhhbmRsZXIgZm9yIFwiJyt0KydcIicsbz0wLGk9ZS5sZW5ndGg7bzxpO28rKylGdChlW29dLHRoaXMsbix0aGlzLHIpfXJldHVybiB0aGlzfX0oYm4pLGZ1bmN0aW9uKHQpe3QucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9bi4kZWwsbz1uLl92bm9kZSxpPUtlKG4pO24uX3Zub2RlPXQsbi4kZWw9bz9uLl9fcGF0Y2hfXyhvLHQpOm4uX19wYXRjaF9fKG4uJGVsLHQsZSwhMSksaSgpLHImJihyLl9fdnVlX189bnVsbCksbi4kZWwmJihuLiRlbC5fX3Z1ZV9fPW4pLG4uJHZub2RlJiZuLiRwYXJlbnQmJm4uJHZub2RlPT09bi4kcGFyZW50Ll92bm9kZSYmKG4uJHBhcmVudC4kZWw9bi4kZWwpfSx0LnByb3RvdHlwZS4kZm9yY2VVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl93YXRjaGVyJiZ0aGlzLl93YXRjaGVyLnVwZGF0ZSgpfSx0LnByb3RvdHlwZS4kZGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYoIXQuX2lzQmVpbmdEZXN0cm95ZWQpe1plKHQsXCJiZWZvcmVEZXN0cm95XCIpLHQuX2lzQmVpbmdEZXN0cm95ZWQ9ITA7dmFyIGU9dC4kcGFyZW50OyFlfHxlLl9pc0JlaW5nRGVzdHJveWVkfHx0LiRvcHRpb25zLmFic3RyYWN0fHx2KGUuJGNoaWxkcmVuLHQpLHQuX3dhdGNoZXImJnQuX3dhdGNoZXIudGVhcmRvd24oKTtmb3IodmFyIG49dC5fd2F0Y2hlcnMubGVuZ3RoO24tLTspdC5fd2F0Y2hlcnNbbl0udGVhcmRvd24oKTt0Ll9kYXRhLl9fb2JfXyYmdC5fZGF0YS5fX29iX18udm1Db3VudC0tLHQuX2lzRGVzdHJveWVkPSEwLHQuX19wYXRjaF9fKHQuX3Zub2RlLG51bGwpLFplKHQsXCJkZXN0cm95ZWRcIiksdC4kb2ZmKCksdC4kZWwmJih0LiRlbC5fX3Z1ZV9fPW51bGwpLHQuJHZub2RlJiYodC4kdm5vZGUucGFyZW50PW51bGwpfX19KGJuKSxmdW5jdGlvbih0KXtPZSh0LnByb3RvdHlwZSksdC5wcm90b3R5cGUuJG5leHRUaWNrPWZ1bmN0aW9uKHQpe3JldHVybiBadCh0LHRoaXMpfSx0LnByb3RvdHlwZS5fcmVuZGVyPWZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLG49ZS4kb3B0aW9ucyxyPW4ucmVuZGVyLG89bi5fcGFyZW50Vm5vZGU7byYmKGUuJHNjb3BlZFNsb3RzPXVlKG8uZGF0YS5zY29wZWRTbG90cyxlLiRzbG90cyxlLiRzY29wZWRTbG90cykpLGUuJHZub2RlPW87dHJ5e0ZlPWUsdD1yLmNhbGwoZS5fcmVuZGVyUHJveHksZS4kY3JlYXRlRWxlbWVudCl9Y2F0Y2gobil7TXQobixlLFwicmVuZGVyXCIpLHQ9ZS5fdm5vZGV9ZmluYWxseXtGZT1udWxsfXJldHVybiBBcnJheS5pc0FycmF5KHQpJiYxPT09dC5sZW5ndGgmJih0PXRbMF0pLHQgaW5zdGFuY2VvZiBsdHx8KHQ9cHQoKSksdC5wYXJlbnQ9byx0fX0oYm4pO3ZhciBPbj1bU3RyaW5nLFJlZ0V4cCxBcnJheV0sa249e0tlZXBBbGl2ZTp7bmFtZTpcImtlZXAtYWxpdmVcIixhYnN0cmFjdDohMCxwcm9wczp7aW5jbHVkZTpPbixleGNsdWRlOk9uLG1heDpbU3RyaW5nLE51bWJlcl19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmNhY2hlPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5rZXlzPVtdfSxkZXN0cm95ZWQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5jYWNoZSl4bih0aGlzLmNhY2hlLHQsdGhpcy5rZXlzKX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy4kd2F0Y2goXCJpbmNsdWRlXCIsZnVuY3Rpb24oZSl7QW4odCxmdW5jdGlvbih0KXtyZXR1cm4gd24oZSx0KX0pfSksdGhpcy4kd2F0Y2goXCJleGNsdWRlXCIsZnVuY3Rpb24oZSl7QW4odCxmdW5jdGlvbih0KXtyZXR1cm4hd24oZSx0KX0pfSl9LHJlbmRlcjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuJHNsb3RzLmRlZmF1bHQsZT1IZSh0KSxuPWUmJmUuY29tcG9uZW50T3B0aW9ucztpZihuKXt2YXIgcj0kbihuKSxvPXRoaXMuaW5jbHVkZSxpPXRoaXMuZXhjbHVkZTtpZihvJiYoIXJ8fCF3bihvLHIpKXx8aSYmciYmd24oaSxyKSlyZXR1cm4gZTt2YXIgYT10aGlzLmNhY2hlLHM9dGhpcy5rZXlzLGM9bnVsbD09ZS5rZXk/bi5DdG9yLmNpZCsobi50YWc/XCI6OlwiK24udGFnOlwiXCIpOmUua2V5O2FbY10/KGUuY29tcG9uZW50SW5zdGFuY2U9YVtjXS5jb21wb25lbnRJbnN0YW5jZSx2KHMsYykscy5wdXNoKGMpKTooYVtjXT1lLHMucHVzaChjKSx0aGlzLm1heCYmcy5sZW5ndGg+cGFyc2VJbnQodGhpcy5tYXgpJiZ4bihhLHNbMF0scyx0aGlzLl92bm9kZSkpLGUuZGF0YS5rZWVwQWxpdmU9ITB9cmV0dXJuIGV8fHQmJnRbMF19fX07IWZ1bmN0aW9uKHQpe3ZhciBlPXtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTH19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiY29uZmlnXCIsZSksdC51dGlsPXt3YXJuOm90LGV4dGVuZDp4LG1lcmdlT3B0aW9uczpUdCxkZWZpbmVSZWFjdGl2ZTokdH0sdC5zZXQ9d3QsdC5kZWxldGU9QXQsdC5uZXh0VGljaz1adCx0Lm9ic2VydmFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIEN0KHQpLHR9LHQub3B0aW9ucz1PYmplY3QuY3JlYXRlKG51bGwpLE4uZm9yRWFjaChmdW5jdGlvbihlKXt0Lm9wdGlvbnNbZStcInNcIl09T2JqZWN0LmNyZWF0ZShudWxsKX0pLHQub3B0aW9ucy5fYmFzZT10LHgodC5vcHRpb25zLmNvbXBvbmVudHMsa24pLGZ1bmN0aW9uKHQpe3QudXNlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2luc3RhbGxlZFBsdWdpbnN8fCh0aGlzLl9pbnN0YWxsZWRQbHVnaW5zPVtdKTtpZihlLmluZGV4T2YodCk+LTEpcmV0dXJuIHRoaXM7dmFyIG49QShhcmd1bWVudHMsMSk7cmV0dXJuIG4udW5zaGlmdCh0aGlzKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0Lmluc3RhbGw/dC5pbnN0YWxsLmFwcGx5KHQsbik6XCJmdW5jdGlvblwiPT10eXBlb2YgdCYmdC5hcHBseShudWxsLG4pLGUucHVzaCh0KSx0aGlzfX0odCksZnVuY3Rpb24odCl7dC5taXhpbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zPVR0KHRoaXMub3B0aW9ucyx0KSx0aGlzfX0odCksQ24odCksZnVuY3Rpb24odCl7Ti5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RbZV09ZnVuY3Rpb24odCxuKXtyZXR1cm4gbj8oXCJjb21wb25lbnRcIj09PWUmJnMobikmJihuLm5hbWU9bi5uYW1lfHx0LG49dGhpcy5vcHRpb25zLl9iYXNlLmV4dGVuZChuKSksXCJkaXJlY3RpdmVcIj09PWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIG4mJihuPXtiaW5kOm4sdXBkYXRlOm59KSx0aGlzLm9wdGlvbnNbZStcInNcIl1bdF09bixuKTp0aGlzLm9wdGlvbnNbZStcInNcIl1bdF19fSl9KHQpfShibiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGJuLnByb3RvdHlwZSxcIiRpc1NlcnZlclwiLHtnZXQ6WX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShibi5wcm90b3R5cGUsXCIkc3NyQ29udGV4dFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kdm5vZGUmJnRoaXMuJHZub2RlLnNzckNvbnRleHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGJuLFwiRnVuY3Rpb25hbFJlbmRlckNvbnRleHRcIix7dmFsdWU6a2V9KSxibi52ZXJzaW9uPVwiMi42LjEwXCI7dmFyIFNuPXAoXCJzdHlsZSxjbGFzc1wiKSxFbj1wKFwiaW5wdXQsdGV4dGFyZWEsb3B0aW9uLHNlbGVjdCxwcm9ncmVzc1wiKSxqbj1wKFwiY29udGVudGVkaXRhYmxlLGRyYWdnYWJsZSxzcGVsbGNoZWNrXCIpLFRuPXAoXCJldmVudHMsY2FyZXQsdHlwaW5nLHBsYWludGV4dC1vbmx5XCIpLEluPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1uKGUpfHxcImZhbHNlXCI9PT1lP1wiZmFsc2VcIjpcImNvbnRlbnRlZGl0YWJsZVwiPT09dCYmVG4oZSk/ZTpcInRydWVcIn0sRG49cChcImFsbG93ZnVsbHNjcmVlbixhc3luYyxhdXRvZm9jdXMsYXV0b3BsYXksY2hlY2tlZCxjb21wYWN0LGNvbnRyb2xzLGRlY2xhcmUsZGVmYXVsdCxkZWZhdWx0Y2hlY2tlZCxkZWZhdWx0bXV0ZWQsZGVmYXVsdHNlbGVjdGVkLGRlZmVyLGRpc2FibGVkLGVuYWJsZWQsZm9ybW5vdmFsaWRhdGUsaGlkZGVuLGluZGV0ZXJtaW5hdGUsaW5lcnQsaXNtYXAsaXRlbXNjb3BlLGxvb3AsbXVsdGlwbGUsbXV0ZWQsbm9ocmVmLG5vcmVzaXplLG5vc2hhZGUsbm92YWxpZGF0ZSxub3dyYXAsb3BlbixwYXVzZW9uZXhpdCxyZWFkb25seSxyZXF1aXJlZCxyZXZlcnNlZCxzY29wZWQsc2VhbWxlc3Msc2VsZWN0ZWQsc29ydGFibGUsdHJhbnNsYXRlLHRydWVzcGVlZCx0eXBlbXVzdG1hdGNoLHZpc2libGVcIiksTm49XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsUG49ZnVuY3Rpb24odCl7cmV0dXJuXCI6XCI9PT10LmNoYXJBdCg1KSYmXCJ4bGlua1wiPT09dC5zbGljZSgwLDUpfSxMbj1mdW5jdGlvbih0KXtyZXR1cm4gUG4odCk/dC5zbGljZSg2LHQubGVuZ3RoKTpcIlwifSxNbj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dHx8ITE9PT10fTtmdW5jdGlvbiBGbih0KXtmb3IodmFyIGU9dC5kYXRhLHI9dCxvPXQ7bihvLmNvbXBvbmVudEluc3RhbmNlKTspKG89by5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUpJiZvLmRhdGEmJihlPVJuKG8uZGF0YSxlKSk7Zm9yKDtuKHI9ci5wYXJlbnQpOylyJiZyLmRhdGEmJihlPVJuKGUsci5kYXRhKSk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYobih0KXx8bihlKSlyZXR1cm4gVW4odCxIbihlKSk7cmV0dXJuXCJcIn0oZS5zdGF0aWNDbGFzcyxlLmNsYXNzKX1mdW5jdGlvbiBSbih0LGUpe3JldHVybntzdGF0aWNDbGFzczpVbih0LnN0YXRpY0NsYXNzLGUuc3RhdGljQ2xhc3MpLGNsYXNzOm4odC5jbGFzcyk/W3QuY2xhc3MsZS5jbGFzc106ZS5jbGFzc319ZnVuY3Rpb24gVW4odCxlKXtyZXR1cm4gdD9lP3QrXCIgXCIrZTp0OmV8fFwiXCJ9ZnVuY3Rpb24gSG4odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9XCJcIixvPTAsaT10Lmxlbmd0aDtvPGk7bysrKW4oZT1Ibih0W29dKSkmJlwiXCIhPT1lJiYociYmKHIrPVwiIFwiKSxyKz1lKTtyZXR1cm4gcn0odCk6aSh0KT9mdW5jdGlvbih0KXt2YXIgZT1cIlwiO2Zvcih2YXIgbiBpbiB0KXRbbl0mJihlJiYoZSs9XCIgXCIpLGUrPW4pO3JldHVybiBlfSh0KTpcInN0cmluZ1wiPT10eXBlb2YgdD90OlwiXCJ9dmFyIEJuPXtzdmc6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLG1hdGg6XCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCJ9LFZuPXAoXCJodG1sLGJvZHksYmFzZSxoZWFkLGxpbmssbWV0YSxzdHlsZSx0aXRsZSxhZGRyZXNzLGFydGljbGUsYXNpZGUsZm9vdGVyLGhlYWRlcixoMSxoMixoMyxoNCxoNSxoNixoZ3JvdXAsbmF2LHNlY3Rpb24sZGl2LGRkLGRsLGR0LGZpZ2NhcHRpb24sZmlndXJlLHBpY3R1cmUsaHIsaW1nLGxpLG1haW4sb2wscCxwcmUsdWwsYSxiLGFiYnIsYmRpLGJkbyxicixjaXRlLGNvZGUsZGF0YSxkZm4sZW0saSxrYmQsbWFyayxxLHJwLHJ0LHJ0YyxydWJ5LHMsc2FtcCxzbWFsbCxzcGFuLHN0cm9uZyxzdWIsc3VwLHRpbWUsdSx2YXIsd2JyLGFyZWEsYXVkaW8sbWFwLHRyYWNrLHZpZGVvLGVtYmVkLG9iamVjdCxwYXJhbSxzb3VyY2UsY2FudmFzLHNjcmlwdCxub3NjcmlwdCxkZWwsaW5zLGNhcHRpb24sY29sLGNvbGdyb3VwLHRhYmxlLHRoZWFkLHRib2R5LHRkLHRoLHRyLGJ1dHRvbixkYXRhbGlzdCxmaWVsZHNldCxmb3JtLGlucHV0LGxhYmVsLGxlZ2VuZCxtZXRlcixvcHRncm91cCxvcHRpb24sb3V0cHV0LHByb2dyZXNzLHNlbGVjdCx0ZXh0YXJlYSxkZXRhaWxzLGRpYWxvZyxtZW51LG1lbnVpdGVtLHN1bW1hcnksY29udGVudCxlbGVtZW50LHNoYWRvdyx0ZW1wbGF0ZSxibG9ja3F1b3RlLGlmcmFtZSx0Zm9vdFwiKSx6bj1wKFwic3ZnLGFuaW1hdGUsY2lyY2xlLGNsaXBwYXRoLGN1cnNvcixkZWZzLGRlc2MsZWxsaXBzZSxmaWx0ZXIsZm9udC1mYWNlLGZvcmVpZ25PYmplY3QsZyxnbHlwaCxpbWFnZSxsaW5lLG1hcmtlcixtYXNrLG1pc3NpbmctZ2x5cGgscGF0aCxwYXR0ZXJuLHBvbHlnb24scG9seWxpbmUscmVjdCxzd2l0Y2gsc3ltYm9sLHRleHQsdGV4dHBhdGgsdHNwYW4sdXNlLHZpZXdcIiwhMCksV249ZnVuY3Rpb24odCl7cmV0dXJuIFZuKHQpfHx6bih0KX07dmFyIHFuPU9iamVjdC5jcmVhdGUobnVsbCk7dmFyIEtuPXAoXCJ0ZXh0LG51bWJlcixwYXNzd29yZCxzZWFyY2gsZW1haWwsdGVsLHVybFwiKTt2YXIgWG49T2JqZWN0LmZyZWV6ZSh7Y3JlYXRlRWxlbWVudDpmdW5jdGlvbih0LGUpe3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCk7cmV0dXJuXCJzZWxlY3RcIiE9PXQ/bjooZS5kYXRhJiZlLmRhdGEuYXR0cnMmJnZvaWQgMCE9PWUuZGF0YS5hdHRycy5tdWx0aXBsZSYmbi5zZXRBdHRyaWJ1dGUoXCJtdWx0aXBsZVwiLFwibXVsdGlwbGVcIiksbil9LGNyZWF0ZUVsZW1lbnROUzpmdW5jdGlvbih0LGUpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoQm5bdF0sZSl9LGNyZWF0ZVRleHROb2RlOmZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0KX0sY3JlYXRlQ29tbWVudDpmdW5jdGlvbih0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKHQsZSxuKXt0Lmluc2VydEJlZm9yZShlLG4pfSxyZW1vdmVDaGlsZDpmdW5jdGlvbih0LGUpe3QucmVtb3ZlQ2hpbGQoZSl9LGFwcGVuZENoaWxkOmZ1bmN0aW9uKHQsZSl7dC5hcHBlbmRDaGlsZChlKX0scGFyZW50Tm9kZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5wYXJlbnROb2RlfSxuZXh0U2libGluZzpmdW5jdGlvbih0KXtyZXR1cm4gdC5uZXh0U2libGluZ30sdGFnTmFtZTpmdW5jdGlvbih0KXtyZXR1cm4gdC50YWdOYW1lfSxzZXRUZXh0Q29udGVudDpmdW5jdGlvbih0LGUpe3QudGV4dENvbnRlbnQ9ZX0sc2V0U3R5bGVTY29wZTpmdW5jdGlvbih0LGUpe3Quc2V0QXR0cmlidXRlKGUsXCJcIil9fSksR249e2NyZWF0ZTpmdW5jdGlvbih0LGUpe1puKGUpfSx1cGRhdGU6ZnVuY3Rpb24odCxlKXt0LmRhdGEucmVmIT09ZS5kYXRhLnJlZiYmKFpuKHQsITApLFpuKGUpKX0sZGVzdHJveTpmdW5jdGlvbih0KXtabih0LCEwKX19O2Z1bmN0aW9uIFpuKHQsZSl7dmFyIHI9dC5kYXRhLnJlZjtpZihuKHIpKXt2YXIgbz10LmNvbnRleHQsaT10LmNvbXBvbmVudEluc3RhbmNlfHx0LmVsbSxhPW8uJHJlZnM7ZT9BcnJheS5pc0FycmF5KGFbcl0pP3YoYVtyXSxpKTphW3JdPT09aSYmKGFbcl09dm9pZCAwKTp0LmRhdGEucmVmSW5Gb3I/QXJyYXkuaXNBcnJheShhW3JdKT9hW3JdLmluZGV4T2YoaSk8MCYmYVtyXS5wdXNoKGkpOmFbcl09W2ldOmFbcl09aX19dmFyIEpuPW5ldyBsdChcIlwiLHt9LFtdKSxRbj1bXCJjcmVhdGVcIixcImFjdGl2YXRlXCIsXCJ1cGRhdGVcIixcInJlbW92ZVwiLFwiZGVzdHJveVwiXTtmdW5jdGlvbiBZbih0LG8pe3JldHVybiB0LmtleT09PW8ua2V5JiYodC50YWc9PT1vLnRhZyYmdC5pc0NvbW1lbnQ9PT1vLmlzQ29tbWVudCYmbih0LmRhdGEpPT09bihvLmRhdGEpJiZmdW5jdGlvbih0LGUpe2lmKFwiaW5wdXRcIiE9PXQudGFnKXJldHVybiEwO3ZhciByLG89bihyPXQuZGF0YSkmJm4ocj1yLmF0dHJzKSYmci50eXBlLGk9bihyPWUuZGF0YSkmJm4ocj1yLmF0dHJzKSYmci50eXBlO3JldHVybiBvPT09aXx8S24obykmJktuKGkpfSh0LG8pfHxyKHQuaXNBc3luY1BsYWNlaG9sZGVyKSYmdC5hc3luY0ZhY3Rvcnk9PT1vLmFzeW5jRmFjdG9yeSYmZShvLmFzeW5jRmFjdG9yeS5lcnJvcikpfWZ1bmN0aW9uIHRyKHQsZSxyKXt2YXIgbyxpLGE9e307Zm9yKG89ZTtvPD1yOysrbyluKGk9dFtvXS5rZXkpJiYoYVtpXT1vKTtyZXR1cm4gYX12YXIgZXI9e2NyZWF0ZTpucix1cGRhdGU6bnIsZGVzdHJveTpmdW5jdGlvbih0KXtucih0LEpuKX19O2Z1bmN0aW9uIG5yKHQsZSl7KHQuZGF0YS5kaXJlY3RpdmVzfHxlLmRhdGEuZGlyZWN0aXZlcykmJmZ1bmN0aW9uKHQsZSl7dmFyIG4scixvLGk9dD09PUpuLGE9ZT09PUpuLHM9b3IodC5kYXRhLmRpcmVjdGl2ZXMsdC5jb250ZXh0KSxjPW9yKGUuZGF0YS5kaXJlY3RpdmVzLGUuY29udGV4dCksdT1bXSxsPVtdO2ZvcihuIGluIGMpcj1zW25dLG89Y1tuXSxyPyhvLm9sZFZhbHVlPXIudmFsdWUsby5vbGRBcmc9ci5hcmcsYXIobyxcInVwZGF0ZVwiLGUsdCksby5kZWYmJm8uZGVmLmNvbXBvbmVudFVwZGF0ZWQmJmwucHVzaChvKSk6KGFyKG8sXCJiaW5kXCIsZSx0KSxvLmRlZiYmby5kZWYuaW5zZXJ0ZWQmJnUucHVzaChvKSk7aWYodS5sZW5ndGgpe3ZhciBmPWZ1bmN0aW9uKCl7Zm9yKHZhciBuPTA7bjx1Lmxlbmd0aDtuKyspYXIodVtuXSxcImluc2VydGVkXCIsZSx0KX07aT9uZShlLFwiaW5zZXJ0XCIsZik6ZigpfWwubGVuZ3RoJiZuZShlLFwicG9zdHBhdGNoXCIsZnVuY3Rpb24oKXtmb3IodmFyIG49MDtuPGwubGVuZ3RoO24rKylhcihsW25dLFwiY29tcG9uZW50VXBkYXRlZFwiLGUsdCl9KTtpZighaSlmb3IobiBpbiBzKWNbbl18fGFyKHNbbl0sXCJ1bmJpbmRcIix0LHQsYSl9KHQsZSl9dmFyIHJyPU9iamVjdC5jcmVhdGUobnVsbCk7ZnVuY3Rpb24gb3IodCxlKXt2YXIgbixyLG89T2JqZWN0LmNyZWF0ZShudWxsKTtpZighdClyZXR1cm4gbztmb3Iobj0wO248dC5sZW5ndGg7bisrKShyPXRbbl0pLm1vZGlmaWVyc3x8KHIubW9kaWZpZXJzPXJyKSxvW2lyKHIpXT1yLHIuZGVmPUl0KGUuJG9wdGlvbnMsXCJkaXJlY3RpdmVzXCIsci5uYW1lKTtyZXR1cm4gb31mdW5jdGlvbiBpcih0KXtyZXR1cm4gdC5yYXdOYW1lfHx0Lm5hbWUrXCIuXCIrT2JqZWN0LmtleXModC5tb2RpZmllcnN8fHt9KS5qb2luKFwiLlwiKX1mdW5jdGlvbiBhcih0LGUsbixyLG8pe3ZhciBpPXQuZGVmJiZ0LmRlZltlXTtpZihpKXRyeXtpKG4uZWxtLHQsbixyLG8pfWNhdGNoKHIpe010KHIsbi5jb250ZXh0LFwiZGlyZWN0aXZlIFwiK3QubmFtZStcIiBcIitlK1wiIGhvb2tcIil9fXZhciBzcj1bR24sZXJdO2Z1bmN0aW9uIGNyKHQscil7dmFyIG89ci5jb21wb25lbnRPcHRpb25zO2lmKCEobihvKSYmITE9PT1vLkN0b3Iub3B0aW9ucy5pbmhlcml0QXR0cnN8fGUodC5kYXRhLmF0dHJzKSYmZShyLmRhdGEuYXR0cnMpKSl7dmFyIGksYSxzPXIuZWxtLGM9dC5kYXRhLmF0dHJzfHx7fSx1PXIuZGF0YS5hdHRyc3x8e307Zm9yKGkgaW4gbih1Ll9fb2JfXykmJih1PXIuZGF0YS5hdHRycz14KHt9LHUpKSx1KWE9dVtpXSxjW2ldIT09YSYmdXIocyxpLGEpO2ZvcihpIGluKFd8fEspJiZ1LnZhbHVlIT09Yy52YWx1ZSYmdXIocyxcInZhbHVlXCIsdS52YWx1ZSksYyllKHVbaV0pJiYoUG4oaSk/cy5yZW1vdmVBdHRyaWJ1dGVOUyhObixMbihpKSk6am4oaSl8fHMucmVtb3ZlQXR0cmlidXRlKGkpKX19ZnVuY3Rpb24gdXIodCxlLG4pe3QudGFnTmFtZS5pbmRleE9mKFwiLVwiKT4tMT9scih0LGUsbik6RG4oZSk/TW4obik/dC5yZW1vdmVBdHRyaWJ1dGUoZSk6KG49XCJhbGxvd2Z1bGxzY3JlZW5cIj09PWUmJlwiRU1CRURcIj09PXQudGFnTmFtZT9cInRydWVcIjplLHQuc2V0QXR0cmlidXRlKGUsbikpOmpuKGUpP3Quc2V0QXR0cmlidXRlKGUsSW4oZSxuKSk6UG4oZSk/TW4obik/dC5yZW1vdmVBdHRyaWJ1dGVOUyhObixMbihlKSk6dC5zZXRBdHRyaWJ1dGVOUyhObixlLG4pOmxyKHQsZSxuKX1mdW5jdGlvbiBscih0LGUsbil7aWYoTW4obikpdC5yZW1vdmVBdHRyaWJ1dGUoZSk7ZWxzZXtpZihXJiYhcSYmXCJURVhUQVJFQVwiPT09dC50YWdOYW1lJiZcInBsYWNlaG9sZGVyXCI9PT1lJiZcIlwiIT09biYmIXQuX19pZXBoKXt2YXIgcj1mdW5jdGlvbihlKXtlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImlucHV0XCIscil9O3QuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsciksdC5fX2llcGg9ITB9dC5zZXRBdHRyaWJ1dGUoZSxuKX19dmFyIGZyPXtjcmVhdGU6Y3IsdXBkYXRlOmNyfTtmdW5jdGlvbiBwcih0LHIpe3ZhciBvPXIuZWxtLGk9ci5kYXRhLGE9dC5kYXRhO2lmKCEoZShpLnN0YXRpY0NsYXNzKSYmZShpLmNsYXNzKSYmKGUoYSl8fGUoYS5zdGF0aWNDbGFzcykmJmUoYS5jbGFzcykpKSl7dmFyIHM9Rm4ociksYz1vLl90cmFuc2l0aW9uQ2xhc3NlcztuKGMpJiYocz1VbihzLEhuKGMpKSkscyE9PW8uX3ByZXZDbGFzcyYmKG8uc2V0QXR0cmlidXRlKFwiY2xhc3NcIixzKSxvLl9wcmV2Q2xhc3M9cyl9fXZhciBkcix2cj17Y3JlYXRlOnByLHVwZGF0ZTpwcn0saHI9XCJfX3JcIixtcj1cIl9fY1wiO2Z1bmN0aW9uIHlyKHQsZSxuKXt2YXIgcj1kcjtyZXR1cm4gZnVuY3Rpb24gbygpe251bGwhPT1lLmFwcGx5KG51bGwsYXJndW1lbnRzKSYmYnIodCxvLG4scil9fXZhciBncj1CdCYmIShHJiZOdW1iZXIoR1sxXSk8PTUzKTtmdW5jdGlvbiBfcih0LGUsbixyKXtpZihncil7dmFyIG89cm4saT1lO2U9aS5fd3JhcHBlcj1mdW5jdGlvbih0KXtpZih0LnRhcmdldD09PXQuY3VycmVudFRhcmdldHx8dC50aW1lU3RhbXA+PW98fHQudGltZVN0YW1wPD0wfHx0LnRhcmdldC5vd25lckRvY3VtZW50IT09ZG9jdW1lbnQpcmV0dXJuIGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1kci5hZGRFdmVudExpc3RlbmVyKHQsZSxKP3tjYXB0dXJlOm4scGFzc2l2ZTpyfTpuKX1mdW5jdGlvbiBicih0LGUsbixyKXsocnx8ZHIpLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxlLl93cmFwcGVyfHxlLG4pfWZ1bmN0aW9uIENyKHQscil7aWYoIWUodC5kYXRhLm9uKXx8IWUoci5kYXRhLm9uKSl7dmFyIG89ci5kYXRhLm9ufHx7fSxpPXQuZGF0YS5vbnx8e307ZHI9ci5lbG0sZnVuY3Rpb24odCl7aWYobih0W2hyXSkpe3ZhciBlPVc/XCJjaGFuZ2VcIjpcImlucHV0XCI7dFtlXT1bXS5jb25jYXQodFtocl0sdFtlXXx8W10pLGRlbGV0ZSB0W2hyXX1uKHRbbXJdKSYmKHQuY2hhbmdlPVtdLmNvbmNhdCh0W21yXSx0LmNoYW5nZXx8W10pLGRlbGV0ZSB0W21yXSl9KG8pLGVlKG8saSxfcixicix5cixyLmNvbnRleHQpLGRyPXZvaWQgMH19dmFyICRyLHdyPXtjcmVhdGU6Q3IsdXBkYXRlOkNyfTtmdW5jdGlvbiBBcih0LHIpe2lmKCFlKHQuZGF0YS5kb21Qcm9wcyl8fCFlKHIuZGF0YS5kb21Qcm9wcykpe3ZhciBvLGksYT1yLmVsbSxzPXQuZGF0YS5kb21Qcm9wc3x8e30sYz1yLmRhdGEuZG9tUHJvcHN8fHt9O2ZvcihvIGluIG4oYy5fX29iX18pJiYoYz1yLmRhdGEuZG9tUHJvcHM9eCh7fSxjKSkscylvIGluIGN8fChhW29dPVwiXCIpO2ZvcihvIGluIGMpe2lmKGk9Y1tvXSxcInRleHRDb250ZW50XCI9PT1vfHxcImlubmVySFRNTFwiPT09byl7aWYoci5jaGlsZHJlbiYmKHIuY2hpbGRyZW4ubGVuZ3RoPTApLGk9PT1zW29dKWNvbnRpbnVlOzE9PT1hLmNoaWxkTm9kZXMubGVuZ3RoJiZhLnJlbW92ZUNoaWxkKGEuY2hpbGROb2Rlc1swXSl9aWYoXCJ2YWx1ZVwiPT09byYmXCJQUk9HUkVTU1wiIT09YS50YWdOYW1lKXthLl92YWx1ZT1pO3ZhciB1PWUoaSk/XCJcIjpTdHJpbmcoaSk7eHIoYSx1KSYmKGEudmFsdWU9dSl9ZWxzZSBpZihcImlubmVySFRNTFwiPT09byYmem4oYS50YWdOYW1lKSYmZShhLmlubmVySFRNTCkpeygkcj0kcnx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSkuaW5uZXJIVE1MPVwiPHN2Zz5cIitpK1wiPC9zdmc+XCI7Zm9yKHZhciBsPSRyLmZpcnN0Q2hpbGQ7YS5maXJzdENoaWxkOylhLnJlbW92ZUNoaWxkKGEuZmlyc3RDaGlsZCk7Zm9yKDtsLmZpcnN0Q2hpbGQ7KWEuYXBwZW5kQ2hpbGQobC5maXJzdENoaWxkKX1lbHNlIGlmKGkhPT1zW29dKXRyeXthW29dPWl9Y2F0Y2godCl7fX19fWZ1bmN0aW9uIHhyKHQsZSl7cmV0dXJuIXQuY29tcG9zaW5nJiYoXCJPUFRJT05cIj09PXQudGFnTmFtZXx8ZnVuY3Rpb24odCxlKXt2YXIgbj0hMDt0cnl7bj1kb2N1bWVudC5hY3RpdmVFbGVtZW50IT09dH1jYXRjaCh0KXt9cmV0dXJuIG4mJnQudmFsdWUhPT1lfSh0LGUpfHxmdW5jdGlvbih0LGUpe3ZhciByPXQudmFsdWUsbz10Ll92TW9kaWZpZXJzO2lmKG4obykpe2lmKG8ubnVtYmVyKXJldHVybiBmKHIpIT09ZihlKTtpZihvLnRyaW0pcmV0dXJuIHIudHJpbSgpIT09ZS50cmltKCl9cmV0dXJuIHIhPT1lfSh0LGUpKX12YXIgT3I9e2NyZWF0ZTpBcix1cGRhdGU6QXJ9LGtyPXkoZnVuY3Rpb24odCl7dmFyIGU9e30sbj0vOiguKykvO3JldHVybiB0LnNwbGl0KC87KD8hW14oXSpcXCkpL2cpLmZvckVhY2goZnVuY3Rpb24odCl7aWYodCl7dmFyIHI9dC5zcGxpdChuKTtyLmxlbmd0aD4xJiYoZVtyWzBdLnRyaW0oKV09clsxXS50cmltKCkpfX0pLGV9KTtmdW5jdGlvbiBTcih0KXt2YXIgZT1Fcih0LnN0eWxlKTtyZXR1cm4gdC5zdGF0aWNTdHlsZT94KHQuc3RhdGljU3R5bGUsZSk6ZX1mdW5jdGlvbiBFcih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9PKHQpOlwic3RyaW5nXCI9PXR5cGVvZiB0P2tyKHQpOnR9dmFyIGpyLFRyPS9eLS0vLElyPS9cXHMqIWltcG9ydGFudCQvLERyPWZ1bmN0aW9uKHQsZSxuKXtpZihUci50ZXN0KGUpKXQuc3R5bGUuc2V0UHJvcGVydHkoZSxuKTtlbHNlIGlmKElyLnRlc3QobikpdC5zdHlsZS5zZXRQcm9wZXJ0eSgkKGUpLG4ucmVwbGFjZShJcixcIlwiKSxcImltcG9ydGFudFwiKTtlbHNle3ZhciByPVByKGUpO2lmKEFycmF5LmlzQXJyYXkobikpZm9yKHZhciBvPTAsaT1uLmxlbmd0aDtvPGk7bysrKXQuc3R5bGVbcl09bltvXTtlbHNlIHQuc3R5bGVbcl09bn19LE5yPVtcIldlYmtpdFwiLFwiTW96XCIsXCJtc1wiXSxQcj15KGZ1bmN0aW9uKHQpe2lmKGpyPWpyfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLnN0eWxlLFwiZmlsdGVyXCIhPT0odD1fKHQpKSYmdCBpbiBqcilyZXR1cm4gdDtmb3IodmFyIGU9dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpLG49MDtuPE5yLmxlbmd0aDtuKyspe3ZhciByPU5yW25dK2U7aWYociBpbiBqcilyZXR1cm4gcn19KTtmdW5jdGlvbiBMcih0LHIpe3ZhciBvPXIuZGF0YSxpPXQuZGF0YTtpZighKGUoby5zdGF0aWNTdHlsZSkmJmUoby5zdHlsZSkmJmUoaS5zdGF0aWNTdHlsZSkmJmUoaS5zdHlsZSkpKXt2YXIgYSxzLGM9ci5lbG0sdT1pLnN0YXRpY1N0eWxlLGw9aS5ub3JtYWxpemVkU3R5bGV8fGkuc3R5bGV8fHt9LGY9dXx8bCxwPUVyKHIuZGF0YS5zdHlsZSl8fHt9O3IuZGF0YS5ub3JtYWxpemVkU3R5bGU9bihwLl9fb2JfXyk/eCh7fSxwKTpwO3ZhciBkPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj17fTtpZihlKWZvcih2YXIgbz10O28uY29tcG9uZW50SW5zdGFuY2U7KShvPW8uY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlKSYmby5kYXRhJiYobj1TcihvLmRhdGEpKSYmeChyLG4pOyhuPVNyKHQuZGF0YSkpJiZ4KHIsbik7Zm9yKHZhciBpPXQ7aT1pLnBhcmVudDspaS5kYXRhJiYobj1TcihpLmRhdGEpKSYmeChyLG4pO3JldHVybiByfShyLCEwKTtmb3IocyBpbiBmKWUoZFtzXSkmJkRyKGMscyxcIlwiKTtmb3IocyBpbiBkKShhPWRbc10pIT09ZltzXSYmRHIoYyxzLG51bGw9PWE/XCJcIjphKX19dmFyIE1yPXtjcmVhdGU6THIsdXBkYXRlOkxyfSxGcj0vXFxzKy87ZnVuY3Rpb24gUnIodCxlKXtpZihlJiYoZT1lLnRyaW0oKSkpaWYodC5jbGFzc0xpc3QpZS5pbmRleE9mKFwiIFwiKT4tMT9lLnNwbGl0KEZyKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmNsYXNzTGlzdC5hZGQoZSl9KTp0LmNsYXNzTGlzdC5hZGQoZSk7ZWxzZXt2YXIgbj1cIiBcIisodC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIikrXCIgXCI7bi5pbmRleE9mKFwiIFwiK2UrXCIgXCIpPDAmJnQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwobitlKS50cmltKCkpfX1mdW5jdGlvbiBVcih0LGUpe2lmKGUmJihlPWUudHJpbSgpKSlpZih0LmNsYXNzTGlzdCllLmluZGV4T2YoXCIgXCIpPi0xP2Uuc3BsaXQoRnIpLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHQuY2xhc3NMaXN0LnJlbW92ZShlKX0pOnQuY2xhc3NMaXN0LnJlbW92ZShlKSx0LmNsYXNzTGlzdC5sZW5ndGh8fHQucmVtb3ZlQXR0cmlidXRlKFwiY2xhc3NcIik7ZWxzZXtmb3IodmFyIG49XCIgXCIrKHQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIil8fFwiXCIpK1wiIFwiLHI9XCIgXCIrZStcIiBcIjtuLmluZGV4T2Yocik+PTA7KW49bi5yZXBsYWNlKHIsXCIgXCIpOyhuPW4udHJpbSgpKT90LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsbik6dC5yZW1vdmVBdHRyaWJ1dGUoXCJjbGFzc1wiKX19ZnVuY3Rpb24gSHIodCl7aWYodCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHQpe3ZhciBlPXt9O3JldHVybiExIT09dC5jc3MmJngoZSxCcih0Lm5hbWV8fFwidlwiKSkseChlLHQpLGV9cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQ/QnIodCk6dm9pZCAwfX12YXIgQnI9eShmdW5jdGlvbih0KXtyZXR1cm57ZW50ZXJDbGFzczp0K1wiLWVudGVyXCIsZW50ZXJUb0NsYXNzOnQrXCItZW50ZXItdG9cIixlbnRlckFjdGl2ZUNsYXNzOnQrXCItZW50ZXItYWN0aXZlXCIsbGVhdmVDbGFzczp0K1wiLWxlYXZlXCIsbGVhdmVUb0NsYXNzOnQrXCItbGVhdmUtdG9cIixsZWF2ZUFjdGl2ZUNsYXNzOnQrXCItbGVhdmUtYWN0aXZlXCJ9fSksVnI9SCYmIXEsenI9XCJ0cmFuc2l0aW9uXCIsV3I9XCJhbmltYXRpb25cIixxcj1cInRyYW5zaXRpb25cIixLcj1cInRyYW5zaXRpb25lbmRcIixYcj1cImFuaW1hdGlvblwiLEdyPVwiYW5pbWF0aW9uZW5kXCI7VnImJih2b2lkIDA9PT13aW5kb3cub250cmFuc2l0aW9uZW5kJiZ2b2lkIDAhPT13aW5kb3cub253ZWJraXR0cmFuc2l0aW9uZW5kJiYocXI9XCJXZWJraXRUcmFuc2l0aW9uXCIsS3I9XCJ3ZWJraXRUcmFuc2l0aW9uRW5kXCIpLHZvaWQgMD09PXdpbmRvdy5vbmFuaW1hdGlvbmVuZCYmdm9pZCAwIT09d2luZG93Lm9ud2Via2l0YW5pbWF0aW9uZW5kJiYoWHI9XCJXZWJraXRBbmltYXRpb25cIixHcj1cIndlYmtpdEFuaW1hdGlvbkVuZFwiKSk7dmFyIFpyPUg/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpzZXRUaW1lb3V0OmZ1bmN0aW9uKHQpe3JldHVybiB0KCl9O2Z1bmN0aW9uIEpyKHQpe1pyKGZ1bmN0aW9uKCl7WnIodCl9KX1mdW5jdGlvbiBRcih0LGUpe3ZhciBuPXQuX3RyYW5zaXRpb25DbGFzc2VzfHwodC5fdHJhbnNpdGlvbkNsYXNzZXM9W10pO24uaW5kZXhPZihlKTwwJiYobi5wdXNoKGUpLFJyKHQsZSkpfWZ1bmN0aW9uIFlyKHQsZSl7dC5fdHJhbnNpdGlvbkNsYXNzZXMmJnYodC5fdHJhbnNpdGlvbkNsYXNzZXMsZSksVXIodCxlKX1mdW5jdGlvbiB0byh0LGUsbil7dmFyIHI9bm8odCxlKSxvPXIudHlwZSxpPXIudGltZW91dCxhPXIucHJvcENvdW50O2lmKCFvKXJldHVybiBuKCk7dmFyIHM9bz09PXpyP0tyOkdyLGM9MCx1PWZ1bmN0aW9uKCl7dC5yZW1vdmVFdmVudExpc3RlbmVyKHMsbCksbigpfSxsPWZ1bmN0aW9uKGUpe2UudGFyZ2V0PT09dCYmKytjPj1hJiZ1KCl9O3NldFRpbWVvdXQoZnVuY3Rpb24oKXtjPGEmJnUoKX0saSsxKSx0LmFkZEV2ZW50TGlzdGVuZXIocyxsKX12YXIgZW89L1xcYih0cmFuc2Zvcm18YWxsKSgsfCQpLztmdW5jdGlvbiBubyh0LGUpe3ZhciBuLHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCksbz0ocltxcitcIkRlbGF5XCJdfHxcIlwiKS5zcGxpdChcIiwgXCIpLGk9KHJbcXIrXCJEdXJhdGlvblwiXXx8XCJcIikuc3BsaXQoXCIsIFwiKSxhPXJvKG8saSkscz0ocltYcitcIkRlbGF5XCJdfHxcIlwiKS5zcGxpdChcIiwgXCIpLGM9KHJbWHIrXCJEdXJhdGlvblwiXXx8XCJcIikuc3BsaXQoXCIsIFwiKSx1PXJvKHMsYyksbD0wLGY9MDtyZXR1cm4gZT09PXpyP2E+MCYmKG49enIsbD1hLGY9aS5sZW5ndGgpOmU9PT1Xcj91PjAmJihuPVdyLGw9dSxmPWMubGVuZ3RoKTpmPShuPShsPU1hdGgubWF4KGEsdSkpPjA/YT51P3pyOldyOm51bGwpP249PT16cj9pLmxlbmd0aDpjLmxlbmd0aDowLHt0eXBlOm4sdGltZW91dDpsLHByb3BDb3VudDpmLGhhc1RyYW5zZm9ybTpuPT09enImJmVvLnRlc3QocltxcitcIlByb3BlcnR5XCJdKX19ZnVuY3Rpb24gcm8odCxlKXtmb3IoO3QubGVuZ3RoPGUubGVuZ3RoOyl0PXQuY29uY2F0KHQpO3JldHVybiBNYXRoLm1heC5hcHBseShudWxsLGUubWFwKGZ1bmN0aW9uKGUsbil7cmV0dXJuIG9vKGUpK29vKHRbbl0pfSkpfWZ1bmN0aW9uIG9vKHQpe3JldHVybiAxZTMqTnVtYmVyKHQuc2xpY2UoMCwtMSkucmVwbGFjZShcIixcIixcIi5cIikpfWZ1bmN0aW9uIGlvKHQscil7dmFyIG89dC5lbG07bihvLl9sZWF2ZUNiKSYmKG8uX2xlYXZlQ2IuY2FuY2VsbGVkPSEwLG8uX2xlYXZlQ2IoKSk7dmFyIGE9SHIodC5kYXRhLnRyYW5zaXRpb24pO2lmKCFlKGEpJiYhbihvLl9lbnRlckNiKSYmMT09PW8ubm9kZVR5cGUpe2Zvcih2YXIgcz1hLmNzcyxjPWEudHlwZSx1PWEuZW50ZXJDbGFzcyxsPWEuZW50ZXJUb0NsYXNzLHA9YS5lbnRlckFjdGl2ZUNsYXNzLGQ9YS5hcHBlYXJDbGFzcyx2PWEuYXBwZWFyVG9DbGFzcyxoPWEuYXBwZWFyQWN0aXZlQ2xhc3MsbT1hLmJlZm9yZUVudGVyLHk9YS5lbnRlcixnPWEuYWZ0ZXJFbnRlcixfPWEuZW50ZXJDYW5jZWxsZWQsYj1hLmJlZm9yZUFwcGVhcixDPWEuYXBwZWFyLCQ9YS5hZnRlckFwcGVhcix3PWEuYXBwZWFyQ2FuY2VsbGVkLEE9YS5kdXJhdGlvbix4PXFlLE89cWUuJHZub2RlO08mJk8ucGFyZW50Oyl4PU8uY29udGV4dCxPPU8ucGFyZW50O3ZhciBrPSF4Ll9pc01vdW50ZWR8fCF0LmlzUm9vdEluc2VydDtpZigha3x8Q3x8XCJcIj09PUMpe3ZhciBTPWsmJmQ/ZDp1LEU9ayYmaD9oOnAsaj1rJiZ2P3Y6bCxUPWsmJmJ8fG0sRD1rJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBDP0M6eSxOPWsmJiR8fGcsUD1rJiZ3fHxfLEw9ZihpKEEpP0EuZW50ZXI6QSksTT0hMSE9PXMmJiFxLEY9Y28oRCksUj1vLl9lbnRlckNiPUkoZnVuY3Rpb24oKXtNJiYoWXIobyxqKSxZcihvLEUpKSxSLmNhbmNlbGxlZD8oTSYmWXIobyxTKSxQJiZQKG8pKTpOJiZOKG8pLG8uX2VudGVyQ2I9bnVsbH0pO3QuZGF0YS5zaG93fHxuZSh0LFwiaW5zZXJ0XCIsZnVuY3Rpb24oKXt2YXIgZT1vLnBhcmVudE5vZGUsbj1lJiZlLl9wZW5kaW5nJiZlLl9wZW5kaW5nW3Qua2V5XTtuJiZuLnRhZz09PXQudGFnJiZuLmVsbS5fbGVhdmVDYiYmbi5lbG0uX2xlYXZlQ2IoKSxEJiZEKG8sUil9KSxUJiZUKG8pLE0mJihRcihvLFMpLFFyKG8sRSksSnIoZnVuY3Rpb24oKXtZcihvLFMpLFIuY2FuY2VsbGVkfHwoUXIobyxqKSxGfHwoc28oTCk/c2V0VGltZW91dChSLEwpOnRvKG8sYyxSKSkpfSkpLHQuZGF0YS5zaG93JiYociYmcigpLEQmJkQobyxSKSksTXx8Rnx8UigpfX19ZnVuY3Rpb24gYW8odCxyKXt2YXIgbz10LmVsbTtuKG8uX2VudGVyQ2IpJiYoby5fZW50ZXJDYi5jYW5jZWxsZWQ9ITAsby5fZW50ZXJDYigpKTt2YXIgYT1Icih0LmRhdGEudHJhbnNpdGlvbik7aWYoZShhKXx8MSE9PW8ubm9kZVR5cGUpcmV0dXJuIHIoKTtpZighbihvLl9sZWF2ZUNiKSl7dmFyIHM9YS5jc3MsYz1hLnR5cGUsdT1hLmxlYXZlQ2xhc3MsbD1hLmxlYXZlVG9DbGFzcyxwPWEubGVhdmVBY3RpdmVDbGFzcyxkPWEuYmVmb3JlTGVhdmUsdj1hLmxlYXZlLGg9YS5hZnRlckxlYXZlLG09YS5sZWF2ZUNhbmNlbGxlZCx5PWEuZGVsYXlMZWF2ZSxnPWEuZHVyYXRpb24sXz0hMSE9PXMmJiFxLGI9Y28odiksQz1mKGkoZyk/Zy5sZWF2ZTpnKSwkPW8uX2xlYXZlQ2I9SShmdW5jdGlvbigpe28ucGFyZW50Tm9kZSYmby5wYXJlbnROb2RlLl9wZW5kaW5nJiYoby5wYXJlbnROb2RlLl9wZW5kaW5nW3Qua2V5XT1udWxsKSxfJiYoWXIobyxsKSxZcihvLHApKSwkLmNhbmNlbGxlZD8oXyYmWXIobyx1KSxtJiZtKG8pKToocigpLGgmJmgobykpLG8uX2xlYXZlQ2I9bnVsbH0pO3k/eSh3KTp3KCl9ZnVuY3Rpb24gdygpeyQuY2FuY2VsbGVkfHwoIXQuZGF0YS5zaG93JiZvLnBhcmVudE5vZGUmJigoby5wYXJlbnROb2RlLl9wZW5kaW5nfHwoby5wYXJlbnROb2RlLl9wZW5kaW5nPXt9KSlbdC5rZXldPXQpLGQmJmQobyksXyYmKFFyKG8sdSksUXIobyxwKSxKcihmdW5jdGlvbigpe1lyKG8sdSksJC5jYW5jZWxsZWR8fChRcihvLGwpLGJ8fChzbyhDKT9zZXRUaW1lb3V0KCQsQyk6dG8obyxjLCQpKSl9KSksdiYmdihvLCQpLF98fGJ8fCQoKSl9fWZ1bmN0aW9uIHNvKHQpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0JiYhaXNOYU4odCl9ZnVuY3Rpb24gY28odCl7aWYoZSh0KSlyZXR1cm4hMTt2YXIgcj10LmZucztyZXR1cm4gbihyKT9jbyhBcnJheS5pc0FycmF5KHIpP3JbMF06cik6KHQuX2xlbmd0aHx8dC5sZW5ndGgpPjF9ZnVuY3Rpb24gdW8odCxlKXshMCE9PWUuZGF0YS5zaG93JiZpbyhlKX12YXIgbG89ZnVuY3Rpb24odCl7dmFyIGksYSxzPXt9LGM9dC5tb2R1bGVzLHU9dC5ub2RlT3BzO2ZvcihpPTA7aTxRbi5sZW5ndGg7KytpKWZvcihzW1FuW2ldXT1bXSxhPTA7YTxjLmxlbmd0aDsrK2EpbihjW2FdW1FuW2ldXSkmJnNbUW5baV1dLnB1c2goY1thXVtRbltpXV0pO2Z1bmN0aW9uIGwodCl7dmFyIGU9dS5wYXJlbnROb2RlKHQpO24oZSkmJnUucmVtb3ZlQ2hpbGQoZSx0KX1mdW5jdGlvbiBmKHQsZSxvLGksYSxjLGwpe2lmKG4odC5lbG0pJiZuKGMpJiYodD1jW2xdPXZ0KHQpKSx0LmlzUm9vdEluc2VydD0hYSwhZnVuY3Rpb24odCxlLG8saSl7dmFyIGE9dC5kYXRhO2lmKG4oYSkpe3ZhciBjPW4odC5jb21wb25lbnRJbnN0YW5jZSkmJmEua2VlcEFsaXZlO2lmKG4oYT1hLmhvb2spJiZuKGE9YS5pbml0KSYmYSh0LCExKSxuKHQuY29tcG9uZW50SW5zdGFuY2UpKXJldHVybiBkKHQsZSksdihvLHQuZWxtLGkpLHIoYykmJmZ1bmN0aW9uKHQsZSxyLG8pe2Zvcih2YXIgaSxhPXQ7YS5jb21wb25lbnRJbnN0YW5jZTspaWYoYT1hLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSxuKGk9YS5kYXRhKSYmbihpPWkudHJhbnNpdGlvbikpe2ZvcihpPTA7aTxzLmFjdGl2YXRlLmxlbmd0aDsrK2kpcy5hY3RpdmF0ZVtpXShKbixhKTtlLnB1c2goYSk7YnJlYWt9dihyLHQuZWxtLG8pfSh0LGUsbyxpKSwhMH19KHQsZSxvLGkpKXt2YXIgZj10LmRhdGEscD10LmNoaWxkcmVuLG09dC50YWc7bihtKT8odC5lbG09dC5ucz91LmNyZWF0ZUVsZW1lbnROUyh0Lm5zLG0pOnUuY3JlYXRlRWxlbWVudChtLHQpLGcodCksaCh0LHAsZSksbihmKSYmeSh0LGUpLHYobyx0LmVsbSxpKSk6cih0LmlzQ29tbWVudCk/KHQuZWxtPXUuY3JlYXRlQ29tbWVudCh0LnRleHQpLHYobyx0LmVsbSxpKSk6KHQuZWxtPXUuY3JlYXRlVGV4dE5vZGUodC50ZXh0KSx2KG8sdC5lbG0saSkpfX1mdW5jdGlvbiBkKHQsZSl7bih0LmRhdGEucGVuZGluZ0luc2VydCkmJihlLnB1c2guYXBwbHkoZSx0LmRhdGEucGVuZGluZ0luc2VydCksdC5kYXRhLnBlbmRpbmdJbnNlcnQ9bnVsbCksdC5lbG09dC5jb21wb25lbnRJbnN0YW5jZS4kZWwsbSh0KT8oeSh0LGUpLGcodCkpOihabih0KSxlLnB1c2godCkpfWZ1bmN0aW9uIHYodCxlLHIpe24odCkmJihuKHIpP3UucGFyZW50Tm9kZShyKT09PXQmJnUuaW5zZXJ0QmVmb3JlKHQsZSxyKTp1LmFwcGVuZENoaWxkKHQsZSkpfWZ1bmN0aW9uIGgodCxlLG4pe2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpZihlW3JdLG4sdC5lbG0sbnVsbCwhMCxlLHIpO2Vsc2Ugbyh0LnRleHQpJiZ1LmFwcGVuZENoaWxkKHQuZWxtLHUuY3JlYXRlVGV4dE5vZGUoU3RyaW5nKHQudGV4dCkpKX1mdW5jdGlvbiBtKHQpe2Zvcig7dC5jb21wb25lbnRJbnN0YW5jZTspdD10LmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtyZXR1cm4gbih0LnRhZyl9ZnVuY3Rpb24geSh0LGUpe2Zvcih2YXIgcj0wO3I8cy5jcmVhdGUubGVuZ3RoOysrcilzLmNyZWF0ZVtyXShKbix0KTtuKGk9dC5kYXRhLmhvb2spJiYobihpLmNyZWF0ZSkmJmkuY3JlYXRlKEpuLHQpLG4oaS5pbnNlcnQpJiZlLnB1c2godCkpfWZ1bmN0aW9uIGcodCl7dmFyIGU7aWYobihlPXQuZm5TY29wZUlkKSl1LnNldFN0eWxlU2NvcGUodC5lbG0sZSk7ZWxzZSBmb3IodmFyIHI9dDtyOyluKGU9ci5jb250ZXh0KSYmbihlPWUuJG9wdGlvbnMuX3Njb3BlSWQpJiZ1LnNldFN0eWxlU2NvcGUodC5lbG0sZSkscj1yLnBhcmVudDtuKGU9cWUpJiZlIT09dC5jb250ZXh0JiZlIT09dC5mbkNvbnRleHQmJm4oZT1lLiRvcHRpb25zLl9zY29wZUlkKSYmdS5zZXRTdHlsZVNjb3BlKHQuZWxtLGUpfWZ1bmN0aW9uIF8odCxlLG4scixvLGkpe2Zvcig7cjw9bzsrK3IpZihuW3JdLGksdCxlLCExLG4scil9ZnVuY3Rpb24gYih0KXt2YXIgZSxyLG89dC5kYXRhO2lmKG4obykpZm9yKG4oZT1vLmhvb2spJiZuKGU9ZS5kZXN0cm95KSYmZSh0KSxlPTA7ZTxzLmRlc3Ryb3kubGVuZ3RoOysrZSlzLmRlc3Ryb3lbZV0odCk7aWYobihlPXQuY2hpbGRyZW4pKWZvcihyPTA7cjx0LmNoaWxkcmVuLmxlbmd0aDsrK3IpYih0LmNoaWxkcmVuW3JdKX1mdW5jdGlvbiBDKHQsZSxyLG8pe2Zvcig7cjw9bzsrK3Ipe3ZhciBpPWVbcl07bihpKSYmKG4oaS50YWcpPygkKGkpLGIoaSkpOmwoaS5lbG0pKX19ZnVuY3Rpb24gJCh0LGUpe2lmKG4oZSl8fG4odC5kYXRhKSl7dmFyIHIsbz1zLnJlbW92ZS5sZW5ndGgrMTtmb3IobihlKT9lLmxpc3RlbmVycys9bzplPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbigpezA9PS0tbi5saXN0ZW5lcnMmJmwodCl9cmV0dXJuIG4ubGlzdGVuZXJzPWUsbn0odC5lbG0sbyksbihyPXQuY29tcG9uZW50SW5zdGFuY2UpJiZuKHI9ci5fdm5vZGUpJiZuKHIuZGF0YSkmJiQocixlKSxyPTA7cjxzLnJlbW92ZS5sZW5ndGg7KytyKXMucmVtb3ZlW3JdKHQsZSk7bihyPXQuZGF0YS5ob29rKSYmbihyPXIucmVtb3ZlKT9yKHQsZSk6ZSgpfWVsc2UgbCh0LmVsbSl9ZnVuY3Rpb24gdyh0LGUscixvKXtmb3IodmFyIGk9cjtpPG87aSsrKXt2YXIgYT1lW2ldO2lmKG4oYSkmJlluKHQsYSkpcmV0dXJuIGl9fWZ1bmN0aW9uIEEodCxvLGksYSxjLGwpe2lmKHQhPT1vKXtuKG8uZWxtKSYmbihhKSYmKG89YVtjXT12dChvKSk7dmFyIHA9by5lbG09dC5lbG07aWYocih0LmlzQXN5bmNQbGFjZWhvbGRlcikpbihvLmFzeW5jRmFjdG9yeS5yZXNvbHZlZCk/ayh0LmVsbSxvLGkpOm8uaXNBc3luY1BsYWNlaG9sZGVyPSEwO2Vsc2UgaWYocihvLmlzU3RhdGljKSYmcih0LmlzU3RhdGljKSYmby5rZXk9PT10LmtleSYmKHIoby5pc0Nsb25lZCl8fHIoby5pc09uY2UpKSlvLmNvbXBvbmVudEluc3RhbmNlPXQuY29tcG9uZW50SW5zdGFuY2U7ZWxzZXt2YXIgZCx2PW8uZGF0YTtuKHYpJiZuKGQ9di5ob29rKSYmbihkPWQucHJlcGF0Y2gpJiZkKHQsbyk7dmFyIGg9dC5jaGlsZHJlbix5PW8uY2hpbGRyZW47aWYobih2KSYmbShvKSl7Zm9yKGQ9MDtkPHMudXBkYXRlLmxlbmd0aDsrK2Qpcy51cGRhdGVbZF0odCxvKTtuKGQ9di5ob29rKSYmbihkPWQudXBkYXRlKSYmZCh0LG8pfWUoby50ZXh0KT9uKGgpJiZuKHkpP2ghPT15JiZmdW5jdGlvbih0LHIsbyxpLGEpe2Zvcih2YXIgcyxjLGwscD0wLGQ9MCx2PXIubGVuZ3RoLTEsaD1yWzBdLG09clt2XSx5PW8ubGVuZ3RoLTEsZz1vWzBdLGI9b1t5XSwkPSFhO3A8PXYmJmQ8PXk7KWUoaCk/aD1yWysrcF06ZShtKT9tPXJbLS12XTpZbihoLGcpPyhBKGgsZyxpLG8sZCksaD1yWysrcF0sZz1vWysrZF0pOlluKG0sYik/KEEobSxiLGksbyx5KSxtPXJbLS12XSxiPW9bLS15XSk6WW4oaCxiKT8oQShoLGIsaSxvLHkpLCQmJnUuaW5zZXJ0QmVmb3JlKHQsaC5lbG0sdS5uZXh0U2libGluZyhtLmVsbSkpLGg9clsrK3BdLGI9b1stLXldKTpZbihtLGcpPyhBKG0sZyxpLG8sZCksJCYmdS5pbnNlcnRCZWZvcmUodCxtLmVsbSxoLmVsbSksbT1yWy0tdl0sZz1vWysrZF0pOihlKHMpJiYocz10cihyLHAsdikpLGUoYz1uKGcua2V5KT9zW2cua2V5XTp3KGcscixwLHYpKT9mKGcsaSx0LGguZWxtLCExLG8sZCk6WW4obD1yW2NdLGcpPyhBKGwsZyxpLG8sZCkscltjXT12b2lkIDAsJCYmdS5pbnNlcnRCZWZvcmUodCxsLmVsbSxoLmVsbSkpOmYoZyxpLHQsaC5lbG0sITEsbyxkKSxnPW9bKytkXSk7cD52P18odCxlKG9beSsxXSk/bnVsbDpvW3krMV0uZWxtLG8sZCx5LGkpOmQ+eSYmQygwLHIscCx2KX0ocCxoLHksaSxsKTpuKHkpPyhuKHQudGV4dCkmJnUuc2V0VGV4dENvbnRlbnQocCxcIlwiKSxfKHAsbnVsbCx5LDAseS5sZW5ndGgtMSxpKSk6bihoKT9DKDAsaCwwLGgubGVuZ3RoLTEpOm4odC50ZXh0KSYmdS5zZXRUZXh0Q29udGVudChwLFwiXCIpOnQudGV4dCE9PW8udGV4dCYmdS5zZXRUZXh0Q29udGVudChwLG8udGV4dCksbih2KSYmbihkPXYuaG9vaykmJm4oZD1kLnBvc3RwYXRjaCkmJmQodCxvKX19fWZ1bmN0aW9uIHgodCxlLG8pe2lmKHIobykmJm4odC5wYXJlbnQpKXQucGFyZW50LmRhdGEucGVuZGluZ0luc2VydD1lO2Vsc2UgZm9yKHZhciBpPTA7aTxlLmxlbmd0aDsrK2kpZVtpXS5kYXRhLmhvb2suaW5zZXJ0KGVbaV0pfXZhciBPPXAoXCJhdHRycyxjbGFzcyxzdGF0aWNDbGFzcyxzdGF0aWNTdHlsZSxrZXlcIik7ZnVuY3Rpb24gayh0LGUsbyxpKXt2YXIgYSxzPWUudGFnLGM9ZS5kYXRhLHU9ZS5jaGlsZHJlbjtpZihpPWl8fGMmJmMucHJlLGUuZWxtPXQscihlLmlzQ29tbWVudCkmJm4oZS5hc3luY0ZhY3RvcnkpKXJldHVybiBlLmlzQXN5bmNQbGFjZWhvbGRlcj0hMCwhMDtpZihuKGMpJiYobihhPWMuaG9vaykmJm4oYT1hLmluaXQpJiZhKGUsITApLG4oYT1lLmNvbXBvbmVudEluc3RhbmNlKSkpcmV0dXJuIGQoZSxvKSwhMDtpZihuKHMpKXtpZihuKHUpKWlmKHQuaGFzQ2hpbGROb2RlcygpKWlmKG4oYT1jKSYmbihhPWEuZG9tUHJvcHMpJiZuKGE9YS5pbm5lckhUTUwpKXtpZihhIT09dC5pbm5lckhUTUwpcmV0dXJuITF9ZWxzZXtmb3IodmFyIGw9ITAsZj10LmZpcnN0Q2hpbGQscD0wO3A8dS5sZW5ndGg7cCsrKXtpZighZnx8IWsoZix1W3BdLG8saSkpe2w9ITE7YnJlYWt9Zj1mLm5leHRTaWJsaW5nfWlmKCFsfHxmKXJldHVybiExfWVsc2UgaChlLHUsbyk7aWYobihjKSl7dmFyIHY9ITE7Zm9yKHZhciBtIGluIGMpaWYoIU8obSkpe3Y9ITAseShlLG8pO2JyZWFrfSF2JiZjLmNsYXNzJiZRdChjLmNsYXNzKX19ZWxzZSB0LmRhdGEhPT1lLnRleHQmJih0LmRhdGE9ZS50ZXh0KTtyZXR1cm4hMH1yZXR1cm4gZnVuY3Rpb24odCxvLGksYSl7aWYoIWUobykpe3ZhciBjLGw9ITEscD1bXTtpZihlKHQpKWw9ITAsZihvLHApO2Vsc2V7dmFyIGQ9bih0Lm5vZGVUeXBlKTtpZighZCYmWW4odCxvKSlBKHQsbyxwLG51bGwsbnVsbCxhKTtlbHNle2lmKGQpe2lmKDE9PT10Lm5vZGVUeXBlJiZ0Lmhhc0F0dHJpYnV0ZShEKSYmKHQucmVtb3ZlQXR0cmlidXRlKEQpLGk9ITApLHIoaSkmJmsodCxvLHApKXJldHVybiB4KG8scCwhMCksdDtjPXQsdD1uZXcgbHQodS50YWdOYW1lKGMpLnRvTG93ZXJDYXNlKCkse30sW10sdm9pZCAwLGMpfXZhciB2PXQuZWxtLGg9dS5wYXJlbnROb2RlKHYpO2lmKGYobyxwLHYuX2xlYXZlQ2I/bnVsbDpoLHUubmV4dFNpYmxpbmcodikpLG4oby5wYXJlbnQpKWZvcih2YXIgeT1vLnBhcmVudCxnPW0obyk7eTspe2Zvcih2YXIgXz0wO188cy5kZXN0cm95Lmxlbmd0aDsrK18pcy5kZXN0cm95W19dKHkpO2lmKHkuZWxtPW8uZWxtLGcpe2Zvcih2YXIgJD0wOyQ8cy5jcmVhdGUubGVuZ3RoOysrJClzLmNyZWF0ZVskXShKbix5KTt2YXIgdz15LmRhdGEuaG9vay5pbnNlcnQ7aWYody5tZXJnZWQpZm9yKHZhciBPPTE7Tzx3LmZucy5sZW5ndGg7TysrKXcuZm5zW09dKCl9ZWxzZSBabih5KTt5PXkucGFyZW50fW4oaCk/QygwLFt0XSwwLDApOm4odC50YWcpJiZiKHQpfX1yZXR1cm4geChvLHAsbCksby5lbG19bih0KSYmYih0KX19KHtub2RlT3BzOlhuLG1vZHVsZXM6W2ZyLHZyLHdyLE9yLE1yLEg/e2NyZWF0ZTp1byxhY3RpdmF0ZTp1byxyZW1vdmU6ZnVuY3Rpb24odCxlKXshMCE9PXQuZGF0YS5zaG93P2FvKHQsZSk6ZSgpfX06e31dLmNvbmNhdChzcil9KTtxJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwic2VsZWN0aW9uY2hhbmdlXCIsZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5hY3RpdmVFbGVtZW50O3QmJnQudm1vZGVsJiZfbyh0LFwiaW5wdXRcIil9KTt2YXIgZm89e2luc2VydGVkOmZ1bmN0aW9uKHQsZSxuLHIpe1wic2VsZWN0XCI9PT1uLnRhZz8oci5lbG0mJiFyLmVsbS5fdk9wdGlvbnM/bmUobixcInBvc3RwYXRjaFwiLGZ1bmN0aW9uKCl7Zm8uY29tcG9uZW50VXBkYXRlZCh0LGUsbil9KTpwbyh0LGUsbi5jb250ZXh0KSx0Ll92T3B0aW9ucz1bXS5tYXAuY2FsbCh0Lm9wdGlvbnMsbW8pKTooXCJ0ZXh0YXJlYVwiPT09bi50YWd8fEtuKHQudHlwZSkpJiYodC5fdk1vZGlmaWVycz1lLm1vZGlmaWVycyxlLm1vZGlmaWVycy5sYXp5fHwodC5hZGRFdmVudExpc3RlbmVyKFwiY29tcG9zaXRpb25zdGFydFwiLHlvKSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJjb21wb3NpdGlvbmVuZFwiLGdvKSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIixnbykscSYmKHQudm1vZGVsPSEwKSkpfSxjb21wb25lbnRVcGRhdGVkOmZ1bmN0aW9uKHQsZSxuKXtpZihcInNlbGVjdFwiPT09bi50YWcpe3BvKHQsZSxuLmNvbnRleHQpO3ZhciByPXQuX3ZPcHRpb25zLG89dC5fdk9wdGlvbnM9W10ubWFwLmNhbGwodC5vcHRpb25zLG1vKTtpZihvLnNvbWUoZnVuY3Rpb24odCxlKXtyZXR1cm4haih0LHJbZV0pfSkpKHQubXVsdGlwbGU/ZS52YWx1ZS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiBobyh0LG8pfSk6ZS52YWx1ZSE9PWUub2xkVmFsdWUmJmhvKGUudmFsdWUsbykpJiZfbyh0LFwiY2hhbmdlXCIpfX19O2Z1bmN0aW9uIHBvKHQsZSxuKXt2byh0LGUsbiksKFd8fEspJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dm8odCxlLG4pfSwwKX1mdW5jdGlvbiB2byh0LGUsbil7dmFyIHI9ZS52YWx1ZSxvPXQubXVsdGlwbGU7aWYoIW98fEFycmF5LmlzQXJyYXkocikpe2Zvcih2YXIgaSxhLHM9MCxjPXQub3B0aW9ucy5sZW5ndGg7czxjO3MrKylpZihhPXQub3B0aW9uc1tzXSxvKWk9VChyLG1vKGEpKT4tMSxhLnNlbGVjdGVkIT09aSYmKGEuc2VsZWN0ZWQ9aSk7ZWxzZSBpZihqKG1vKGEpLHIpKXJldHVybiB2b2lkKHQuc2VsZWN0ZWRJbmRleCE9PXMmJih0LnNlbGVjdGVkSW5kZXg9cykpO298fCh0LnNlbGVjdGVkSW5kZXg9LTEpfX1mdW5jdGlvbiBobyh0LGUpe3JldHVybiBlLmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiFqKGUsdCl9KX1mdW5jdGlvbiBtbyh0KXtyZXR1cm5cIl92YWx1ZVwiaW4gdD90Ll92YWx1ZTp0LnZhbHVlfWZ1bmN0aW9uIHlvKHQpe3QudGFyZ2V0LmNvbXBvc2luZz0hMH1mdW5jdGlvbiBnbyh0KXt0LnRhcmdldC5jb21wb3NpbmcmJih0LnRhcmdldC5jb21wb3Npbmc9ITEsX28odC50YXJnZXQsXCJpbnB1dFwiKSl9ZnVuY3Rpb24gX28odCxlKXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFdmVudChcIkhUTUxFdmVudHNcIik7bi5pbml0RXZlbnQoZSwhMCwhMCksdC5kaXNwYXRjaEV2ZW50KG4pfWZ1bmN0aW9uIGJvKHQpe3JldHVybiF0LmNvbXBvbmVudEluc3RhbmNlfHx0LmRhdGEmJnQuZGF0YS50cmFuc2l0aW9uP3Q6Ym8odC5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUpfXZhciBDbz17bW9kZWw6Zm8sc2hvdzp7YmluZDpmdW5jdGlvbih0LGUsbil7dmFyIHI9ZS52YWx1ZSxvPShuPWJvKG4pKS5kYXRhJiZuLmRhdGEudHJhbnNpdGlvbixpPXQuX192T3JpZ2luYWxEaXNwbGF5PVwibm9uZVwiPT09dC5zdHlsZS5kaXNwbGF5P1wiXCI6dC5zdHlsZS5kaXNwbGF5O3ImJm8/KG4uZGF0YS5zaG93PSEwLGlvKG4sZnVuY3Rpb24oKXt0LnN0eWxlLmRpc3BsYXk9aX0pKTp0LnN0eWxlLmRpc3BsYXk9cj9pOlwibm9uZVwifSx1cGRhdGU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWUudmFsdWU7IXIhPSFlLm9sZFZhbHVlJiYoKG49Ym8obikpLmRhdGEmJm4uZGF0YS50cmFuc2l0aW9uPyhuLmRhdGEuc2hvdz0hMCxyP2lvKG4sZnVuY3Rpb24oKXt0LnN0eWxlLmRpc3BsYXk9dC5fX3ZPcmlnaW5hbERpc3BsYXl9KTphbyhuLGZ1bmN0aW9uKCl7dC5zdHlsZS5kaXNwbGF5PVwibm9uZVwifSkpOnQuc3R5bGUuZGlzcGxheT1yP3QuX192T3JpZ2luYWxEaXNwbGF5Olwibm9uZVwiKX0sdW5iaW5kOmZ1bmN0aW9uKHQsZSxuLHIsbyl7b3x8KHQuc3R5bGUuZGlzcGxheT10Ll9fdk9yaWdpbmFsRGlzcGxheSl9fX0sJG89e25hbWU6U3RyaW5nLGFwcGVhcjpCb29sZWFuLGNzczpCb29sZWFuLG1vZGU6U3RyaW5nLHR5cGU6U3RyaW5nLGVudGVyQ2xhc3M6U3RyaW5nLGxlYXZlQ2xhc3M6U3RyaW5nLGVudGVyVG9DbGFzczpTdHJpbmcsbGVhdmVUb0NsYXNzOlN0cmluZyxlbnRlckFjdGl2ZUNsYXNzOlN0cmluZyxsZWF2ZUFjdGl2ZUNsYXNzOlN0cmluZyxhcHBlYXJDbGFzczpTdHJpbmcsYXBwZWFyQWN0aXZlQ2xhc3M6U3RyaW5nLGFwcGVhclRvQ2xhc3M6U3RyaW5nLGR1cmF0aW9uOltOdW1iZXIsU3RyaW5nLE9iamVjdF19O2Z1bmN0aW9uIHdvKHQpe3ZhciBlPXQmJnQuY29tcG9uZW50T3B0aW9ucztyZXR1cm4gZSYmZS5DdG9yLm9wdGlvbnMuYWJzdHJhY3Q/d28oSGUoZS5jaGlsZHJlbikpOnR9ZnVuY3Rpb24gQW8odCl7dmFyIGU9e30sbj10LiRvcHRpb25zO2Zvcih2YXIgciBpbiBuLnByb3BzRGF0YSllW3JdPXRbcl07dmFyIG89bi5fcGFyZW50TGlzdGVuZXJzO2Zvcih2YXIgaSBpbiBvKWVbXyhpKV09b1tpXTtyZXR1cm4gZX1mdW5jdGlvbiB4byh0LGUpe2lmKC9cXGQta2VlcC1hbGl2ZSQvLnRlc3QoZS50YWcpKXJldHVybiB0KFwia2VlcC1hbGl2ZVwiLHtwcm9wczplLmNvbXBvbmVudE9wdGlvbnMucHJvcHNEYXRhfSl9dmFyIE9vPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRhZ3x8VWUodCl9LGtvPWZ1bmN0aW9uKHQpe3JldHVyblwic2hvd1wiPT09dC5uYW1lfSxTbz17bmFtZTpcInRyYW5zaXRpb25cIixwcm9wczokbyxhYnN0cmFjdDohMCxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuJHNsb3RzLmRlZmF1bHQ7aWYobiYmKG49bi5maWx0ZXIoT28pKS5sZW5ndGgpe3ZhciByPXRoaXMubW9kZSxpPW5bMF07aWYoZnVuY3Rpb24odCl7Zm9yKDt0PXQucGFyZW50OylpZih0LmRhdGEudHJhbnNpdGlvbilyZXR1cm4hMH0odGhpcy4kdm5vZGUpKXJldHVybiBpO3ZhciBhPXdvKGkpO2lmKCFhKXJldHVybiBpO2lmKHRoaXMuX2xlYXZpbmcpcmV0dXJuIHhvKHQsaSk7dmFyIHM9XCJfX3RyYW5zaXRpb24tXCIrdGhpcy5fdWlkK1wiLVwiO2Eua2V5PW51bGw9PWEua2V5P2EuaXNDb21tZW50P3MrXCJjb21tZW50XCI6cythLnRhZzpvKGEua2V5KT8wPT09U3RyaW5nKGEua2V5KS5pbmRleE9mKHMpP2Eua2V5OnMrYS5rZXk6YS5rZXk7dmFyIGM9KGEuZGF0YXx8KGEuZGF0YT17fSkpLnRyYW5zaXRpb249QW8odGhpcyksdT10aGlzLl92bm9kZSxsPXdvKHUpO2lmKGEuZGF0YS5kaXJlY3RpdmVzJiZhLmRhdGEuZGlyZWN0aXZlcy5zb21lKGtvKSYmKGEuZGF0YS5zaG93PSEwKSxsJiZsLmRhdGEmJiFmdW5jdGlvbih0LGUpe3JldHVybiBlLmtleT09PXQua2V5JiZlLnRhZz09PXQudGFnfShhLGwpJiYhVWUobCkmJighbC5jb21wb25lbnRJbnN0YW5jZXx8IWwuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlLmlzQ29tbWVudCkpe3ZhciBmPWwuZGF0YS50cmFuc2l0aW9uPXgoe30sYyk7aWYoXCJvdXQtaW5cIj09PXIpcmV0dXJuIHRoaXMuX2xlYXZpbmc9ITAsbmUoZixcImFmdGVyTGVhdmVcIixmdW5jdGlvbigpe2UuX2xlYXZpbmc9ITEsZS4kZm9yY2VVcGRhdGUoKX0pLHhvKHQsaSk7aWYoXCJpbi1vdXRcIj09PXIpe2lmKFVlKGEpKXJldHVybiB1O3ZhciBwLGQ9ZnVuY3Rpb24oKXtwKCl9O25lKGMsXCJhZnRlckVudGVyXCIsZCksbmUoYyxcImVudGVyQ2FuY2VsbGVkXCIsZCksbmUoZixcImRlbGF5TGVhdmVcIixmdW5jdGlvbih0KXtwPXR9KX19cmV0dXJuIGl9fX0sRW89eCh7dGFnOlN0cmluZyxtb3ZlQ2xhc3M6U3RyaW5nfSwkbyk7ZnVuY3Rpb24gam8odCl7dC5lbG0uX21vdmVDYiYmdC5lbG0uX21vdmVDYigpLHQuZWxtLl9lbnRlckNiJiZ0LmVsbS5fZW50ZXJDYigpfWZ1bmN0aW9uIFRvKHQpe3QuZGF0YS5uZXdQb3M9dC5lbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9ZnVuY3Rpb24gSW8odCl7dmFyIGU9dC5kYXRhLnBvcyxuPXQuZGF0YS5uZXdQb3Mscj1lLmxlZnQtbi5sZWZ0LG89ZS50b3Atbi50b3A7aWYocnx8byl7dC5kYXRhLm1vdmVkPSEwO3ZhciBpPXQuZWxtLnN0eWxlO2kudHJhbnNmb3JtPWkuV2Via2l0VHJhbnNmb3JtPVwidHJhbnNsYXRlKFwiK3IrXCJweCxcIitvK1wicHgpXCIsaS50cmFuc2l0aW9uRHVyYXRpb249XCIwc1wifX1kZWxldGUgRW8ubW9kZTt2YXIgRG89e1RyYW5zaXRpb246U28sVHJhbnNpdGlvbkdyb3VwOntwcm9wczpFbyxiZWZvcmVNb3VudDpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLl91cGRhdGU7dGhpcy5fdXBkYXRlPWZ1bmN0aW9uKG4scil7dmFyIG89S2UodCk7dC5fX3BhdGNoX18odC5fdm5vZGUsdC5rZXB0LCExLCEwKSx0Ll92bm9kZT10LmtlcHQsbygpLGUuY2FsbCh0LG4scil9fSxyZW5kZXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudGFnfHx0aGlzLiR2bm9kZS5kYXRhLnRhZ3x8XCJzcGFuXCIsbj1PYmplY3QuY3JlYXRlKG51bGwpLHI9dGhpcy5wcmV2Q2hpbGRyZW49dGhpcy5jaGlsZHJlbixvPXRoaXMuJHNsb3RzLmRlZmF1bHR8fFtdLGk9dGhpcy5jaGlsZHJlbj1bXSxhPUFvKHRoaXMpLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGM9b1tzXTtjLnRhZyYmbnVsbCE9Yy5rZXkmJjAhPT1TdHJpbmcoYy5rZXkpLmluZGV4T2YoXCJfX3ZsaXN0XCIpJiYoaS5wdXNoKGMpLG5bYy5rZXldPWMsKGMuZGF0YXx8KGMuZGF0YT17fSkpLnRyYW5zaXRpb249YSl9aWYocil7Zm9yKHZhciB1PVtdLGw9W10sZj0wO2Y8ci5sZW5ndGg7ZisrKXt2YXIgcD1yW2ZdO3AuZGF0YS50cmFuc2l0aW9uPWEscC5kYXRhLnBvcz1wLmVsbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuW3Aua2V5XT91LnB1c2gocCk6bC5wdXNoKHApfXRoaXMua2VwdD10KGUsbnVsbCx1KSx0aGlzLnJlbW92ZWQ9bH1yZXR1cm4gdChlLG51bGwsaSl9LHVwZGF0ZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnByZXZDaGlsZHJlbixlPXRoaXMubW92ZUNsYXNzfHwodGhpcy5uYW1lfHxcInZcIikrXCItbW92ZVwiO3QubGVuZ3RoJiZ0aGlzLmhhc01vdmUodFswXS5lbG0sZSkmJih0LmZvckVhY2goam8pLHQuZm9yRWFjaChUbyksdC5mb3JFYWNoKElvKSx0aGlzLl9yZWZsb3c9ZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQsdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKHQuZGF0YS5tb3ZlZCl7dmFyIG49dC5lbG0scj1uLnN0eWxlO1FyKG4sZSksci50cmFuc2Zvcm09ci5XZWJraXRUcmFuc2Zvcm09ci50cmFuc2l0aW9uRHVyYXRpb249XCJcIixuLmFkZEV2ZW50TGlzdGVuZXIoS3Isbi5fbW92ZUNiPWZ1bmN0aW9uIHQocil7ciYmci50YXJnZXQhPT1ufHxyJiYhL3RyYW5zZm9ybSQvLnRlc3Qoci5wcm9wZXJ0eU5hbWUpfHwobi5yZW1vdmVFdmVudExpc3RlbmVyKEtyLHQpLG4uX21vdmVDYj1udWxsLFlyKG4sZSkpfSl9fSkpfSxtZXRob2RzOntoYXNNb3ZlOmZ1bmN0aW9uKHQsZSl7aWYoIVZyKXJldHVybiExO2lmKHRoaXMuX2hhc01vdmUpcmV0dXJuIHRoaXMuX2hhc01vdmU7dmFyIG49dC5jbG9uZU5vZGUoKTt0Ll90cmFuc2l0aW9uQ2xhc3NlcyYmdC5fdHJhbnNpdGlvbkNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbih0KXtVcihuLHQpfSksUnIobixlKSxuLnN0eWxlLmRpc3BsYXk9XCJub25lXCIsdGhpcy4kZWwuYXBwZW5kQ2hpbGQobik7dmFyIHI9bm8obik7cmV0dXJuIHRoaXMuJGVsLnJlbW92ZUNoaWxkKG4pLHRoaXMuX2hhc01vdmU9ci5oYXNUcmFuc2Zvcm19fX19O2JuLmNvbmZpZy5tdXN0VXNlUHJvcD1mdW5jdGlvbih0LGUsbil7cmV0dXJuXCJ2YWx1ZVwiPT09biYmRW4odCkmJlwiYnV0dG9uXCIhPT1lfHxcInNlbGVjdGVkXCI9PT1uJiZcIm9wdGlvblwiPT09dHx8XCJjaGVja2VkXCI9PT1uJiZcImlucHV0XCI9PT10fHxcIm11dGVkXCI9PT1uJiZcInZpZGVvXCI9PT10fSxibi5jb25maWcuaXNSZXNlcnZlZFRhZz1Xbixibi5jb25maWcuaXNSZXNlcnZlZEF0dHI9U24sYm4uY29uZmlnLmdldFRhZ05hbWVzcGFjZT1mdW5jdGlvbih0KXtyZXR1cm4gem4odCk/XCJzdmdcIjpcIm1hdGhcIj09PXQ/XCJtYXRoXCI6dm9pZCAwfSxibi5jb25maWcuaXNVbmtub3duRWxlbWVudD1mdW5jdGlvbih0KXtpZighSClyZXR1cm4hMDtpZihXbih0KSlyZXR1cm4hMTtpZih0PXQudG9Mb3dlckNhc2UoKSxudWxsIT1xblt0XSlyZXR1cm4gcW5bdF07dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KTtyZXR1cm4gdC5pbmRleE9mKFwiLVwiKT4tMT9xblt0XT1lLmNvbnN0cnVjdG9yPT09d2luZG93LkhUTUxVbmtub3duRWxlbWVudHx8ZS5jb25zdHJ1Y3Rvcj09PXdpbmRvdy5IVE1MRWxlbWVudDpxblt0XT0vSFRNTFVua25vd25FbGVtZW50Ly50ZXN0KGUudG9TdHJpbmcoKSl9LHgoYm4ub3B0aW9ucy5kaXJlY3RpdmVzLENvKSx4KGJuLm9wdGlvbnMuY29tcG9uZW50cyxEbyksYm4ucHJvdG90eXBlLl9fcGF0Y2hfXz1IP2xvOmssYm4ucHJvdG90eXBlLiRtb3VudD1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbih0LGUsbil7dmFyIHI7cmV0dXJuIHQuJGVsPWUsdC4kb3B0aW9ucy5yZW5kZXJ8fCh0LiRvcHRpb25zLnJlbmRlcj1wdCksWmUodCxcImJlZm9yZU1vdW50XCIpLHI9ZnVuY3Rpb24oKXt0Ll91cGRhdGUodC5fcmVuZGVyKCksbil9LG5ldyB1bih0LHIsayx7YmVmb3JlOmZ1bmN0aW9uKCl7dC5faXNNb3VudGVkJiYhdC5faXNEZXN0cm95ZWQmJlplKHQsXCJiZWZvcmVVcGRhdGVcIil9fSwhMCksbj0hMSxudWxsPT10LiR2bm9kZSYmKHQuX2lzTW91bnRlZD0hMCxaZSh0LFwibW91bnRlZFwiKSksdH0odGhpcyx0PXQmJkg/ZnVuY3Rpb24odCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpe3ZhciBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCk7cmV0dXJuIGV8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIil9cmV0dXJuIHR9KHQpOnZvaWQgMCxlKX0sSCYmc2V0VGltZW91dChmdW5jdGlvbigpe0wuZGV2dG9vbHMmJnR0JiZ0dC5lbWl0KFwiaW5pdFwiLGJuKX0sMCksbW9kdWxlLmV4cG9ydHM9Ym47IiwidmFyIGluc2VydGVkID0gZXhwb3J0cy5jYWNoZSA9IHt9XG5cbmZ1bmN0aW9uIG5vb3AgKCkge31cblxuZXhwb3J0cy5pbnNlcnQgPSBmdW5jdGlvbiAoY3NzKSB7XG4gIGlmIChpbnNlcnRlZFtjc3NdKSByZXR1cm4gbm9vcFxuICBpbnNlcnRlZFtjc3NdID0gdHJ1ZVxuXG4gIHZhciBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKVxuICBlbGVtLnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L2NzcycpXG5cbiAgaWYgKCd0ZXh0Q29udGVudCcgaW4gZWxlbSkge1xuICAgIGVsZW0udGV4dENvbnRlbnQgPSBjc3NcbiAgfSBlbHNlIHtcbiAgICBlbGVtLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzc1xuICB9XG5cbiAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5hcHBlbmRDaGlsZChlbGVtKVxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0ucmVtb3ZlQ2hpbGQoZWxlbSlcbiAgICBpbnNlcnRlZFtjc3NdID0gZmFsc2VcbiAgfVxufVxuIiwibW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpKXtpZihuW2ldKXJldHVybiBuW2ldLmV4cG9ydHM7dmFyIHI9bltpXT17aTppLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIGVbaV0uY2FsbChyLmV4cG9ydHMscixyLmV4cG9ydHMsdCksci5sPSEwLHIuZXhwb3J0c312YXIgbj17fTtyZXR1cm4gdC5tPWUsdC5jPW4sdC5pPWZ1bmN0aW9uKGUpe3JldHVybiBlfSx0LmQ9ZnVuY3Rpb24oZSxuLGkpe3QubyhlLG4pfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6aX0pfSx0Lm49ZnVuY3Rpb24oZSl7dmFyIG49ZSYmZS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGUuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0dXJuIHQuZChuLFwiYVwiLG4pLG59LHQubz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sdC5wPVwiL1wiLHQodC5zPTc2KX0oW2Z1bmN0aW9uKGUsdCl7dmFyIG49ZS5leHBvcnRzPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5NYXRoPT1NYXRoP3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZiYmc2VsZi5NYXRoPT1NYXRoP3NlbGY6RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1wibnVtYmVyXCI9PXR5cGVvZiBfX2cmJihfX2c9bil9LGZ1bmN0aW9uKGUsdCl7dmFyIG49e30uaGFzT3duUHJvcGVydHk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4uY2FsbChlLHQpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oNTMpLHI9bigxNCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBpKHIoZSkpfX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz0hbig4KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oNSkscj1uKDExKTtlLmV4cG9ydHM9bigzKT9mdW5jdGlvbihlLHQsbil7cmV0dXJuIGkuZihlLHQscigxLG4pKX06ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlW3RdPW4sZX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDcpLHI9bigzMCksYT1uKDIzKSxvPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt0LmY9bigzKT9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oZSx0LG4pe2lmKGkoZSksdD1hKHQsITApLGkobikscil0cnl7cmV0dXJuIG8oZSx0LG4pfWNhdGNoKGUpe31pZihcImdldFwiaW4gbnx8XCJzZXRcImluIG4pdGhyb3cgVHlwZUVycm9yKFwiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhXCIpO3JldHVyblwidmFsdWVcImluIG4mJihlW3RdPW4udmFsdWUpLGV9fSxmdW5jdGlvbihlLHQsbil7dmFyIGk9bigyMSkoXCJ3a3NcIikscj1uKDEyKSxhPW4oMCkuU3ltYm9sLG89XCJmdW5jdGlvblwiPT10eXBlb2YgYTsoZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBpW2VdfHwoaVtlXT1vJiZhW2VdfHwobz9hOnIpKFwiU3ltYm9sLlwiK2UpKX0pLnN0b3JlPWl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDkpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZighaShlKSl0aHJvdyBUeXBlRXJyb3IoZStcIiBpcyBub3QgYW4gb2JqZWN0IVwiKTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4hIWUoKX1jYXRjaChlKXtyZXR1cm4hMH19fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZT9udWxsIT09ZTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBlfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oMzUpLHI9bigxNSk7ZS5leHBvcnRzPU9iamVjdC5rZXlzfHxmdW5jdGlvbihlKXtyZXR1cm4gaShlLHIpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm57ZW51bWVyYWJsZTohKDEmZSksY29uZmlndXJhYmxlOiEoMiZlKSx3cml0YWJsZTohKDQmZSksdmFsdWU6dH19fSxmdW5jdGlvbihlLHQpe3ZhciBuPTAsaT1NYXRoLnJhbmRvbSgpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm5cIlN5bWJvbChcIi5jb25jYXQodm9pZCAwPT09ZT9cIlwiOmUsXCIpX1wiLCgrK24raSkudG9TdHJpbmcoMzYpKX19LGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5leHBvcnRzPXt2ZXJzaW9uOlwiMi40LjBcIn07XCJudW1iZXJcIj09dHlwZW9mIF9fZSYmKF9fZT1uKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT1lKXRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIitlKTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPVwiY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mXCIuc3BsaXQoXCIsXCIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ITB9LGZ1bmN0aW9uKGUsdCl7dC5mPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlfSxmdW5jdGlvbihlLHQsbil7dmFyIGk9big1KS5mLHI9bigxKSxhPW4oNikoXCJ0b1N0cmluZ1RhZ1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe2UmJiFyKGU9bj9lOmUucHJvdG90eXBlLGEpJiZpKGUsYSx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOnR9KX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDIxKShcImtleXNcIikscj1uKDEyKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGlbZV18fChpW2VdPXIoZSkpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oMCkscj1pW1wiX19jb3JlLWpzX3NoYXJlZF9fXCJdfHwoaVtcIl9fY29yZS1qc19zaGFyZWRfX1wiXT17fSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiByW2VdfHwocltlXT17fSl9fSxmdW5jdGlvbihlLHQpe3ZhciBuPU1hdGguY2VpbCxpPU1hdGguZmxvb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBpc05hTihlPStlKT8wOihlPjA/aTpuKShlKX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDkpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCFpKGUpKXJldHVybiBlO3ZhciBuLHI7aWYodCYmXCJmdW5jdGlvblwiPT10eXBlb2Yobj1lLnRvU3RyaW5nKSYmIWkocj1uLmNhbGwoZSkpKXJldHVybiByO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mKG49ZS52YWx1ZU9mKSYmIWkocj1uLmNhbGwoZSkpKXJldHVybiByO2lmKCF0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZihuPWUudG9TdHJpbmcpJiYhaShyPW4uY2FsbChlKSkpcmV0dXJuIHI7dGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oMCkscj1uKDEzKSxhPW4oMTcpLG89bigyNSkscz1uKDUpLmY7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXIuU3ltYm9sfHwoci5TeW1ib2w9YT97fTppLlN5bWJvbHx8e30pO1wiX1wiPT1lLmNoYXJBdCgwKXx8ZSBpbiB0fHxzKHQsZSx7dmFsdWU6by5mKGUpfSl9fSxmdW5jdGlvbihlLHQsbil7dC5mPW4oNil9LGZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjt0LmE9e3RyYW5zbGF0aW9uczp7YWY6e2xhbmd1YWdlOlwiQWZyaWthYW5zXCIsbW9udGhzOntvcmlnaW5hbDpbXCJKYW51YXJpZVwiLFwiRmVicnVhcmllXCIsXCJNYWFydFwiLFwiQXByaWxcIixcIk1laVwiLFwiSnVuaWVcIixcIkp1bGllXCIsXCJBdWd1c3R1c1wiLFwiU2VwdGVtYmVyXCIsXCJPa3RvYmVyXCIsXCJOb3ZlbWJlclwiLFwiRGVzZW1iZXJcIl0sYWJicjpbXCJKYW5cIixcIkZlYlwiLFwiTXJ0XCIsXCJBcHJcIixcIk1laVwiLFwiSnVuXCIsXCJKdWxcIixcIkF1Z1wiLFwiU2VwXCIsXCJPa3RcIixcIk5vdlwiLFwiRGVzXCJdfSxkYXlzOltcIlNvLlwiLFwiTWEuXCIsXCJEaS5cIixcIldvLlwiLFwiRG8uXCIsXCJWci5cIixcIlNhLlwiXX0sYXI6e2xhbmd1YWdlOlwiQXJhYmljXCIscnRsOiEwLG1vbnRoczp7b3JpZ2luYWw6W1wi2YrZhtin2YrYsVwiLFwi2YHYqNix2KfZitixXCIsXCLZhdin2LHYs1wiLFwi2KPYqNix2YrZhFwiLFwi2YXYp9mK2YhcIixcItmK2YjZhtmK2YhcIixcItmK2YjZhNmK2YhcIixcItij2LrYs9i32LNcIixcItiz2KjYqtmF2KjYsVwiLFwi2KPZg9iq2YjYqNixXCIsXCLZhtmI2qTZhdio2LFcIixcItiv2YrYs9mF2KjYsVwiXSxhYmJyOltcItmK2YbYp9mK2LFcIixcItmB2KjYsdin2YrYsVwiLFwi2YXYp9ix2LNcIixcItij2KjYsdmK2YRcIixcItmF2KfZitmIXCIsXCLZitmI2YbZitmIXCIsXCLZitmI2YTZitmIXCIsXCLYo9i62LPYt9izXCIsXCLYs9io2KrZhdio2LFcIixcItij2YPYqtmI2KjYsVwiLFwi2YbZiNqk2YXYqNixXCIsXCLYr9mK2LPZhdio2LFcIl19LGRheXM6W1wi2KPYrdivXCIsXCLYpdir2YbZitmGXCIsXCLYq9mE2KfYq9in2KFcIixcItij2LHYqNi52KfYoVwiLFwi2K7ZhdmK2LNcIixcItis2YXYudipXCIsXCLYs9io2KpcIl19LGJnOntsYW5ndWFnZTpcIkJ1bGdhcmlhblwiLG1vbnRoczp7b3JpZ2luYWw6W1wi0K/QvdGD0LDRgNC4XCIsXCLQpNC10LLRgNGD0LDRgNC4XCIsXCLQnNCw0YDRglwiLFwi0JDQv9GA0LjQu1wiLFwi0JzQsNC5XCIsXCLQrtC90LhcIixcItCu0LvQuFwiLFwi0JDQstCz0YPRgdGCXCIsXCLQodC10L/RgtC10LzQstGA0LhcIixcItCe0LrRgtC+0LzQstGA0LhcIixcItCd0L7QtdC80LLRgNC4XCIsXCLQlNC10LrQtdC80LLRgNC4XCJdLGFiYnI6W1wi0K/QvVwiLFwi0KTQtdCyXCIsXCLQnNCw0YBcIixcItCQ0L/RgFwiLFwi0JzQsNC5XCIsXCLQrtC90LhcIixcItCu0LvQuFwiLFwi0JDQstCzXCIsXCLQodC10L9cIixcItCe0LrRglwiLFwi0J3QvtC1XCIsXCLQlNC10LpcIl19LGRheXM6W1wi0J3QtFwiLFwi0J/QvVwiLFwi0JLRglwiLFwi0KHRgFwiLFwi0KfRglwiLFwi0J/RglwiLFwi0KHQsVwiXX0sYnM6e2xhbmd1YWdlOlwiQm9zbmlhblwiLG1vbnRoczp7b3JpZ2luYWw6W1wiSmFudWFyXCIsXCJGZWJydWFyXCIsXCJNYXJ0XCIsXCJBcHJpbFwiLFwiTWFqXCIsXCJKdW5pXCIsXCJKdWxpXCIsXCJBdmd1c3RcIixcIlNlcHRlbWJhclwiLFwiT2t0b2JhclwiLFwiTm92ZW1iYXJcIixcIkRlY2VtYmFyXCJdLGFiYnI6W1wiSmFuXCIsXCJGZWJcIixcIk1hclwiLFwiQXByXCIsXCJNYWpcIixcIkp1blwiLFwiSnVsXCIsXCJBdmdcIixcIlNlcFwiLFwiT2t0XCIsXCJOb3ZcIixcIkRlY1wiXX0sZGF5czpbXCJOZWRcIixcIlBvblwiLFwiVXRvXCIsXCJTcmlcIixcIsSMZXRcIixcIlBldFwiLFwiU3ViXCJdfSxjczp7bGFuZ3VhZ2U6XCJDemVjaFwiLG1vbnRoczp7b3JpZ2luYWw6W1wibGVkZW5cIixcIsO6bm9yXCIsXCJixZllemVuXCIsXCJkdWJlblwiLFwia3bEm3RlblwiLFwixI1lcnZlblwiLFwixI1lcnZlbmVjXCIsXCJzcnBlblwiLFwiesOhxZnDrVwiLFwixZnDrWplblwiLFwibGlzdG9wYWRcIixcInByb3NpbmVjXCJdLGFiYnI6W1wibGVkXCIsXCLDum5vXCIsXCJixZllXCIsXCJkdWJcIixcImt2xJtcIixcIsSNZXJcIixcIsSNZWNcIixcInNycFwiLFwiesOhxZlcIixcIsWZw61qXCIsXCJsaXNcIixcInByb1wiXX0sZGF5czpbXCJuZVwiLFwicG9cIixcIsO6dFwiLFwic3RcIixcIsSNdFwiLFwicMOhXCIsXCJzb1wiXX0sZGE6e2xhbmd1YWdlOlwiRGFuaXNoXCIsbW9udGhzOntvcmlnaW5hbDpbXCJKYW51YXJcIixcIkZlYnJ1YXJcIixcIk1hcnRzXCIsXCJBcHJpbFwiLFwiTWFqXCIsXCJKdW5pXCIsXCJKdWxpXCIsXCJBdWd1c3RcIixcIlNlcHRlbWJlclwiLFwiT2t0b2JlclwiLFwiTm92ZW1iZXJcIixcIkRlY2VtYmVyXCJdLGFiYnI6W1wiSmFuXCIsXCJGZWJcIixcIk1hclwiLFwiQXByXCIsXCJNYWpcIixcIkp1blwiLFwiSnVsXCIsXCJBdWdcIixcIlNlcFwiLFwiT2t0XCIsXCJOb3ZcIixcIkRlY1wiXX0sZGF5czpbXCJTw7hcIixcIk1hXCIsXCJUaVwiLFwiT25cIixcIlRvXCIsXCJGclwiLFwiTMO4XCJdfSxkZTp7bGFuZ3VhZ2U6XCJHZXJtYW5cIixtb250aHM6e29yaWdpbmFsOltcIkphbnVhclwiLFwiRmVicnVhclwiLFwiTcOkcnpcIixcIkFwcmlsXCIsXCJNYWlcIixcIkp1bmlcIixcIkp1bGlcIixcIkF1Z3VzdFwiLFwiU2VwdGVtYmVyXCIsXCJPa3RvYmVyXCIsXCJOb3ZlbWJlclwiLFwiRGV6ZW1iZXJcIl0sYWJicjpbXCJKYW5cIixcIkZlYlwiLFwiTcOkclwiLFwiQXByXCIsXCJNYWlcIixcIkp1blwiLFwiSnVsXCIsXCJBdWdcIixcIlNlcFwiLFwiT2t0XCIsXCJOb3ZcIixcIkRlelwiXX0sZGF5czpbXCJTby5cIixcIk1vLlwiLFwiRGkuXCIsXCJNaS5cIixcIkRvLlwiLFwiRnIuXCIsXCJTYS5cIl19LGVlOntsYW5ndWFnZTpcIkVzdG9uaWFuXCIsbW9udGhzOntvcmlnaW5hbDpbXCJKYWFudWFyXCIsXCJWZWVicnVhclwiLFwiTcOkcnRzXCIsXCJBcHJpbGxcIixcIk1haVwiLFwiSnV1bmlcIixcIkp1dWxpXCIsXCJBdWd1c3RcIixcIlNlcHRlbWJlclwiLFwiT2t0b29iZXJcIixcIk5vdmVtYmVyXCIsXCJEZXRzZW1iZXJcIl0sYWJicjpbXCJKYWFuXCIsXCJWZWViclwiLFwiTcOkcnRzXCIsXCJBcHJcIixcIk1haVwiLFwiSnV1bmlcIixcIkp1dWxpXCIsXCJBdWdcIixcIlNlcHRcIixcIk9rdFwiLFwiTm92XCIsXCJEZXRzXCJdfSxkYXlzOltcIlBcIixcIkVcIixcIlRcIixcIktcIixcIk5cIixcIlJcIixcIkxcIl19LGVsOntsYW5ndWFnZTpcIkdyZWVrXCIsbW9udGhzOntvcmlnaW5hbDpbXCLOmc6xzr3Ov8+FzqzPgc65zr/PglwiLFwizqbOtc6yz4HOv8+FzqzPgc65zr/PglwiLFwizpzOrM+Bz4TOuc6/z4JcIixcIs6Rz4DPgc6vzrvOuc6/z4JcIixcIs6czqzPis6/z4JcIixcIs6Zzr/Pjc69zrnOv8+CXCIsXCLOmc6/z43Ou865zr/PglwiLFwizpHPjc6zzr/Phc+Dz4TOv8+CXCIsXCLOo861z4DPhM6tzrzOss+BzrnOv8+CXCIsXCLOn866z4TPjs6yz4HOuc6/z4JcIixcIs6dzr/Orc68zrLPgc65zr/PglwiLFwizpTOtc66zq3OvM6yz4HOuc6/z4JcIl0sYWJicjpbXCLOmc6xzr1cIixcIs6mzrXOslwiLFwizpzOsc+BXCIsXCLOkc+Az4FcIixcIs6czrHOuVwiLFwizpnOv8+Fzr1cIixcIs6Zzr/Phc67XCIsXCLOkc+FzrNcIixcIs6jzrXPgFwiLFwizp/Ous+EXCIsXCLOnc6/zrVcIixcIs6UzrXOulwiXX0sZGF5czpbXCLOms+Fz4FcIixcIs6UzrXPhVwiLFwizqTPgc65XCIsXCLOpM61z4RcIixcIs6gzrXOvFwiLFwizqDOsc+BXCIsXCLOo86xz4RcIl19LGVuOntsYW5ndWFnZTpcIkVuZ2xpc2hcIixtb250aHM6e29yaWdpbmFsOltcIkphbnVhcnlcIixcIkZlYnJ1YXJ5XCIsXCJNYXJjaFwiLFwiQXByaWxcIixcIk1heVwiLFwiSnVuZVwiLFwiSnVseVwiLFwiQXVndXN0XCIsXCJTZXB0ZW1iZXJcIixcIk9jdG9iZXJcIixcIk5vdmVtYmVyXCIsXCJEZWNlbWJlclwiXSxhYmJyOltcIkphblwiLFwiRmViXCIsXCJNYXJcIixcIkFwclwiLFwiTWF5XCIsXCJKdW5cIixcIkp1bFwiLFwiQXVnXCIsXCJTZXBcIixcIk9jdFwiLFwiTm92XCIsXCJEZWNcIl19LGRheXM6W1wiU3VuXCIsXCJNb25cIixcIlR1ZVwiLFwiV2VkXCIsXCJUaHVcIixcIkZyaVwiLFwiU2F0XCJdfSxlczp7bGFuZ3VhZ2U6XCJTcGFuaXNoXCIsbW9udGhzOntvcmlnaW5hbDpbXCJFbmVyb1wiLFwiRmVicmVyb1wiLFwiTWFyem9cIixcIkFicmlsXCIsXCJNYXlvXCIsXCJKdW5pb1wiLFwiSnVsaW9cIixcIkFnb3N0b1wiLFwiU2VwdGllbWJyZVwiLFwiT2N0dWJyZVwiLFwiTm92aWVtYnJlXCIsXCJEaWNpZW1icmVcIl0sYWJicjpbXCJFbmVcIixcIkZlYlwiLFwiTWFyXCIsXCJBYnJcIixcIk1heVwiLFwiSnVuXCIsXCJKdWxcIixcIkFnb1wiLFwiU2VwXCIsXCJPY3RcIixcIk5vdlwiLFwiRGljXCJdfSxkYXlzOltcIkRvbVwiLFwiTHVuXCIsXCJNYXJcIixcIk1pw6lcIixcIkp1ZVwiLFwiVmllXCIsXCJTYWJcIl19LGNhOntsYW5ndWFnZTpcIkNhdGFsYW5cIixtb250aHM6e29yaWdpbmFsOltcIkdlbmVyXCIsXCJGZWJyZXJcIixcIk1hcsOnXCIsXCJBYnJpbFwiLFwiTWFpZ1wiLFwiSnVueVwiLFwiSnVsaW9sXCIsXCJBZ29zdFwiLFwiU2V0ZW1icmVcIixcIk9jdHVicmVcIixcIk5vdmVtYnJlXCIsXCJEZXNlbWJyZVwiXSxhYmJyOltcIkdlblwiLFwiRmViXCIsXCJNYXJcIixcIkFiclwiLFwiTWFpXCIsXCJKdW5cIixcIkp1bFwiLFwiQWdvXCIsXCJTZXRcIixcIk9jdFwiLFwiTm92XCIsXCJEZXNcIl19LGRheXM6W1wiRGl1XCIsXCJEaWxcIixcIkRtclwiLFwiRG1jXCIsXCJEaWpcIixcIkRpdlwiLFwiRGlzXCJdfSxmaTp7bGFuZ3VhZ2U6XCJGaW5pc2hcIixtb250aHM6e29yaWdpbmFsOltcInRhbW1pa3V1XCIsXCJoZWxtaWt1dVwiLFwibWFhbGlza3V1XCIsXCJodWh0aWt1dVwiLFwidG91a29rdXVcIixcImtlc8Oka3V1XCIsXCJoZWluw6RrdXVcIixcImVsb2t1dVwiLFwic3l5c2t1dVwiLFwibG9rYWt1dVwiLFwibWFycmFza3V1XCIsXCJqb3VsdWt1dVwiXSxhYmJyOltcInRhbW1pXCIsXCJoZWxtaVwiLFwibWFhbGlzXCIsXCJodWh0aVwiLFwidG91a29cIixcImtlc8OkXCIsXCJoZWluw6RcIixcImVsb1wiLFwic3l5c1wiLFwibG9rYVwiLFwibWFycmFzXCIsXCJqb3VsdVwiXX0sZGF5czpbXCJzdVwiLFwibWFcIixcInRpXCIsXCJrZVwiLFwidG9cIixcInBlXCIsXCJsYVwiXX0sZnI6e2xhbmd1YWdlOlwiRnJlbmNoXCIsbW9udGhzOntvcmlnaW5hbDpbXCJKYW52aWVyXCIsXCJGw6l2cmllclwiLFwiTWFyc1wiLFwiQXZyaWxcIixcIk1haVwiLFwiSnVpblwiLFwiSnVpbGxldFwiLFwiQW/Du3RcIixcIlNlcHRlbWJyZVwiLFwiT2N0b2JyZVwiLFwiTm92ZW1icmVcIixcIkTDqWNlbWJyZVwiXSxhYmJyOltcIkphblwiLFwiRsOpdlwiLFwiTWFyXCIsXCJBdnJcIixcIk1haVwiLFwiSnVpblwiLFwiSnVpbFwiLFwiQW/Du3RcIixcIlNlcFwiLFwiT2N0XCIsXCJOb3ZcIixcIkTDqWNcIl19LGRheXM6W1wiRGltXCIsXCJMdW5cIixcIk1hclwiLFwiTWVyXCIsXCJKZXVcIixcIlZlblwiLFwiU2FtXCJdfSxnZTp7bGFuZ3VhZ2U6XCJHZW9yZ2lhXCIsbW9udGhzOntvcmlnaW5hbDpbXCLhg5jhg5Dhg5zhg5Xhg5Dhg6Dhg5hcIixcIuGDl+GDlOGDkeGDlOGDoOGDleGDkOGDmuGDmFwiLFwi4YOb4YOQ4YOg4YOi4YOYXCIsXCLhg5Dhg57hg6Dhg5jhg5rhg5hcIixcIuGDm+GDkOGDmOGDoeGDmFwiLFwi4YOY4YOV4YOc4YOY4YOh4YOYXCIsXCLhg5jhg5Xhg5rhg5jhg6Hhg5hcIixcIuGDkOGDkuGDleGDmOGDoeGDouGDnVwiLFwi4YOh4YOU4YOl4YOi4YOU4YOb4YOR4YOU4YOg4YOYXCIsXCLhg53hg6Xhg6Lhg53hg5vhg5Hhg5Thg6Dhg5hcIixcIuGDnOGDneGDlOGDm+GDkeGDlOGDoOGDmFwiLFwi4YOT4YOU4YOZ4YOU4YOb4YOR4YOU4YOg4YOYXCJdLGFiYnI6W1wi4YOY4YOQ4YOcXCIsXCLhg5fhg5Thg5FcIixcIuGDm+GDkOGDoFwiLFwi4YOQ4YOe4YOgXCIsXCLhg5vhg5Dhg5hcIixcIuGDmOGDleGDnFwiLFwi4YOY4YOV4YOaXCIsXCLhg5Dhg5Lhg5VcIixcIuGDoeGDlOGDpVwiLFwi4YOd4YOl4YOiXCIsXCLhg5zhg53hg5RcIixcIuGDk+GDlOGDmVwiXX0sZGF5czpbXCLhg5nhg5Xhg5hcIixcIuGDneGDoOGDqFwiLFwi4YOh4YOQ4YObXCIsXCLhg53hg5fhg65cIixcIuGDruGDo+GDl1wiLFwi4YOe4YOQ4YOgXCIsXCLhg6jhg5Dhg5FcIl19LGphOntsYW5ndWFnZTpcIkphcGFuZXNlXCIseW1kOiEwLG1vbnRoczp7b3JpZ2luYWw6W1wiMeaciFwiLFwiMuaciFwiLFwiM+aciFwiLFwiNOaciFwiLFwiNeaciFwiLFwiNuaciFwiLFwiN+aciFwiLFwiOOaciFwiLFwiOeaciFwiLFwiMTDmnIhcIixcIjEx5pyIXCIsXCIxMuaciFwiXSxhYmJyOltcIjHmnIhcIixcIjLmnIhcIixcIjPmnIhcIixcIjTmnIhcIixcIjXmnIhcIixcIjbmnIhcIixcIjfmnIhcIixcIjjmnIhcIixcIjnmnIhcIixcIjEw5pyIXCIsXCIxMeaciFwiLFwiMTLmnIhcIl19LGRheXM6W1wi5pelXCIsXCLmnIhcIixcIueBq1wiLFwi5rC0XCIsXCLmnKhcIixcIumHkVwiLFwi5ZyfXCJdfSxoZTp7bGFuZ3VhZ2U6XCJIZWJyZXdcIixydGw6ITAsbW9udGhzOntvcmlnaW5hbDpbXCLXmdeg15XXkNeoXCIsXCLXpNeR16jXldeQ16hcIixcItee16jXpVwiLFwi15DXpNeo15nXnFwiLFwi157XkNeZXCIsXCLXmdeV16DXmVwiLFwi15nXldec15lcIixcIteQ15XXkteV16HXmFwiLFwi16HXpNeY157XkdeoXCIsXCLXkNeV16fXmNeV15HXqFwiLFwi16DXldeR157XkdeoXCIsXCLXk9em157XkdeoXCJdLGFiYnI6W1wi15nXoNeVXCIsXCLXpNeR16hcIixcItee16jXpVwiLFwi15DXpNeoXCIsXCLXnteQ15lcIixcIteZ15XXoFwiLFwi15nXldecXCIsXCLXkNeV15JcIixcIteh16TXmFwiLFwi15DXldenXCIsXCLXoNeV15FcIixcIteT16bXnlwiXX0sZGF5czpbXCLXkFwiLFwi15FcIixcIteSXCIsXCLXk1wiLFwi15RcIixcIteVXCIsXCLXqVwiXX0saHU6e2xhbmd1YWdlOlwiSHVuZ2FyaWFuXCIseW1kOiEwLG1vbnRoczp7b3JpZ2luYWw6W1wiSmFudcOhclwiLFwiRmVicnXDoXJcIixcIk3DoXJjaXVzXCIsXCLDgXByaWxpc1wiLFwiTcOhanVzXCIsXCJKw7puaXVzXCIsXCJKw7psaXVzXCIsXCJBdWd1c3p0dXNcIixcIlN6ZXB0ZW1iZXJcIixcIk9rdMOzYmVyXCIsXCJOb3ZlbWJlclwiLFwiRGVjZW1iZXJcIl0sYWJicjpbXCJKYW5cIixcIkZlYnJcIixcIk3DoXJjXCIsXCLDgXByXCIsXCJNw6FqXCIsXCJKw7puXCIsXCJKw7psXCIsXCJBdWdcIixcIlN6ZXB0XCIsXCJPa3RcIixcIk5vdlwiLFwiRGVjXCJdfSxkYXlzOltcIlZhc1wiLFwiSMOpdFwiLFwiS2VcIixcIlN6ZVwiLFwiQ3PDvFwiLFwiUMOpblwiLFwiU3pvXCJdfSxocjp7bGFuZ3VhZ2U6XCJDcm9hdGlhblwiLG1vbnRoczp7b3JpZ2luYWw6W1wiU2lqZcSNYW5qXCIsXCJWZWxqYcSNYVwiLFwiT8W+dWpha1wiLFwiVHJhdmFualwiLFwiU3ZpYmFualwiLFwiTGlwYW5qXCIsXCJTcnBhbmpcIixcIktvbG92b3pcIixcIlJ1amFuXCIsXCJMaXN0b3BhZFwiLFwiU3R1ZGVuaVwiLFwiUHJvc2luYWNcIl0sYWJicjpbXCJTaWpcIixcIlZlbGpcIixcIk/FvnVcIixcIlRyYVwiLFwiU3ZpXCIsXCJMaXBcIixcIlNycFwiLFwiS29sXCIsXCJSdWpcIixcIkxpc1wiLFwiU3R1XCIsXCJQcm9cIl19LGRheXM6W1wiTmVkXCIsXCJQb25cIixcIlV0b1wiLFwiU3JpXCIsXCLEjGV0XCIsXCJQZXRcIixcIlN1YlwiXX0saWQ6e2xhbmd1YWdlOlwiSW5kb25lc2lhblwiLG1vbnRoczp7b3JpZ2luYWw6W1wiSmFudWFyaVwiLFwiRmVicnVhcmlcIixcIk1hcmV0XCIsXCJBcHJpbFwiLFwiTWVpXCIsXCJKdW5pXCIsXCJKdWxpXCIsXCJBZ3VzdHVzXCIsXCJTZXB0ZW1iZXJcIixcIk9rdG9iZXJcIixcIk5vdmVtYmVyXCIsXCJEZXNlbWJlclwiXSxhYmJyOltcIkphblwiLFwiRmViXCIsXCJNYXJcIixcIkFwclwiLFwiTWVpXCIsXCJKdW5cIixcIkp1bFwiLFwiQWd1XCIsXCJTZXBcIixcIk9rdFwiLFwiTm92XCIsXCJEZXNcIl19LGRheXM6W1wiTWluXCIsXCJTZW5cIixcIlNlbFwiLFwiUmFiXCIsXCJLYW1cIixcIkp1bVwiLFwiU2FiXCJdfSxpdDp7bGFuZ3VhZ2U6XCJJdGFsaWFuXCIsbW9udGhzOntvcmlnaW5hbDpbXCJHZW5uYWlvXCIsXCJGZWJicmFpb1wiLFwiTWFyem9cIixcIkFwcmlsZVwiLFwiTWFnZ2lvXCIsXCJHaXVnbm9cIixcIkx1Z2xpb1wiLFwiQWdvc3RvXCIsXCJTZXR0ZW1icmVcIixcIk90dG9icmVcIixcIk5vdmVtYnJlXCIsXCJEaWNlbWJyZVwiXSxhYmJyOltcIkdlblwiLFwiRmViXCIsXCJNYXJcIixcIkFwclwiLFwiTWFnXCIsXCJHaXVcIixcIkx1Z1wiLFwiQWdvXCIsXCJTZXRcIixcIk90dFwiLFwiTm92XCIsXCJEaWNcIl19LGRheXM6W1wiRG9tXCIsXCJMdW5cIixcIk1hclwiLFwiTWVyXCIsXCJHaW9cIixcIlZlblwiLFwiU2FiXCJdfSxpczp7bGFuZ3VhZ2U6XCJJY2VsYW5kaWNcIixtb250aHM6e29yaWdpbmFsOltcIkphbsO6YXJcIixcIkZlYnLDumFyXCIsXCJNYXJzXCIsXCJBcHLDrWxcIixcIk1hw61cIixcIkrDum7DrVwiLFwiSsO6bMOtXCIsXCLDgWfDunN0XCIsXCJTZXB0ZW1iZXJcIixcIk9rdMOzYmVyXCIsXCJOw7N2ZW1iZXJcIixcIkRlc2VtYmVyXCJdLGFiYnI6W1wiSmFuXCIsXCJGZWJcIixcIk1hcnNcIixcIkFwclwiLFwiTWHDrVwiLFwiSsO6blwiLFwiSsO6bFwiLFwiw4Fnw7pcIixcIlNlcFwiLFwiT2t0XCIsXCJOw7N2XCIsXCJEZXNcIl19LGRheXM6W1wiU3VuXCIsXCJNw6FuXCIsXCLDnnJpXCIsXCJNacOwXCIsXCJGaW1cIixcIkbDtnNcIixcIkxhdVwiXX0sZmE6e2xhbmd1YWdlOlwiUGVyc2lhblwiLG1vbnRoczp7b3JpZ2luYWw6W1wi2YHYsdmI2LHYr9uM2YZcIixcItin2LHYr9uM2KjZh9i02KpcIixcItiu2LHYr9in2K9cIixcItiq24zYsVwiLFwi2YXYsdiv2KfYr1wiLFwi2LTZh9ix24zZiNixXCIsXCLZhdmH2LFcIixcItii2KjYp9mGXCIsXCLYotiw2LFcIixcItiv24xcIixcItio2YfZhdmGXCIsXCLYp9iz2YHZhtivXCJdLGFiYnI6W1wi2YHYsdmIXCIsXCLYp9ix2K9cIixcItiu2LHYr1wiLFwi2KrbjNixXCIsXCLZhdix2K9cIixcIti02YfYsVwiLFwi2YXZh9ixXCIsXCLYotio2KdcIixcItii2LDYsVwiLFwi2K/bjFwiLFwi2KjZh9mFXCIsXCLYp9iz2YFcIl19LGRheXM6W1wi24zaqdi02YbYqNmHXCIsXCLYr9mI2LTZhtio2YdcIixcItiz2YfigIzYtNmG2KjZh1wiLFwi2obZh9in2LHYtNmG2KjZh1wiLFwi2b7Zhtis2LTZhtio2YdcIixcItis2YXYudmHXCIsXCLYtNmG2KjZh1wiXX0sa286e2xhbmd1YWdlOlwiS29yZWFuXCIseW1kOiEwLG1vbnRoczp7b3JpZ2luYWw6W1wiMeyblFwiLFwiMuyblFwiLFwiM+yblFwiLFwiNOyblFwiLFwiNeyblFwiLFwiNuyblFwiLFwiN+yblFwiLFwiOOyblFwiLFwiOeyblFwiLFwiMTDsm5RcIixcIjEx7JuUXCIsXCIxMuyblFwiXSxhYmJyOltcIjHsm5RcIixcIjLsm5RcIixcIjPsm5RcIixcIjTsm5RcIixcIjXsm5RcIixcIjbsm5RcIixcIjfsm5RcIixcIjjsm5RcIixcIjnsm5RcIixcIjEw7JuUXCIsXCIxMeyblFwiLFwiMTLsm5RcIl19LGRheXM6W1wi7J28XCIsXCLsm5RcIixcIu2ZlFwiLFwi7IiYXCIsXCLrqqlcIixcIuq4iFwiLFwi7YagXCJdfSxsYjp7bGFuZ3VhZ2U6XCJMdXhlbWJvdXJnaXNoXCIsbW9udGhzOntvcmlnaW5hbDpbXCJKYW51YXJcIixcIkZlYnJ1YXJcIixcIk3DpGVyelwiLFwiQWJyw6tsbFwiLFwiTcOkaVwiLFwiSnVuaVwiLFwiSnVsaVwiLFwiQXVndXN0XCIsXCJTZXB0ZW1iZXJcIixcIk9rdG9iZXJcIixcIk5vdmVtYmVyXCIsXCJEZXplbWJlclwiXSxhYmJyOltcIkphblwiLFwiRmViXCIsXCJNw6RlXCIsXCJBYnJcIixcIk3DpGlcIixcIkp1blwiLFwiSnVsXCIsXCJBdWdcIixcIlNlcFwiLFwiT2t0XCIsXCJOb3ZcIixcIkRlelwiXX0sZGF5czpbXCJTby5cIixcIk3DqS5cIixcIkTDqy5cIixcIk3Dqy5cIixcIkRvLlwiLFwiRnIuXCIsXCJTYS5cIl19LGx0OntsYW5ndWFnZTpcIkxpdGh1YW5pYW5cIix5bWQ6ITAsbW9udGhzOntvcmlnaW5hbDpbXCJTYXVzaXNcIixcIlZhc2FyaXNcIixcIktvdmFzXCIsXCJCYWxhbmRpc1wiLFwiR2VndcW+xJdcIixcIkJpcsW+ZWxpc1wiLFwiTGllcGFcIixcIlJ1Z3Bqxat0aXNcIixcIlJ1Z3PEl2ppc1wiLFwiU3BhbGlzXCIsXCJMYXBrcml0aXNcIixcIkdydW9kaXNcIl0sYWJicjpbXCJTYXVcIixcIlZhc1wiLFwiS292XCIsXCJCYWxcIixcIkdlZ1wiLFwiQmlyXCIsXCJMaWVcIixcIlJ1Z3BcIixcIlJ1Z3NcIixcIlNwYVwiLFwiTGFwXCIsXCJHcnVcIl19LGRheXM6W1wiU2VrXCIsXCJQaXJcIixcIkFudFwiLFwiVHJlXCIsXCJLZXRcIixcIlBlblwiLFwixaBlxaFcIl19LGx2OntsYW5ndWFnZTpcIkxhdHZpYW5cIixtb250aHM6e29yaWdpbmFsOltcIkphbnbEgXJpc1wiLFwiRmVicnXEgXJpc1wiLFwiTWFydHNcIixcIkFwcsSrbGlzXCIsXCJNYWlqc1wiLFwiSsWrbmlqc1wiLFwiSsWrbGlqc1wiLFwiQXVndXN0c1wiLFwiU2VwdGVtYnJpc1wiLFwiT2t0b2JyaXNcIixcIk5vdmVtYnJpc1wiLFwiRGVjZW1icmlzXCJdLGFiYnI6W1wiSmFuXCIsXCJGZWJcIixcIk1hclwiLFwiQXByXCIsXCJNYWlcIixcIkrFq25cIixcIkrFq2xcIixcIkF1Z1wiLFwiU2VwXCIsXCJPa3RcIixcIk5vdlwiLFwiRGVjXCJdfSxkYXlzOltcIlN2XCIsXCJQclwiLFwiT3RcIixcIlRyXCIsXCJDZVwiLFwiUGtcIixcIlNlXCJdfSxtbjp7bGFuZ3VhZ2U6XCJNb25nb2xpYVwiLHltZDohMCxtb250aHM6e29yaWdpbmFsOltcIjEg0LTSr9Cz0Y3RjdGAINGB0LDRgFwiLFwiMiDQtNGD0LPQsNCw0YAg0YHQsNGAXCIsXCIzINC00YPQs9Cw0LDRgCDRgdCw0YBcIixcIjQg0LTSr9Cz0Y3RjdGAINGB0LDRgFwiLFwiNSDQtNGD0LPQsNCw0YAg0YHQsNGAXCIsXCI2INC00YPQs9Cw0LDRgCDRgdCw0YBcIixcIjcg0LTRg9Cz0LDQsNGAINGB0LDRgFwiLFwiOCDQtNGD0LPQsNCw0YAg0YHQsNGAXCIsXCI5INC00q/Qs9GN0Y3RgCDRgdCw0YBcIixcIjEwINC00YPQs9Cw0LDRgCDRgdCw0YBcIixcIjExINC00q/Qs9GN0Y3RgCDRgdCw0YBcIixcIjEyINC00YPQs9Cw0LDRgCDRgdCw0YBcIl0sYWJicjpbXCIxLdGAINGB0LDRgFwiLFwiMi3RgCDRgdCw0YBcIixcIjMt0YAg0YHQsNGAXCIsXCI0LdGAINGB0LDRgFwiLFwiNS3RgCDRgdCw0YBcIixcIjYt0YAg0YHQsNGAXCIsXCI3LdGAINGB0LDRgFwiLFwiOC3RgCDRgdCw0YBcIixcIjkt0YAg0YHQsNGAXCIsXCIxMC3RgCDRgdCw0YBcIixcIjExLdGAINGB0LDRgFwiLFwiMTIt0YAg0YHQsNGAXCJdfSxkYXlzOltcItCd0Y9cIixcItCU0LBcIixcItCc0Y9cIixcItCb0YVcIixcItCf0q9cIixcItCR0LBcIixcItCR0Y9cIl19LG5sOntsYW5ndWFnZTpcIkR1dGNoXCIsbW9udGhzOntvcmlnaW5hbDpbXCJqYW51YXJpXCIsXCJmZWJydWFyaVwiLFwibWFhcnRcIixcImFwcmlsXCIsXCJtZWlcIixcImp1bmlcIixcImp1bGlcIixcImF1Z3VzdHVzXCIsXCJzZXB0ZW1iZXJcIixcIm9rdG9iZXJcIixcIm5vdmVtYmVyXCIsXCJkZWNlbWJlclwiXSxhYmJyOltcImphblwiLFwiZmViXCIsXCJtYWFcIixcImFwclwiLFwibWVpXCIsXCJqdW5cIixcImp1bFwiLFwiYXVnXCIsXCJzZXBcIixcIm9rdFwiLFwibm92XCIsXCJkZWNcIl19LGRheXM6W1wiem9cIixcIm1hXCIsXCJkaVwiLFwid29cIixcImRvXCIsXCJ2clwiLFwiemFcIl19LFwibmItbm9cIjp7bGFuZ3VhZ2U6XCJOb3J3ZWdpYW4gQm9rbcOlbFwiLG1vbnRoczp7b3JpZ2luYWw6W1wiSmFudWFyXCIsXCJGZWJydWFyXCIsXCJNYXJzXCIsXCJBcHJpbFwiLFwiTWFpXCIsXCJKdW5pXCIsXCJKdWxpXCIsXCJBdWd1c3RcIixcIlNlcHRlbWJlclwiLFwiT2t0b2JlclwiLFwiTm92ZW1iZXJcIixcIkRlc2VtYmVyXCJdLGFiYnI6W1wiSmFuXCIsXCJGZWJcIixcIk1hclwiLFwiQXByXCIsXCJNYWlcIixcIkp1blwiLFwiSnVsXCIsXCJBdWdcIixcIlNlcFwiLFwiT2t0XCIsXCJOb3ZcIixcIkRlc1wiXX0sZGF5czpbXCJTw7hcIixcIk1hXCIsXCJUaVwiLFwiT25cIixcIlRvXCIsXCJGclwiLFwiTMO4XCJdfSxwbDp7bGFuZ3VhZ2U6XCJQb2xpc2hcIixtb250aHM6e29yaWdpbmFsOltcIlN0eWN6ZcWEXCIsXCJMdXR5XCIsXCJNYXJ6ZWNcIixcIkt3aWVjaWXFhFwiLFwiTWFqXCIsXCJDemVyd2llY1wiLFwiTGlwaWVjXCIsXCJTaWVycGllxYRcIixcIldyemVzaWXFhFwiLFwiUGHFumR6aWVybmlrXCIsXCJMaXN0b3BhZFwiLFwiR3J1ZHppZcWEXCJdLGFiYnI6W1wiU3R5XCIsXCJMdXRcIixcIk1hclwiLFwiS3dpXCIsXCJNYWpcIixcIkN6ZVwiLFwiTGlwXCIsXCJTaWVcIixcIldyelwiLFwiUGHFulwiLFwiTGlzXCIsXCJHcnVcIl19LGRheXM6W1wiTmRcIixcIlBuXCIsXCJXdFwiLFwixZpyXCIsXCJDendcIixcIlB0XCIsXCJTb2JcIl19LFwicHQtYnJcIjp7bGFuZ3VhZ2U6XCJCcmF6aWxpYW5cIixtb250aHM6e29yaWdpbmFsOltcIkphbmVpcm9cIixcIkZldmVyZWlyb1wiLFwiTWFyw6dvXCIsXCJBYnJpbFwiLFwiTWFpb1wiLFwiSnVuaG9cIixcIkp1bGhvXCIsXCJBZ29zdG9cIixcIlNldGVtYnJvXCIsXCJPdXR1YnJvXCIsXCJOb3ZlbWJyb1wiLFwiRGV6ZW1icm9cIl0sYWJicjpbXCJKYW5cIixcIkZldlwiLFwiTWFyXCIsXCJBYnJcIixcIk1haVwiLFwiSnVuXCIsXCJKdWxcIixcIkFnb1wiLFwiU2V0XCIsXCJPdXRcIixcIk5vdlwiLFwiRGV6XCJdfSxkYXlzOltcIkRvbVwiLFwiU2VnXCIsXCJUZXJcIixcIlF1YVwiLFwiUXVpXCIsXCJTZXhcIixcIlNhYlwiXX0scm86e2xhbmd1YWdlOlwiUm9tYW5pYW5cIixtb250aHM6e29yaWdpbmFsOltcIklhbnVhcmllXCIsXCJGZWJydWFyaWVcIixcIk1hcnRpZVwiLFwiQXByaWxpZVwiLFwiTWFpXCIsXCJJdW5pZVwiLFwiSXVsaWVcIixcIkF1Z3VzdFwiLFwiU2VwdGVtYnJpZVwiLFwiT2N0b21icmllXCIsXCJOb2llbWJyaWVcIixcIkRlY2VtYnJpZVwiXSxhYmJyOltcIklhblwiLFwiRmViXCIsXCJNYXJcIixcIkFwclwiLFwiTWFpXCIsXCJJdW5cIixcIkl1bFwiLFwiQXVnXCIsXCJTZXBcIixcIk9jdFwiLFwiTm9pXCIsXCJEZWNcIl19LGRheXM6W1wiRFwiLFwiTFwiLFwiTWFcIixcIk1pXCIsXCJKXCIsXCJWXCIsXCJTXCJdfSxydTp7bGFuZ3VhZ2U6XCJSdXNzaWFuXCIsbW9udGhzOntvcmlnaW5hbDpbXCLQr9C90LLQsNGA0YxcIixcItCk0LXQstGA0LDQu9GMXCIsXCLQnNCw0YDRglwiLFwi0JDQv9GA0LXQu9GMXCIsXCLQnNCw0LlcIixcItCY0Y7QvdGMXCIsXCLQmNGO0LvRjFwiLFwi0JDQstCz0YPRgdGCXCIsXCLQodC10L3RgtGP0LHRgNGMXCIsXCLQntC60YLRj9Cx0YDRjFwiLFwi0J3QvtGP0LHRgNGMXCIsXCLQlNC10LrQsNCx0YDRjFwiXSxhYmJyOltcItCv0L3QslwiLFwi0KTQtdCy0YBcIixcItCc0LDRgNGCXCIsXCLQkNC/0YBcIixcItCc0LDQuVwiLFwi0JjRjtC90YxcIixcItCY0Y7Qu9GMXCIsXCLQkNCy0LNcIixcItCh0LXQvdGCXCIsXCLQntC60YJcIixcItCd0L7Rj9CxXCIsXCLQlNC10LpcIl19LGRheXM6W1wi0JLRgVwiLFwi0J/QvVwiLFwi0JLRglwiLFwi0KHRgFwiLFwi0KfRglwiLFwi0J/RglwiLFwi0KHQsVwiXX0sc3Y6e2xhbmd1YWdlOlwiU3dlZGlzaFwiLG1vbnRoczp7b3JpZ2luYWw6W1wiSmFudWFyaVwiLFwiRmVicnVhcmlcIixcIk1hcnNcIixcIkFwcmlsXCIsXCJNYWpcIixcIkp1bmlcIixcIkp1bGlcIixcIkF1Z3VzdGlcIixcIlNlcHRlbWJlclwiLFwiT2t0b2JlclwiLFwiTm92ZW1iZXJcIixcIkRlY2VtYmVyXCJdLGFiYnI6W1wiSmFuXCIsXCJGZWJcIixcIk1hclwiLFwiQXByXCIsXCJNYWpcIixcIkp1blwiLFwiSnVsXCIsXCJBdWdcIixcIlNlcFwiLFwiT2t0XCIsXCJOb3ZcIixcIkRlY1wiXX0sZGF5czpbXCJTw7ZuXCIsXCJNw6VuXCIsXCJUaXNcIixcIk9uc1wiLFwiVG9yXCIsXCJGcmVcIixcIkzDtnJcIl19LHNrOntsYW5ndWFnZTpcIlNsb3Zha2lhblwiLG1vbnRoczp7b3JpZ2luYWw6W1wiamFudcOhclwiLFwiZmVicnXDoXJcIixcIm1hcmVjXCIsXCJhcHLDrWxcIixcIm3DoWpcIixcImrDum5cIixcImrDumxcIixcImF1Z3VzdFwiLFwic2VwdGVtYmVyXCIsXCJva3TDs2JlclwiLFwibm92ZW1iZXJcIixcImRlY2VtYmVyXCJdLGFiYnI6W1wiamFuXCIsXCJmZWJcIixcIm1hclwiLFwiYXByXCIsXCJtw6FqXCIsXCJqw7puXCIsXCJqw7psXCIsXCJhdWdcIixcInNlcFwiLFwib2t0XCIsXCJub3ZcIixcImRlY1wiXX0sZGF5czpbXCJuZVwiLFwicG9cIixcInV0XCIsXCJzdFwiLFwixaF0XCIsXCJwaVwiLFwic29cIl19LFwic2wtc2lcIjp7bGFuZ3VhZ2U6XCJTbG92ZWlhblwiLG1vbnRoczp7b3JpZ2luYWw6W1wiSmFudWFyXCIsXCJGZWJydWFyXCIsXCJNYXJlY1wiLFwiQXByaWxcIixcIk1halwiLFwiSnVuaWpcIixcIkp1bGlqXCIsXCJBdmd1c3RcIixcIlNlcHRlbWJlclwiLFwiT2t0b2JlclwiLFwiTm92ZW1iZXJcIixcIkRlY2VtYmVyXCJdLGFiYnI6W1wiSmFuXCIsXCJGZWJcIixcIk1hclwiLFwiQXByXCIsXCJNYWpcIixcIkp1blwiLFwiSnVsXCIsXCJBdmdcIixcIlNlcFwiLFwiT2t0XCIsXCJOb3ZcIixcIkRlY1wiXX0sZGF5czpbXCJOZWRcIixcIlBvblwiLFwiVG9yXCIsXCJTcmVcIixcIsSMZXRcIixcIlBldFwiLFwiU29iXCJdfSxzcjp7bGFuZ3VhZ2U6XCJTZXJiaWFuXCIsbW9udGhzOntvcmlnaW5hbDpbXCJKYW51YXJcIixcIkZlYnJ1YXJcIixcIk1hcnRcIixcIkFwcmlsXCIsXCJNYWpcIixcIkp1blwiLFwiSnVsXCIsXCJBdmd1c3RcIixcIlNlcHRlbWJhclwiLFwiT2t0b2JhclwiLFwiTm92ZW1iYXJcIixcIkRlY2VtYmFyXCJdLGFiYnI6W1wiSmFuXCIsXCJGZWJcIixcIk1hclwiLFwiQXByXCIsXCJNYWpcIixcIkp1blwiLFwiSnVsXCIsXCJBdmdcIixcIlNlcFwiLFwiT2t0XCIsXCJOb3ZcIixcIkRlY1wiXX0sZGF5czpbXCJOZWRcIixcIlBvblwiLFwiVXRvXCIsXCJTcmVcIixcIsSMZXRcIixcIlBldFwiLFwiU3ViXCJdfSxcInNyLUN5cmxcIjp7bGFuZ3VhZ2U6XCJTZXJiaWFuIGluIEN5cmlsbGljIHNjcmlwdFwiLG1vbnRoczp7b3JpZ2luYWw6W1wi0IjQsNC90YPQsNGAXCIsXCLQpNC10LHRgNGD0LDRgFwiLFwi0JzQsNGA0YJcIixcItCQ0L/RgNC40LtcIixcItCc0LDRmFwiLFwi0IjRg9C9XCIsXCLQiNGD0LtcIixcItCQ0LLQs9GD0YHRglwiLFwi0KHQtdC/0YLQtdC80LHQsNGAXCIsXCLQntC60YLQvtCx0LDRgFwiLFwi0J3QvtCy0LXQvNCx0LDRgFwiLFwi0JTQtdGG0LXQvNCx0LDRgFwiXSxhYmJyOltcItCI0LDQvVwiLFwi0KTQtdCxXCIsXCLQnNCw0YBcIixcItCQ0L/RgFwiLFwi0JzQsNGYXCIsXCLQiNGD0L1cIixcItCI0YPQu1wiLFwi0JDQstCzXCIsXCLQodC10L9cIixcItCe0LrRglwiLFwi0J3QvtCyXCIsXCLQlNC10YZcIl19LGRheXM6W1wi0J3QtdC0XCIsXCLQn9C+0L1cIixcItCj0YLQvlwiLFwi0KHRgNC1XCIsXCLQp9C10YJcIixcItCf0LXRglwiLFwi0KHRg9CxXCJdfSx0aDp7bGFuZ3VhZ2U6XCJUaGFpXCIsbW9udGhzOntvcmlnaW5hbDpbXCLguKHguIHguKPguLLguITguKFcIixcIuC4geC4uOC4oeC4oOC4suC4nuC4seC4meC4mOC5jFwiLFwi4Lih4Li14LiZ4Liy4LiE4LihXCIsXCLguYDguKHguKnguLLguKLguJlcIixcIuC4nuC4pOC4qeC4oOC4suC4hOC4oVwiLFwi4Lih4Li04LiW4Li44LiZ4Liy4Lii4LiZXCIsXCLguIHguKPguIHguI7guLLguITguKFcIixcIuC4quC4tOC4h+C4q+C4suC4hOC4oVwiLFwi4LiB4Lix4LiZ4Lii4Liy4Lii4LiZXCIsXCLguJXguLjguKXguLLguITguKFcIixcIuC4nuC4pOC4qOC4iOC4tOC4geC4suC4ouC4mVwiLFwi4LiY4Lix4LiZ4Lin4Liy4LiE4LihXCJdLGFiYnI6W1wi4LihLuC4hC5cIixcIuC4gS7guJ4uXCIsXCLguKHguLUu4LiELlwiLFwi4LmA4LihLuC4oi5cIixcIuC4ni7guIQuXCIsXCLguKHguLQu4LiiLlwiLFwi4LiBLuC4hC5cIixcIuC4qi7guIQuXCIsXCLguIEu4LiiLlwiLFwi4LiVLuC4hC5cIixcIuC4ni7guKIuXCIsXCLguJgu4LiELlwiXX0sZGF5czpbXCLguK3guLJcIixcIuC4iFwiLFwi4LitXCIsXCLguJ5cIixcIuC4nuC4pFwiLFwi4LioXCIsXCLguKpcIl19LHRyOntsYW5ndWFnZTpcIlR1cmtpc2hcIixtb250aHM6e29yaWdpbmFsOltcIk9jYWtcIixcIsWedWJhdFwiLFwiTWFydFwiLFwiTmlzYW5cIixcIk1hecSxc1wiLFwiSGF6aXJhblwiLFwiVGVtbXV6XCIsXCJBxJ91c3Rvc1wiLFwiRXlsw7xsXCIsXCJFa2ltXCIsXCJLYXPEsW1cIixcIkFyYWzEsWtcIl0sYWJicjpbXCJPY2FcIixcIsWedWJcIixcIk1hclwiLFwiTmlzXCIsXCJNYXlcIixcIkhhelwiLFwiVGVtXCIsXCJBxJ91XCIsXCJFeWxcIixcIkVraVwiLFwiS2FzXCIsXCJBcmFcIl19LGRheXM6W1wiUGF6XCIsXCJQenRcIixcIlNhbFwiLFwiw4dhclwiLFwiUGVyXCIsXCJDdW1cIixcIkNtdFwiXX0sdWs6e2xhbmd1YWdlOlwiVWtyYWluZVwiLG1vbnRoczp7b3JpZ2luYWw6W1wi0KHRltGH0LXQvdGMXCIsXCLQm9GO0YLQuNC5XCIsXCLQkdC10YDQtdC30LXQvdGMXCIsXCLQmtCy0ZbRgtC10L3RjFwiLFwi0KLRgNCw0LLQtdC90YxcIixcItCn0LXRgNCy0LXQvdGMXCIsXCLQm9C40L/QtdC90YxcIixcItCh0LXRgNC/0LXQvdGMXCIsXCLQktC10YDQtdGB0LXQvdGMXCIsXCLQltC+0LLRgtC10L3RjFwiLFwi0JvQuNGB0YLQvtC/0LDQtFwiLFwi0JPRgNGD0LTQtdC90YxcIl0sYWJicjpbXCLQodGW0YdcIixcItCb0Y7RglwiLFwi0JHQtdGAXCIsXCLQmtCy0ZbRglwiLFwi0KLRgNCw0LJcIixcItCn0LXRgFwiLFwi0JvQuNC/XCIsXCLQodC10YDQv1wiLFwi0JLQtdGAXCIsXCLQltC+0LLRglwiLFwi0JvQuNGB0YJcIixcItCT0YDRg9C0XCJdfSxkYXlzOltcItCd0LRcIixcItCf0L1cIixcItCS0YJcIixcItCh0YBcIixcItCn0YJcIixcItCf0YJcIixcItCh0LFcIl19LHVyOntsYW5ndWFnZTpcIlVyZHVcIixydGw6ITAsbW9udGhzOntvcmlnaW5hbDpbXCLYrNmG2YjYsduMXCIsXCLZgdix2YjYsduMXCIsXCLZhdin2LHahlwiLFwi2KfZvtix24zZhFwiLFwi2YXYptuMXCIsXCLYrNmI2YZcIixcItis2YjZhNin2KbbjFwiLFwi2Kfar9iz2KpcIixcItiz2b7YqtmF2KjYsVwiLFwi2Kfaqdiq2YjYqNixXCIsXCLZhtmI2YXYqNixXCIsXCLYr9iz2YXYqNixXCJdLGFiYnI6W1wi2KzZhtmI2LHbjFwiLFwi2YHYsdmI2LHbjFwiLFwi2YXYp9ix2oZcIixcItin2b7YsduM2YRcIixcItmF2KbbjFwiLFwi2KzZiNmGXCIsXCLYrNmI2YTYp9im24xcIixcItin2q/Ys9iqXCIsXCLYs9m+2KrZhdio2LFcIixcItin2qnYqtmI2KjYsVwiLFwi2YbZiNmF2KjYsVwiLFwi2K/Ys9mF2KjYsVwiXX0sZGF5czpbXCLYp9iq2YjYp9ixXCIsXCLZvtuM2LFcIixcItmF2Ybar9mEXCIsXCLYqNiv2r5cIixcItis2YXYudix2KfYqlwiLFwi2KzZhdi524FcIixcItuB2YHYqtuBXCJdfSx2aTp7bGFuZ3VhZ2U6XCJWaWVudG5hbWVzZVwiLG1vbnRoczp7b3JpZ2luYWw6W1wiVGjDoW5nIDFcIixcIlRow6FuZyAyXCIsXCJUaMOhbmcgM1wiLFwiVGjDoW5nIDRcIixcIlRow6FuZyA1XCIsXCJUaMOhbmcgNlwiLFwiVGjDoW5nIDdcIixcIlRow6FuZyA4XCIsXCJUaMOhbmcgOVwiLFwiVGjDoW5nIDEwXCIsXCJUaMOhbmcgMTFcIixcIlRow6FuZyAxMlwiXSxhYmJyOltcIlQgMDFcIixcIlQgMDJcIixcIlQgMDNcIixcIlQgMDRcIixcIlQgMDVcIixcIlQgMDZcIixcIlQgMDdcIixcIlQgMDhcIixcIlQgMDlcIixcIlQgMTBcIixcIlQgMTFcIixcIlQgMTJcIl19LGRheXM6W1wiQ05cIixcIlRo4bupIDJcIixcIlRo4bupIDNcIixcIlRo4bupIDRcIixcIlRo4bupIDVcIixcIlRo4bupIDZcIixcIlRo4bupIDdcIl19LHpoOntsYW5ndWFnZTpcIkNoaW5lc2VcIix5bWQ6ITAsbW9udGhzOntvcmlnaW5hbDpbXCLkuIDmnIhcIixcIuS6jOaciFwiLFwi5LiJ5pyIXCIsXCLlm5vmnIhcIixcIuS6lOaciFwiLFwi5YWt5pyIXCIsXCLkuIPmnIhcIixcIuWFq+aciFwiLFwi5Lmd5pyIXCIsXCLljYHmnIhcIixcIuWNgeS4gOaciFwiLFwi5Y2B5LqM5pyIXCJdLGFiYnI6W1wi5LiA5pyIXCIsXCLkuozmnIhcIixcIuS4ieaciFwiLFwi5Zub5pyIXCIsXCLkupTmnIhcIixcIuWFreaciFwiLFwi5LiD5pyIXCIsXCLlhavmnIhcIixcIuS5neaciFwiLFwi5Y2B5pyIXCIsXCLljYHkuIDmnIhcIixcIuWNgeS6jOaciFwiXX0sZGF5czpbXCLml6VcIixcIuS4gFwiLFwi5LqMXCIsXCLkuIlcIixcIuWbm1wiLFwi5LqUXCIsXCLlha1cIl19fX19LGZ1bmN0aW9uKGUsdCl7dmFyIG49e30udG9TdHJpbmc7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBuLmNhbGwoZSkuc2xpY2UoOCwtMSl9fSxmdW5jdGlvbihlLHQsbil7dmFyIGk9big5KSxyPW4oMCkuZG9jdW1lbnQsYT1pKHIpJiZpKHIuY3JlYXRlRWxlbWVudCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBhP3IuY3JlYXRlRWxlbWVudChlKTp7fX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDApLHI9bigxMyksYT1uKDUwKSxvPW4oNCkscz1mdW5jdGlvbihlLHQsbil7dmFyIGwsdSxjLGQ9ZSZzLkYsaD1lJnMuRyxwPWUmcy5TLGY9ZSZzLlAsZz1lJnMuQixiPWUmcy5XLG09aD9yOnJbdF18fChyW3RdPXt9KSx2PW0ucHJvdG90eXBlLHk9aD9pOnA/aVt0XTooaVt0XXx8e30pLnByb3RvdHlwZTtoJiYobj10KTtmb3IobCBpbiBuKSh1PSFkJiZ5JiZ2b2lkIDAhPT15W2xdKSYmbCBpbiBtfHwoYz11P3lbbF06bltsXSxtW2xdPWgmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHlbbF0/bltsXTpnJiZ1P2EoYyxpKTpiJiZ5W2xdPT1jP2Z1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKHQsbixpKXtpZih0aGlzIGluc3RhbmNlb2YgZSl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IGU7Y2FzZSAxOnJldHVybiBuZXcgZSh0KTtjYXNlIDI6cmV0dXJuIG5ldyBlKHQsbil9cmV0dXJuIG5ldyBlKHQsbixpKX1yZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O3JldHVybiB0LnByb3RvdHlwZT1lLnByb3RvdHlwZSx0fShjKTpmJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBjP2EoRnVuY3Rpb24uY2FsbCxjKTpjLGYmJigobS52aXJ0dWFsfHwobS52aXJ0dWFsPXt9KSlbbF09YyxlJnMuUiYmdiYmIXZbbF0mJm8odixsLGMpKSl9O3MuRj0xLHMuRz0yLHMuUz00LHMuUD04LHMuQj0xNixzLlc9MzIscy5VPTY0LHMuUj0xMjgsZS5leHBvcnRzPXN9LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9IW4oMykmJiFuKDgpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuKDI4KShcImRpdlwiKSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSxmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9bigxNykscj1uKDI5KSxhPW4oMzYpLG89big0KSxzPW4oMSksbD1uKDE2KSx1PW4oNTUpLGM9bigxOSksZD1uKDYyKSxoPW4oNikoXCJpdGVyYXRvclwiKSxwPSEoW10ua2V5cyYmXCJuZXh0XCJpbltdLmtleXMoKSksZj1mdW5jdGlvbigpe3JldHVybiB0aGlzfTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4sZyxiLG0sdil7dShuLHQsZyk7dmFyIHksRCxNLFM9ZnVuY3Rpb24oZSl7aWYoIXAmJmUgaW4geClyZXR1cm4geFtlXTtzd2l0Y2goZSl7Y2FzZVwia2V5c1wiOmNhc2VcInZhbHVlc1wiOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLGUpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyxlKX19LHc9dCtcIiBJdGVyYXRvclwiLF89XCJ2YWx1ZXNcIj09YixrPSExLHg9ZS5wcm90b3R5cGUsTz14W2hdfHx4W1wiQEBpdGVyYXRvclwiXXx8YiYmeFtiXSxKPU98fFMoYiksRj1iP18/UyhcImVudHJpZXNcIik6Sjp2b2lkIDAsQT1cIkFycmF5XCI9PXQ/eC5lbnRyaWVzfHxPOk87aWYoQSYmKE09ZChBLmNhbGwobmV3IGUpKSkhPT1PYmplY3QucHJvdG90eXBlJiYoYyhNLHcsITApLGl8fHMoTSxoKXx8byhNLGgsZikpLF8mJk8mJlwidmFsdWVzXCIhPT1PLm5hbWUmJihrPSEwLEo9ZnVuY3Rpb24oKXtyZXR1cm4gTy5jYWxsKHRoaXMpfSksaSYmIXZ8fCFwJiYhayYmeFtoXXx8byh4LGgsSiksbFt0XT1KLGxbd109ZixiKWlmKHk9e3ZhbHVlczpfP0o6UyhcInZhbHVlc1wiKSxrZXlzOm0/SjpTKFwia2V5c1wiKSxlbnRyaWVzOkZ9LHYpZm9yKEQgaW4geSlEIGluIHh8fGEoeCxELHlbRF0pO2Vsc2UgcihyLlArci5GKihwfHxrKSx0LHkpO3JldHVybiB5fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oNykscj1uKDU5KSxhPW4oMTUpLG89bigyMCkoXCJJRV9QUk9UT1wiKSxzPWZ1bmN0aW9uKCl7fSxsPWZ1bmN0aW9uKCl7dmFyIGUsdD1uKDI4KShcImlmcmFtZVwiKSxpPWEubGVuZ3RoO2Zvcih0LnN0eWxlLmRpc3BsYXk9XCJub25lXCIsbig1MikuYXBwZW5kQ2hpbGQodCksdC5zcmM9XCJqYXZhc2NyaXB0OlwiLGU9dC5jb250ZW50V2luZG93LmRvY3VtZW50LGUub3BlbigpLGUud3JpdGUoXCI8c2NyaXB0PmRvY3VtZW50LkY9T2JqZWN0PFxcL3NjcmlwdD5cIiksZS5jbG9zZSgpLGw9ZS5GO2ktLTspZGVsZXRlIGwucHJvdG90eXBlW2FbaV1dO3JldHVybiBsKCl9O2UuZXhwb3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBudWxsIT09ZT8ocy5wcm90b3R5cGU9aShlKSxuPW5ldyBzLHMucHJvdG90eXBlPW51bGwsbltvXT1lKTpuPWwoKSx2b2lkIDA9PT10P246cihuLHQpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oMzUpLHI9bigxNSkuY29uY2F0KFwibGVuZ3RoXCIsXCJwcm90b3R5cGVcIik7dC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbihlKXtyZXR1cm4gaShlLHIpfX0sZnVuY3Rpb24oZSx0KXt0LmY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc30sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oMSkscj1uKDIpLGE9big0OSkoITEpLG89bigyMCkoXCJJRV9QUk9UT1wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixzPXIoZSksbD0wLHU9W107Zm9yKG4gaW4gcyluIT1vJiZpKHMsbikmJnUucHVzaChuKTtmb3IoO3QubGVuZ3RoPmw7KWkocyxuPXRbbCsrXSkmJih+YSh1LG4pfHx1LnB1c2gobikpO3JldHVybiB1fX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKDQpfSxmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIGk9big0MSkscj1uKDI2KTt0LmRlZmF1bHQ9e3Byb3BzOnt2YWx1ZTp7dmFsaWRhdG9yOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZXx8ZSBpbnN0YW5jZW9mIERhdGV8fFwic3RyaW5nXCI9PXR5cGVvZiBlfHxcIm51bWJlclwiPT10eXBlb2YgZX19LG5hbWU6U3RyaW5nLHJlZk5hbWU6U3RyaW5nLGlkOlN0cmluZyxmb3JtYXQ6e3R5cGU6W1N0cmluZyxGdW5jdGlvbl0sZGVmYXVsdDpcImRkIE1NTSB5eXl5XCJ9LGxhbmd1YWdlOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiZW5cIn0sb3BlbkRhdGU6e3ZhbGlkYXRvcjpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWV8fGUgaW5zdGFuY2VvZiBEYXRlfHxcInN0cmluZ1wiPT10eXBlb2YgZX19LGZ1bGxNb250aE5hbWU6Qm9vbGVhbixkaXNhYmxlZDpPYmplY3QsaGlnaGxpZ2h0ZWQ6T2JqZWN0LHBsYWNlaG9sZGVyOlN0cmluZyxpbmxpbmU6Qm9vbGVhbixjYWxlbmRhckNsYXNzOltTdHJpbmcsT2JqZWN0XSxpbnB1dENsYXNzOltTdHJpbmcsT2JqZWN0XSx3cmFwcGVyQ2xhc3M6W1N0cmluZyxPYmplY3RdLG1vbmRheUZpcnN0OkJvb2xlYW4sY2xlYXJCdXR0b246Qm9vbGVhbixjbGVhckJ1dHRvbkljb246U3RyaW5nLGNhbGVuZGFyQnV0dG9uOkJvb2xlYW4sY2FsZW5kYXJCdXR0b25JY29uOlN0cmluZyxjYWxlbmRhckJ1dHRvbkljb25Db250ZW50OlN0cmluZyxib290c3RyYXBTdHlsaW5nOkJvb2xlYW4saW5pdGlhbFZpZXc6U3RyaW5nLGRpc2FibGVkUGlja2VyOkJvb2xlYW4scmVxdWlyZWQ6Qm9vbGVhbixtaW5pbXVtVmlldzp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImRheVwifSxtYXhpbXVtVmlldzp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInllYXJcIn19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57cGFnZVRpbWVzdGFtcDoodGhpcy5vcGVuRGF0ZT9uZXcgRGF0ZSh0aGlzLm9wZW5EYXRlKTpuZXcgRGF0ZSkuc2V0RGF0ZSgxKSxzZWxlY3RlZERhdGU6bnVsbCxzaG93RGF5VmlldzohMSxzaG93TW9udGhWaWV3OiExLHNob3dZZWFyVmlldzohMSxjYWxlbmRhckhlaWdodDowfX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuc2V0VmFsdWUoZSl9LG9wZW5EYXRlOmZ1bmN0aW9uKCl7dGhpcy5zZXRQYWdlRGF0ZSgpfSxpbml0aWFsVmlldzpmdW5jdGlvbigpe3RoaXMuc2V0SW5pdGlhbFZpZXcoKX19LGNvbXB1dGVkOntjb21wdXRlZEluaXRpYWxWaWV3OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdGlhbFZpZXc/dGhpcy5pbml0aWFsVmlldzp0aGlzLm1pbmltdW1WaWV3fSxwYWdlRGF0ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnBhZ2VUaW1lc3RhbXApfSxmb3JtYXR0ZWRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGVkRGF0ZT9cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLmZvcm1hdD90aGlzLmZvcm1hdCh0aGlzLnNlbGVjdGVkRGF0ZSk6aS5hLmZvcm1hdERhdGUobmV3IERhdGUodGhpcy5zZWxlY3RlZERhdGUpLHRoaXMuZm9ybWF0LHRoaXMudHJhbnNsYXRpb24pOm51bGx9LHRyYW5zbGF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHIuYS50cmFuc2xhdGlvbnNbdGhpcy5sYW5ndWFnZV19LGN1cnJNb250aE5hbWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmZ1bGxNb250aE5hbWU/dGhpcy50cmFuc2xhdGlvbi5tb250aHMub3JpZ2luYWw6dGhpcy50cmFuc2xhdGlvbi5tb250aHMuYWJicjtyZXR1cm4gaS5hLmdldE1vbnRoTmFtZUFiYnIodGhpcy5wYWdlRGF0ZS5nZXRNb250aCgpLGUpfSxjdXJyWWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhZ2VEYXRlLmdldEZ1bGxZZWFyKCl9LGJsYW5rRGF5czpmdW5jdGlvbigpe3ZhciBlPXRoaXMucGFnZURhdGUsdD1uZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCksZS5nZXRNb250aCgpLDEsZS5nZXRIb3VycygpLGUuZ2V0TWludXRlcygpKTtyZXR1cm4gdGhpcy5tb25kYXlGaXJzdD90LmdldERheSgpPjA/dC5nZXREYXkoKS0xOjY6dC5nZXREYXkoKX0sZGF5c09mV2VlazpmdW5jdGlvbigpe2lmKHRoaXMubW9uZGF5Rmlyc3Qpe3ZhciBlPXRoaXMudHJhbnNsYXRpb24uZGF5cy5zbGljZSgpO3JldHVybiBlLnB1c2goZS5zaGlmdCgpKSxlfXJldHVybiB0aGlzLnRyYW5zbGF0aW9uLmRheXN9LGRheXM6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5wYWdlRGF0ZSx0PVtdLG49bmV3IERhdGUoZS5nZXRGdWxsWWVhcigpLGUuZ2V0TW9udGgoKSwxLGUuZ2V0SG91cnMoKSxlLmdldE1pbnV0ZXMoKSkscj1pLmEuZGF5c0luTW9udGgobi5nZXRGdWxsWWVhcigpLG4uZ2V0TW9udGgoKSksYT0wO2E8cjthKyspdC5wdXNoKHtkYXRlOm4uZ2V0RGF0ZSgpLHRpbWVzdGFtcDpuLmdldFRpbWUoKSxpc1NlbGVjdGVkOnRoaXMuaXNTZWxlY3RlZERhdGUobiksaXNEaXNhYmxlZDp0aGlzLmlzRGlzYWJsZWREYXRlKG4pLGlzSGlnaGxpZ2h0ZWQ6dGhpcy5pc0hpZ2hsaWdodGVkRGF0ZShuKSxpc0hpZ2hsaWdodFN0YXJ0OnRoaXMuaXNIaWdobGlnaHRTdGFydChuKSxpc0hpZ2hsaWdodEVuZDp0aGlzLmlzSGlnaGxpZ2h0RW5kKG4pLGlzVG9kYXk6bi50b0RhdGVTdHJpbmcoKT09PShuZXcgRGF0ZSkudG9EYXRlU3RyaW5nKCksaXNXZWVrZW5kOjA9PT1uLmdldERheSgpfHw2PT09bi5nZXREYXkoKSxpc1NhdHVyZGF5OjY9PT1uLmdldERheSgpLGlzU3VuZGF5OjA9PT1uLmdldERheSgpfSksbi5zZXREYXRlKG4uZ2V0RGF0ZSgpKzEpO3JldHVybiB0fSxtb250aHM6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5wYWdlRGF0ZSx0PVtdLG49bmV3IERhdGUoZS5nZXRGdWxsWWVhcigpLDAsZS5nZXREYXRlKCksZS5nZXRIb3VycygpLGUuZ2V0TWludXRlcygpKSxyPTA7cjwxMjtyKyspdC5wdXNoKHttb250aDppLmEuZ2V0TW9udGhOYW1lKHIsdGhpcy50cmFuc2xhdGlvbi5tb250aHMub3JpZ2luYWwpLHRpbWVzdGFtcDpuLmdldFRpbWUoKSxpc1NlbGVjdGVkOnRoaXMuaXNTZWxlY3RlZE1vbnRoKG4pLGlzRGlzYWJsZWQ6dGhpcy5pc0Rpc2FibGVkTW9udGgobil9KSxuLnNldE1vbnRoKG4uZ2V0TW9udGgoKSsxKTtyZXR1cm4gdH0seWVhcnM6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5wYWdlRGF0ZSx0PVtdLG49bmV3IERhdGUoMTAqTWF0aC5mbG9vcihlLmdldEZ1bGxZZWFyKCkvMTApLGUuZ2V0TW9udGgoKSxlLmdldERhdGUoKSxlLmdldEhvdXJzKCksZS5nZXRNaW51dGVzKCkpLGk9MDtpPDEwO2krKyl0LnB1c2goe3llYXI6bi5nZXRGdWxsWWVhcigpLHRpbWVzdGFtcDpuLmdldFRpbWUoKSxpc1NlbGVjdGVkOnRoaXMuaXNTZWxlY3RlZFllYXIobiksaXNEaXNhYmxlZDp0aGlzLmlzRGlzYWJsZWRZZWFyKG4pfSksbi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrMSk7cmV0dXJuIHR9LGNhbGVuZGFyU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm57cG9zaXRpb246dGhpcy5pc0lubGluZT9cInN0YXRpY1wiOnZvaWQgMH19LGlzT3BlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNob3dEYXlWaWV3fHx0aGlzLnNob3dNb250aFZpZXd8fHRoaXMuc2hvd1llYXJWaWV3fSxpc0lubGluZTpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5pbmxpbmV9LGlzUnRsOmZ1bmN0aW9uKCl7cmV0dXJuITA9PT10aGlzLnRyYW5zbGF0aW9uLnJ0bH0saXNZbWQ6ZnVuY3Rpb24oKXtyZXR1cm4hMD09PXRoaXMudHJhbnNsYXRpb24ueW1kfX0sbWV0aG9kczp7Y2xvc2U6ZnVuY3Rpb24oZSl7dGhpcy5zaG93RGF5Vmlldz10aGlzLnNob3dNb250aFZpZXc9dGhpcy5zaG93WWVhclZpZXc9ITEsdGhpcy5pc0lubGluZXx8KGUmJnRoaXMuJGVtaXQoXCJjbG9zZWRcIiksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdGhpcy5jbGlja091dHNpZGUsITEpKX0scmVzZXREZWZhdWx0RGF0ZTpmdW5jdGlvbigpe2lmKG51bGw9PT10aGlzLnNlbGVjdGVkRGF0ZSlyZXR1cm4gdm9pZCB0aGlzLnNldFBhZ2VEYXRlKCk7dGhpcy5zZXRQYWdlRGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZSl9LHNob3dDYWxlbmRhcjpmdW5jdGlvbigpe3JldHVybiF0aGlzLmRpc2FibGVkUGlja2VyJiYhdGhpcy5pc0lubGluZSYmKHRoaXMuaXNPcGVuP3RoaXMuY2xvc2UoITApOih0aGlzLnNldEluaXRpYWxWaWV3KCksdm9pZCh0aGlzLmlzSW5saW5lfHx0aGlzLiRlbWl0KFwib3BlbmVkXCIpKSkpfSxzZXRJbml0aWFsVmlldzpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY29tcHV0ZWRJbml0aWFsVmlldztpZighdGhpcy5hbGxvd2VkVG9TaG93VmlldyhlKSl0aHJvdyBuZXcgRXJyb3IoXCJpbml0aWFsVmlldyAnXCIrdGhpcy5pbml0aWFsVmlldytcIicgY2Fubm90IGJlIHJlbmRlcmVkIGJhc2VkIG9uIG1pbmltdW0gJ1wiK3RoaXMubWluaW11bVZpZXcrXCInIGFuZCBtYXhpbXVtICdcIit0aGlzLm1heGltdW1WaWV3K1wiJ1wiKTtzd2l0Y2goZSl7Y2FzZVwieWVhclwiOnRoaXMuc2hvd1llYXJDYWxlbmRhcigpO2JyZWFrO2Nhc2VcIm1vbnRoXCI6dGhpcy5zaG93TW9udGhDYWxlbmRhcigpO2JyZWFrO2RlZmF1bHQ6dGhpcy5zaG93RGF5Q2FsZW5kYXIoKX19LGFsbG93ZWRUb1Nob3dWaWV3OmZ1bmN0aW9uKGUpe3ZhciB0PVtcImRheVwiLFwibW9udGhcIixcInllYXJcIl0sbj10LmluZGV4T2YodGhpcy5taW5pbXVtVmlldyksaT10LmluZGV4T2YodGhpcy5tYXhpbXVtVmlldykscj10LmluZGV4T2YoZSk7cmV0dXJuIHI+PW4mJnI8PWl9LHNob3dEYXlDYWxlbmRhcjpmdW5jdGlvbigpe2lmKCF0aGlzLmFsbG93ZWRUb1Nob3dWaWV3KFwiZGF5XCIpKXJldHVybiExO3RoaXMuY2xvc2UoKSx0aGlzLnNob3dEYXlWaWV3PSEwLHRoaXMuYWRkT3V0c2lkZUNsaWNrTGlzdGVuZXIoKX0sc2hvd01vbnRoQ2FsZW5kYXI6ZnVuY3Rpb24oKXtpZighdGhpcy5hbGxvd2VkVG9TaG93VmlldyhcIm1vbnRoXCIpKXJldHVybiExO3RoaXMuY2xvc2UoKSx0aGlzLnNob3dNb250aFZpZXc9ITAsdGhpcy5hZGRPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpfSxzaG93WWVhckNhbGVuZGFyOmZ1bmN0aW9uKCl7aWYoIXRoaXMuYWxsb3dlZFRvU2hvd1ZpZXcoXCJ5ZWFyXCIpKXJldHVybiExO3RoaXMuY2xvc2UoKSx0aGlzLnNob3dZZWFyVmlldz0hMCx0aGlzLmFkZE91dHNpZGVDbGlja0xpc3RlbmVyKCl9LGFkZE91dHNpZGVDbGlja0xpc3RlbmVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmlzSW5saW5lfHxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsZS5jbGlja091dHNpZGUsITEpfSwxMDApfSxzZXREYXRlOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBEYXRlKGUpO3RoaXMuc2VsZWN0ZWREYXRlPW5ldyBEYXRlKHQpLHRoaXMuc2V0UGFnZURhdGUodCksdGhpcy4kZW1pdChcInNlbGVjdGVkXCIsbmV3IERhdGUodCkpLHRoaXMuJGVtaXQoXCJpbnB1dFwiLG5ldyBEYXRlKHQpKX0sY2xlYXJEYXRlOmZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZERhdGU9bnVsbCx0aGlzLiRlbWl0KFwic2VsZWN0ZWRcIixudWxsKSx0aGlzLiRlbWl0KFwiaW5wdXRcIixudWxsKSx0aGlzLiRlbWl0KFwiY2xlYXJlZFwiKX0sc2VsZWN0RGF0ZTpmdW5jdGlvbihlKXtpZihlLmlzRGlzYWJsZWQpcmV0dXJuIHRoaXMuJGVtaXQoXCJzZWxlY3RlZERpc2FibGVkXCIsZSksITE7dGhpcy5zZXREYXRlKGUudGltZXN0YW1wKSx0aGlzLmlzSW5saW5lfHx0aGlzLmNsb3NlKCEwKX0sc2VsZWN0TW9udGg6ZnVuY3Rpb24oZSl7aWYoZS5pc0Rpc2FibGVkKXJldHVybiExO3ZhciB0PW5ldyBEYXRlKGUudGltZXN0YW1wKTt0aGlzLmFsbG93ZWRUb1Nob3dWaWV3KFwiZGF5XCIpPyh0aGlzLnNldFBhZ2VEYXRlKHQpLHRoaXMuJGVtaXQoXCJjaGFuZ2VkTW9udGhcIixlKSx0aGlzLnNob3dEYXlDYWxlbmRhcigpKToodGhpcy5zZXREYXRlKHQpLHRoaXMuaXNJbmxpbmV8fHRoaXMuY2xvc2UoITApKX0sc2VsZWN0WWVhcjpmdW5jdGlvbihlKXtpZihlLmlzRGlzYWJsZWQpcmV0dXJuITE7dmFyIHQ9bmV3IERhdGUoZS50aW1lc3RhbXApO3RoaXMuYWxsb3dlZFRvU2hvd1ZpZXcoXCJtb250aFwiKT8odGhpcy5zZXRQYWdlRGF0ZSh0KSx0aGlzLiRlbWl0KFwiY2hhbmdlZFllYXJcIixlKSx0aGlzLnNob3dNb250aENhbGVuZGFyKCkpOih0aGlzLnNldERhdGUodCksdGhpcy5pc0lubGluZXx8dGhpcy5jbG9zZSghMCkpfSxnZXRQYWdlRGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhZ2VEYXRlLmdldERhdGUoKX0sZ2V0UGFnZU1vbnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFnZURhdGUuZ2V0TW9udGgoKX0sZ2V0UGFnZVllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYWdlRGF0ZS5nZXRGdWxsWWVhcigpfSxnZXRQYWdlRGVjYWRlOmZ1bmN0aW9uKCl7dmFyIGU9MTAqTWF0aC5mbG9vcih0aGlzLnBhZ2VEYXRlLmdldEZ1bGxZZWFyKCkvMTApO3JldHVybiBlK1wiIC0gXCIrKGUrOSl9LGNoYW5nZU1vbnRoOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucGFnZURhdGU7dC5zZXRNb250aCh0LmdldE1vbnRoKCkrZSksdGhpcy5zZXRQYWdlRGF0ZSh0KSx0aGlzLiRlbWl0KFwiY2hhbmdlZE1vbnRoXCIsdCl9LHByZXZpb3VzTW9udGg6ZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzTW9udGhEaXNhYmxlZCgpfHx0aGlzLmNoYW5nZU1vbnRoKC0xKX0scHJldmlvdXNNb250aERpc2FibGVkOmZ1bmN0aW9uKCl7aWYoIXRoaXMuZGlzYWJsZWR8fCF0aGlzLmRpc2FibGVkLnRvKXJldHVybiExO3ZhciBlPXRoaXMucGFnZURhdGU7cmV0dXJuIHRoaXMuZGlzYWJsZWQudG8uZ2V0TW9udGgoKT49ZS5nZXRNb250aCgpJiZ0aGlzLmRpc2FibGVkLnRvLmdldEZ1bGxZZWFyKCk+PWUuZ2V0RnVsbFllYXIoKX0sbmV4dE1vbnRoOmZ1bmN0aW9uKCl7dGhpcy5uZXh0TW9udGhEaXNhYmxlZCgpfHx0aGlzLmNoYW5nZU1vbnRoKDEpfSxuZXh0TW9udGhEaXNhYmxlZDpmdW5jdGlvbigpe2lmKCF0aGlzLmRpc2FibGVkfHwhdGhpcy5kaXNhYmxlZC5mcm9tKXJldHVybiExO3ZhciBlPXRoaXMucGFnZURhdGU7cmV0dXJuIHRoaXMuZGlzYWJsZWQuZnJvbS5nZXRNb250aCgpPD1lLmdldE1vbnRoKCkmJnRoaXMuZGlzYWJsZWQuZnJvbS5nZXRGdWxsWWVhcigpPD1lLmdldEZ1bGxZZWFyKCl9LGNoYW5nZVllYXI6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOlwiY2hhbmdlZFllYXJcIixuPXRoaXMucGFnZURhdGU7bi5zZXRZZWFyKG4uZ2V0RnVsbFllYXIoKStlKSx0aGlzLnNldFBhZ2VEYXRlKG4pLHRoaXMuJGVtaXQodCxuKX0scHJldmlvdXNZZWFyOmZ1bmN0aW9uKCl7dGhpcy5wcmV2aW91c1llYXJEaXNhYmxlZCgpfHx0aGlzLmNoYW5nZVllYXIoLTEpfSxwcmV2aW91c1llYXJEaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiEoIXRoaXMuZGlzYWJsZWR8fCF0aGlzLmRpc2FibGVkLnRvKSYmdGhpcy5kaXNhYmxlZC50by5nZXRGdWxsWWVhcigpPj10aGlzLnBhZ2VEYXRlLmdldEZ1bGxZZWFyKCl9LG5leHRZZWFyOmZ1bmN0aW9uKCl7dGhpcy5uZXh0WWVhckRpc2FibGVkKCl8fHRoaXMuY2hhbmdlWWVhcigxKX0sbmV4dFllYXJEaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiEoIXRoaXMuZGlzYWJsZWR8fCF0aGlzLmRpc2FibGVkLmZyb20pJiZ0aGlzLmRpc2FibGVkLmZyb20uZ2V0RnVsbFllYXIoKTw9dGhpcy5wYWdlRGF0ZS5nZXRGdWxsWWVhcigpfSxwcmV2aW91c0RlY2FkZTpmdW5jdGlvbigpe3RoaXMucHJldmlvdXNEZWNhZGVEaXNhYmxlZCgpfHx0aGlzLmNoYW5nZVllYXIoLTEwLFwiY2hhbmdlRGVjYWRlXCIpfSxwcmV2aW91c0RlY2FkZURpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5kaXNhYmxlZHx8IXRoaXMuZGlzYWJsZWQudG8pJiYxMCpNYXRoLmZsb29yKHRoaXMuZGlzYWJsZWQudG8uZ2V0RnVsbFllYXIoKS8xMCk+PTEwKk1hdGguZmxvb3IodGhpcy5wYWdlRGF0ZS5nZXRGdWxsWWVhcigpLzEwKX0sbmV4dERlY2FkZTpmdW5jdGlvbigpe3RoaXMubmV4dERlY2FkZURpc2FibGVkKCl8fHRoaXMuY2hhbmdlWWVhcigxMCxcImNoYW5nZURlY2FkZVwiKX0sbmV4dERlY2FkZURpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5kaXNhYmxlZHx8IXRoaXMuZGlzYWJsZWQuZnJvbSkmJjEwKk1hdGguY2VpbCh0aGlzLmRpc2FibGVkLmZyb20uZ2V0RnVsbFllYXIoKS8xMCk8PTEwKk1hdGguY2VpbCh0aGlzLnBhZ2VEYXRlLmdldEZ1bGxZZWFyKCkvMTApfSxpc1NlbGVjdGVkRGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zZWxlY3RlZERhdGUmJnRoaXMuc2VsZWN0ZWREYXRlLnRvRGF0ZVN0cmluZygpPT09ZS50b0RhdGVTdHJpbmcoKX0saXNEaXNhYmxlZERhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9ITE7cmV0dXJuIHZvaWQgMCE9PXRoaXMuZGlzYWJsZWQmJih2b2lkIDAhPT10aGlzLmRpc2FibGVkLmRhdGVzJiZ0aGlzLmRpc2FibGVkLmRhdGVzLmZvckVhY2goZnVuY3Rpb24obil7aWYoZS50b0RhdGVTdHJpbmcoKT09PW4udG9EYXRlU3RyaW5nKCkpcmV0dXJuIHQ9ITAsITB9KSx2b2lkIDAhPT10aGlzLmRpc2FibGVkLnRvJiZ0aGlzLmRpc2FibGVkLnRvJiZlPHRoaXMuZGlzYWJsZWQudG8mJih0PSEwKSx2b2lkIDAhPT10aGlzLmRpc2FibGVkLmZyb20mJnRoaXMuZGlzYWJsZWQuZnJvbSYmZT50aGlzLmRpc2FibGVkLmZyb20mJih0PSEwKSx2b2lkIDAhPT10aGlzLmRpc2FibGVkLnJhbmdlcyYmdGhpcy5kaXNhYmxlZC5yYW5nZXMuZm9yRWFjaChmdW5jdGlvbihuKXtpZih2b2lkIDAhPT1uLmZyb20mJm4uZnJvbSYmdm9pZCAwIT09bi50byYmbi50byYmZTxuLnRvJiZlPm4uZnJvbSlyZXR1cm4gdD0hMCwhMH0pLHZvaWQgMCE9PXRoaXMuZGlzYWJsZWQuZGF5cyYmLTEhPT10aGlzLmRpc2FibGVkLmRheXMuaW5kZXhPZihlLmdldERheSgpKSYmKHQ9ITApLHZvaWQgMCE9PXRoaXMuZGlzYWJsZWQuZGF5c09mTW9udGgmJi0xIT09dGhpcy5kaXNhYmxlZC5kYXlzT2ZNb250aC5pbmRleE9mKGUuZ2V0RGF0ZSgpKSYmKHQ9ITApLFwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMuZGlzYWJsZWQuY3VzdG9tUHJlZGljdG9yJiZ0aGlzLmRpc2FibGVkLmN1c3RvbVByZWRpY3RvcihlKSYmKHQ9ITApLHQpfSxpc0hpZ2hsaWdodGVkRGF0ZTpmdW5jdGlvbihlKXtpZigoIXRoaXMuaGlnaGxpZ2h0ZWR8fCF0aGlzLmhpZ2hsaWdodGVkLmluY2x1ZGVEaXNhYmxlZCkmJnRoaXMuaXNEaXNhYmxlZERhdGUoZSkpcmV0dXJuITE7dmFyIHQ9ITE7cmV0dXJuIHZvaWQgMCE9PXRoaXMuaGlnaGxpZ2h0ZWQmJih2b2lkIDAhPT10aGlzLmhpZ2hsaWdodGVkLmRhdGVzJiZ0aGlzLmhpZ2hsaWdodGVkLmRhdGVzLmZvckVhY2goZnVuY3Rpb24obil7aWYoZS50b0RhdGVTdHJpbmcoKT09PW4udG9EYXRlU3RyaW5nKCkpcmV0dXJuIHQ9ITAsITB9KSx0aGlzLmlzRGVmaW5lZCh0aGlzLmhpZ2hsaWdodGVkLmZyb20pJiZ0aGlzLmlzRGVmaW5lZCh0aGlzLmhpZ2hsaWdodGVkLnRvKSYmKHQ9ZT49dGhpcy5oaWdobGlnaHRlZC5mcm9tJiZlPD10aGlzLmhpZ2hsaWdodGVkLnRvKSx2b2lkIDAhPT10aGlzLmhpZ2hsaWdodGVkLmRheXMmJi0xIT09dGhpcy5oaWdobGlnaHRlZC5kYXlzLmluZGV4T2YoZS5nZXREYXkoKSkmJih0PSEwKSx2b2lkIDAhPT10aGlzLmhpZ2hsaWdodGVkLmRheXNPZk1vbnRoJiYtMSE9PXRoaXMuaGlnaGxpZ2h0ZWQuZGF5c09mTW9udGguaW5kZXhPZihlLmdldERhdGUoKSkmJih0PSEwKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLmhpZ2hsaWdodGVkLmN1c3RvbVByZWRpY3RvciYmdGhpcy5oaWdobGlnaHRlZC5jdXN0b21QcmVkaWN0b3IoZSkmJih0PSEwKSx0KX0saXNIaWdobGlnaHRTdGFydDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pc0hpZ2hsaWdodGVkRGF0ZShlKSYmdGhpcy5oaWdobGlnaHRlZC5mcm9tIGluc3RhbmNlb2YgRGF0ZSYmdGhpcy5oaWdobGlnaHRlZC5mcm9tLmdldEZ1bGxZZWFyKCk9PT1lLmdldEZ1bGxZZWFyKCkmJnRoaXMuaGlnaGxpZ2h0ZWQuZnJvbS5nZXRNb250aCgpPT09ZS5nZXRNb250aCgpJiZ0aGlzLmhpZ2hsaWdodGVkLmZyb20uZ2V0RGF0ZSgpPT09ZS5nZXREYXRlKCl9LGlzSGlnaGxpZ2h0RW5kOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmlzSGlnaGxpZ2h0ZWREYXRlKGUpJiZ0aGlzLmhpZ2hsaWdodGVkLnRvIGluc3RhbmNlb2YgRGF0ZSYmdGhpcy5oaWdobGlnaHRlZC50by5nZXRGdWxsWWVhcigpPT09ZS5nZXRGdWxsWWVhcigpJiZ0aGlzLmhpZ2hsaWdodGVkLnRvLmdldE1vbnRoKCk9PT1lLmdldE1vbnRoKCkmJnRoaXMuaGlnaGxpZ2h0ZWQudG8uZ2V0RGF0ZSgpPT09ZS5nZXREYXRlKCl9LGlzRGVmaW5lZDpmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZSYmZX0saXNTZWxlY3RlZE1vbnRoOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnNlbGVjdGVkRGF0ZSYmdGhpcy5zZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKT09PWUuZ2V0RnVsbFllYXIoKSYmdGhpcy5zZWxlY3RlZERhdGUuZ2V0TW9udGgoKT09PWUuZ2V0TW9udGgoKX0saXNEaXNhYmxlZE1vbnRoOmZ1bmN0aW9uKGUpe3ZhciB0PSExO3JldHVybiB2b2lkIDAhPT10aGlzLmRpc2FibGVkJiYodm9pZCAwIT09dGhpcy5kaXNhYmxlZC50byYmdGhpcy5kaXNhYmxlZC50byYmKGUuZ2V0TW9udGgoKTx0aGlzLmRpc2FibGVkLnRvLmdldE1vbnRoKCkmJmUuZ2V0RnVsbFllYXIoKTw9dGhpcy5kaXNhYmxlZC50by5nZXRGdWxsWWVhcigpfHxlLmdldEZ1bGxZZWFyKCk8dGhpcy5kaXNhYmxlZC50by5nZXRGdWxsWWVhcigpKSYmKHQ9ITApLHZvaWQgMCE9PXRoaXMuZGlzYWJsZWQuZnJvbSYmdGhpcy5kaXNhYmxlZC5mcm9tJiYodGhpcy5kaXNhYmxlZC5mcm9tJiZlLmdldE1vbnRoKCk+dGhpcy5kaXNhYmxlZC5mcm9tLmdldE1vbnRoKCkmJmUuZ2V0RnVsbFllYXIoKT49dGhpcy5kaXNhYmxlZC5mcm9tLmdldEZ1bGxZZWFyKCl8fGUuZ2V0RnVsbFllYXIoKT50aGlzLmRpc2FibGVkLmZyb20uZ2V0RnVsbFllYXIoKSkmJih0PSEwKSx0KX0saXNTZWxlY3RlZFllYXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2VsZWN0ZWREYXRlJiZ0aGlzLnNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpPT09ZS5nZXRGdWxsWWVhcigpfSxpc0Rpc2FibGVkWWVhcjpmdW5jdGlvbihlKXt2YXIgdD0hMTtyZXR1cm4hKHZvaWQgMD09PXRoaXMuZGlzYWJsZWR8fCF0aGlzLmRpc2FibGVkKSYmKHZvaWQgMCE9PXRoaXMuZGlzYWJsZWQudG8mJnRoaXMuZGlzYWJsZWQudG8mJmUuZ2V0RnVsbFllYXIoKTx0aGlzLmRpc2FibGVkLnRvLmdldEZ1bGxZZWFyKCkmJih0PSEwKSx2b2lkIDAhPT10aGlzLmRpc2FibGVkLmZyb20mJnRoaXMuZGlzYWJsZWQuZnJvbSYmZS5nZXRGdWxsWWVhcigpPnRoaXMuZGlzYWJsZWQuZnJvbS5nZXRGdWxsWWVhcigpJiYodD0hMCksdCl9LHNldFZhbHVlOmZ1bmN0aW9uKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlfHxcIm51bWJlclwiPT10eXBlb2YgZSl7dmFyIHQ9bmV3IERhdGUoZSk7ZT1pc05hTih0LnZhbHVlT2YoKSk/bnVsbDp0fWlmKCFlKXJldHVybiB0aGlzLnNldFBhZ2VEYXRlKCksdm9pZCh0aGlzLnNlbGVjdGVkRGF0ZT1udWxsKTt0aGlzLnNlbGVjdGVkRGF0ZT1lLHRoaXMuc2V0UGFnZURhdGUoZSl9LHNldFBhZ2VEYXRlOmZ1bmN0aW9uKGUpe2V8fChlPXRoaXMub3BlbkRhdGU/bmV3IERhdGUodGhpcy5vcGVuRGF0ZSk6bmV3IERhdGUpLHRoaXMucGFnZVRpbWVzdGFtcD1uZXcgRGF0ZShlKS5zZXREYXRlKDEpfSxjbGlja091dHNpZGU6ZnVuY3Rpb24oZSl7aWYodGhpcy4kZWwmJiF0aGlzLiRlbC5jb250YWlucyhlLnRhcmdldCkpe2lmKHRoaXMuaXNJbmxpbmUpcmV0dXJuIHRoaXMuc2hvd0RheUNhbGVuZGFyKCk7dGhpcy5yZXNldERlZmF1bHREYXRlKCksdGhpcy5jbG9zZSghMCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdGhpcy5jbGlja091dHNpZGUsITEpfX0sZGF5Q2xhc3NlczpmdW5jdGlvbihlKXtyZXR1cm57c2VsZWN0ZWQ6ZS5pc1NlbGVjdGVkLGRpc2FibGVkOmUuaXNEaXNhYmxlZCxoaWdobGlnaHRlZDplLmlzSGlnaGxpZ2h0ZWQsdG9kYXk6ZS5pc1RvZGF5LHdlZWtlbmQ6ZS5pc1dlZWtlbmQsc2F0OmUuaXNTYXR1cmRheSxzdW46ZS5pc1N1bmRheSxcImhpZ2hsaWdodC1zdGFydFwiOmUuaXNIaWdobGlnaHRTdGFydCxcImhpZ2hsaWdodC1lbmRcIjplLmlzSGlnaGxpZ2h0RW5kfX0saW5pdDpmdW5jdGlvbigpe3RoaXMudmFsdWUmJnRoaXMuc2V0VmFsdWUodGhpcy52YWx1ZSksdGhpcy5pc0lubGluZSYmdGhpcy5zZXRJbml0aWFsVmlldygpfX0sbW91bnRlZDpmdW5jdGlvbigpe3RoaXMuaW5pdCgpfX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLGkscil7dmFyIGEsbz1lPWV8fHt9LHM9dHlwZW9mIGUuZGVmYXVsdDtcIm9iamVjdFwiIT09cyYmXCJmdW5jdGlvblwiIT09c3x8KGE9ZSxvPWUuZGVmYXVsdCk7dmFyIGw9XCJmdW5jdGlvblwiPT10eXBlb2Ygbz9vLm9wdGlvbnM6bzt0JiYobC5yZW5kZXI9dC5yZW5kZXIsbC5zdGF0aWNSZW5kZXJGbnM9dC5zdGF0aWNSZW5kZXJGbnMpLGkmJihsLl9zY29wZUlkPWkpO3ZhciB1O2lmKHI/KHU9ZnVuY3Rpb24oZSl7ZT1lfHx0aGlzLiR2bm9kZSYmdGhpcy4kdm5vZGUuc3NyQ29udGV4dHx8dGhpcy5wYXJlbnQmJnRoaXMucGFyZW50LiR2bm9kZSYmdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQsZXx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX198fChlPV9fVlVFX1NTUl9DT05URVhUX18pLG4mJm4uY2FsbCh0aGlzLGUpLGUmJmUuX3JlZ2lzdGVyZWRDb21wb25lbnRzJiZlLl9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQocil9LGwuX3NzclJlZ2lzdGVyPXUpOm4mJih1PW4pLHUpe3ZhciBjPWwuZnVuY3Rpb25hbCxkPWM/bC5yZW5kZXI6bC5iZWZvcmVDcmVhdGU7Yz9sLnJlbmRlcj1mdW5jdGlvbihlLHQpe3JldHVybiB1LmNhbGwodCksZChlLHQpfTpsLmJlZm9yZUNyZWF0ZT1kP1tdLmNvbmNhdChkLHUpOlt1XX1yZXR1cm57ZXNNb2R1bGU6YSxleHBvcnRzOm8sb3B0aW9uczpsfX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxuPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIG4oXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJ2ZHAtZGF0ZXBpY2tlclwiLGNsYXNzOltlLndyYXBwZXJDbGFzcyxlLmlzUnRsP1wicnRsXCI6XCJcIl19LFtuKFwiZGl2XCIse2NsYXNzOntcImlucHV0LWdyb3VwXCI6ZS5ib290c3RyYXBTdHlsaW5nfX0sW2UuY2FsZW5kYXJCdXR0b24/bihcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJ2ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXItYnV0dG9uXCIsY2xhc3M6e1wiaW5wdXQtZ3JvdXAtYWRkb25cIjplLmJvb3RzdHJhcFN0eWxpbmd9LHN0eWxlOntcImN1cnNvcjpub3QtYWxsb3dlZDtcIjplLmRpc2FibGVkUGlja2VyfSxvbjp7Y2xpY2s6ZS5zaG93Q2FsZW5kYXJ9fSxbbihcImlcIix7Y2xhc3M6ZS5jYWxlbmRhckJ1dHRvbkljb259LFtlLl92KFwiXFxuICAgICAgICBcIitlLl9zKGUuY2FsZW5kYXJCdXR0b25JY29uQ29udGVudCkrXCJcXG4gICAgICAgIFwiKSxlLmNhbGVuZGFyQnV0dG9uSWNvbj9lLl9lKCk6bihcInNwYW5cIixbZS5fdihcIuKAplwiKV0pXSldKTplLl9lKCksZS5fdihcIiBcIiksbihcImlucHV0XCIse3JlZjplLnJlZk5hbWUsY2xhc3M6W2UuaW5wdXRDbGFzcyx7XCJmb3JtLWNvbnRyb2xcIjplLmJvb3RzdHJhcFN0eWxpbmd9XSxhdHRyczp7dHlwZTplLmlubGluZT9cImhpZGRlblwiOlwidGV4dFwiLG5hbWU6ZS5uYW1lLGlkOmUuaWQsXCJvcGVuLWRhdGVcIjplLm9wZW5EYXRlLHBsYWNlaG9sZGVyOmUucGxhY2Vob2xkZXIsXCJjbGVhci1idXR0b25cIjplLmNsZWFyQnV0dG9uLGRpc2FibGVkOmUuZGlzYWJsZWRQaWNrZXIscmVxdWlyZWQ6ZS5yZXF1aXJlZCxyZWFkb25seTpcIlwifSxkb21Qcm9wczp7dmFsdWU6ZS5mb3JtYXR0ZWRWYWx1ZX0sb246e2NsaWNrOmUuc2hvd0NhbGVuZGFyfX0pLGUuX3YoXCIgXCIpLGUuY2xlYXJCdXR0b24mJmUuc2VsZWN0ZWREYXRlP24oXCJzcGFuXCIse3N0YXRpY0NsYXNzOlwidmRwLWRhdGVwaWNrZXJfX2NsZWFyLWJ1dHRvblwiLGNsYXNzOntcImlucHV0LWdyb3VwLWFkZG9uXCI6ZS5ib290c3RyYXBTdHlsaW5nfSxvbjp7Y2xpY2s6ZnVuY3Rpb24odCl7ZS5jbGVhckRhdGUoKX19fSxbbihcImlcIix7Y2xhc3M6ZS5jbGVhckJ1dHRvbkljb259LFtlLmNsZWFyQnV0dG9uSWNvbj9lLl9lKCk6bihcInNwYW5cIixbZS5fdihcIsOXXCIpXSldKV0pOmUuX2UoKV0pLGUuX3YoXCIgXCIpLGUuYWxsb3dlZFRvU2hvd1ZpZXcoXCJkYXlcIik/W24oXCJkaXZcIix7ZGlyZWN0aXZlczpbe25hbWU6XCJzaG93XCIscmF3TmFtZTpcInYtc2hvd1wiLHZhbHVlOmUuc2hvd0RheVZpZXcsZXhwcmVzc2lvbjpcInNob3dEYXlWaWV3XCJ9XSxjbGFzczpbZS5jYWxlbmRhckNsYXNzLFwidmRwLWRhdGVwaWNrZXJfX2NhbGVuZGFyXCJdLHN0eWxlOmUuY2FsZW5kYXJTdHlsZX0sW24oXCJoZWFkZXJcIixbbihcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJwcmV2XCIsY2xhc3M6e2Rpc2FibGVkOmUuaXNSdGw/ZS5uZXh0TW9udGhEaXNhYmxlZChlLnBhZ2VUaW1lc3RhbXApOmUucHJldmlvdXNNb250aERpc2FibGVkKGUucGFnZVRpbWVzdGFtcCl9LG9uOntjbGljazpmdW5jdGlvbih0KXtlLmlzUnRsP2UubmV4dE1vbnRoKCk6ZS5wcmV2aW91c01vbnRoKCl9fX0sW2UuX3YoXCI8XCIpXSksZS5fdihcIiBcIiksbihcInNwYW5cIix7Y2xhc3M6ZS5hbGxvd2VkVG9TaG93VmlldyhcIm1vbnRoXCIpP1widXBcIjpcIlwiLG9uOntjbGljazplLnNob3dNb250aENhbGVuZGFyfX0sW2UuX3YoZS5fcyhlLmlzWW1kP2UuY3VyclllYXI6ZS5jdXJyTW9udGhOYW1lKStcIiBcIitlLl9zKGUuaXNZbWQ/ZS5jdXJyTW9udGhOYW1lOmUuY3VyclllYXIpKV0pLGUuX3YoXCIgXCIpLG4oXCJzcGFuXCIse3N0YXRpY0NsYXNzOlwibmV4dFwiLGNsYXNzOntkaXNhYmxlZDplLmlzUnRsP2UucHJldmlvdXNNb250aERpc2FibGVkKGUucGFnZVRpbWVzdGFtcCk6ZS5uZXh0TW9udGhEaXNhYmxlZChlLnBhZ2VUaW1lc3RhbXApfSxvbjp7Y2xpY2s6ZnVuY3Rpb24odCl7ZS5pc1J0bD9lLnByZXZpb3VzTW9udGgoKTplLm5leHRNb250aCgpfX19LFtlLl92KFwiPlwiKV0pXSksZS5fdihcIiBcIiksbihcImRpdlwiLHtjbGFzczplLmlzUnRsP1wiZmxleC1ydGxcIjpcIlwifSxbZS5fbChlLmRheXNPZldlZWssZnVuY3Rpb24odCl7cmV0dXJuIG4oXCJzcGFuXCIse2tleTp0LnRpbWVzdGFtcCxzdGF0aWNDbGFzczpcImNlbGwgZGF5LWhlYWRlclwifSxbZS5fdihlLl9zKHQpKV0pfSksZS5fdihcIiBcIiksZS5ibGFua0RheXM+MD9lLl9sKGUuYmxhbmtEYXlzLGZ1bmN0aW9uKGUpe3JldHVybiBuKFwic3BhblwiLHtrZXk6ZS50aW1lc3RhbXAsc3RhdGljQ2xhc3M6XCJjZWxsIGRheSBibGFua1wifSl9KTplLl9lKCksZS5fbChlLmRheXMsZnVuY3Rpb24odCl7cmV0dXJuIG4oXCJzcGFuXCIse2tleTp0LnRpbWVzdGFtcCxzdGF0aWNDbGFzczpcImNlbGwgZGF5XCIsY2xhc3M6ZS5kYXlDbGFzc2VzKHQpLGF0dHJzOntcInRyYWNrLWJ5XCI6XCJ0aW1lc3RhbXBcIn0sb246e2NsaWNrOmZ1bmN0aW9uKG4pe2Uuc2VsZWN0RGF0ZSh0KX19fSxbZS5fdihlLl9zKHQuZGF0ZSkpXSl9KV0sMildKV06ZS5fZSgpLGUuX3YoXCIgXCIpLGUuYWxsb3dlZFRvU2hvd1ZpZXcoXCJtb250aFwiKT9bbihcImRpdlwiLHtkaXJlY3RpdmVzOlt7bmFtZTpcInNob3dcIixyYXdOYW1lOlwidi1zaG93XCIsdmFsdWU6ZS5zaG93TW9udGhWaWV3LGV4cHJlc3Npb246XCJzaG93TW9udGhWaWV3XCJ9XSxjbGFzczpbZS5jYWxlbmRhckNsYXNzLFwidmRwLWRhdGVwaWNrZXJfX2NhbGVuZGFyXCJdLHN0eWxlOmUuY2FsZW5kYXJTdHlsZX0sW24oXCJoZWFkZXJcIixbbihcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJwcmV2XCIsY2xhc3M6e2Rpc2FibGVkOmUucHJldmlvdXNZZWFyRGlzYWJsZWQoZS5wYWdlVGltZXN0YW1wKX0sb246e2NsaWNrOmUucHJldmlvdXNZZWFyfX0sW2UuX3YoXCI8XCIpXSksZS5fdihcIiBcIiksbihcInNwYW5cIix7Y2xhc3M6ZS5hbGxvd2VkVG9TaG93VmlldyhcInllYXJcIik/XCJ1cFwiOlwiXCIsb246e2NsaWNrOmUuc2hvd1llYXJDYWxlbmRhcn19LFtlLl92KGUuX3MoZS5nZXRQYWdlWWVhcigpKSldKSxlLl92KFwiIFwiKSxuKFwic3BhblwiLHtzdGF0aWNDbGFzczpcIm5leHRcIixjbGFzczp7ZGlzYWJsZWQ6ZS5uZXh0WWVhckRpc2FibGVkKGUucGFnZVRpbWVzdGFtcCl9LG9uOntjbGljazplLm5leHRZZWFyfX0sW2UuX3YoXCI+XCIpXSldKSxlLl92KFwiIFwiKSxlLl9sKGUubW9udGhzLGZ1bmN0aW9uKHQpe3JldHVybiBuKFwic3BhblwiLHtrZXk6dC50aW1lc3RhbXAsc3RhdGljQ2xhc3M6XCJjZWxsIG1vbnRoXCIsY2xhc3M6e3NlbGVjdGVkOnQuaXNTZWxlY3RlZCxkaXNhYmxlZDp0LmlzRGlzYWJsZWR9LGF0dHJzOntcInRyYWNrLWJ5XCI6XCJ0aW1lc3RhbXBcIn0sb246e2NsaWNrOmZ1bmN0aW9uKG4pe24uc3RvcFByb3BhZ2F0aW9uKCksZS5zZWxlY3RNb250aCh0KX19fSxbZS5fdihlLl9zKHQubW9udGgpKV0pfSldLDIpXTplLl9lKCksZS5fdihcIiBcIiksZS5hbGxvd2VkVG9TaG93VmlldyhcInllYXJcIik/W24oXCJkaXZcIix7ZGlyZWN0aXZlczpbe25hbWU6XCJzaG93XCIscmF3TmFtZTpcInYtc2hvd1wiLHZhbHVlOmUuc2hvd1llYXJWaWV3LGV4cHJlc3Npb246XCJzaG93WWVhclZpZXdcIn1dLGNsYXNzOltlLmNhbGVuZGFyQ2xhc3MsXCJ2ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXJcIl0sc3R5bGU6ZS5jYWxlbmRhclN0eWxlfSxbbihcImhlYWRlclwiLFtuKFwic3BhblwiLHtzdGF0aWNDbGFzczpcInByZXZcIixjbGFzczp7ZGlzYWJsZWQ6ZS5wcmV2aW91c0RlY2FkZURpc2FibGVkKGUucGFnZVRpbWVzdGFtcCl9LG9uOntjbGljazplLnByZXZpb3VzRGVjYWRlfX0sW2UuX3YoXCI8XCIpXSksZS5fdihcIiBcIiksbihcInNwYW5cIixbZS5fdihlLl9zKGUuZ2V0UGFnZURlY2FkZSgpKSldKSxlLl92KFwiIFwiKSxuKFwic3BhblwiLHtzdGF0aWNDbGFzczpcIm5leHRcIixjbGFzczp7ZGlzYWJsZWQ6ZS5uZXh0TW9udGhEaXNhYmxlZChlLnBhZ2VUaW1lc3RhbXApfSxvbjp7Y2xpY2s6ZS5uZXh0RGVjYWRlfX0sW2UuX3YoXCI+XCIpXSldKSxlLl92KFwiIFwiKSxlLl9sKGUueWVhcnMsZnVuY3Rpb24odCl7cmV0dXJuIG4oXCJzcGFuXCIse2tleTp0LnRpbWVzdGFtcCxzdGF0aWNDbGFzczpcImNlbGwgeWVhclwiLGNsYXNzOntzZWxlY3RlZDp0LmlzU2VsZWN0ZWQsZGlzYWJsZWQ6dC5pc0Rpc2FibGVkfSxhdHRyczp7XCJ0cmFjay1ieVwiOlwidGltZXN0YW1wXCJ9LG9uOntjbGljazpmdW5jdGlvbihuKXtuLnN0b3BQcm9wYWdhdGlvbigpLGUuc2VsZWN0WWVhcih0KX19fSxbZS5fdihlLl9zKHQueWVhcikpXSl9KV0sMildOmUuX2UoKV0sMil9LHN0YXRpY1JlbmRlckZuczpbXX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDc0KTtcInN0cmluZ1wiPT10eXBlb2YgaSYmKGk9W1tlLmksaSxcIlwiXV0pLGkubG9jYWxzJiYoZS5leHBvcnRzPWkubG9jYWxzKTtuKDc3KShcIjdkYTYyYWQ0XCIsaSwhMCl9LGZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjt2YXIgaT1uKDQ0KSxyPW4ubihpKSxhPW4oMjYpO3QuYT17aXNWYWxpZERhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuXCJbb2JqZWN0IERhdGVdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkmJiFpc05hTihlLmdldFRpbWUoKSl9LGdldERheU5hbWVBYmJyOmZ1bmN0aW9uKGUsdCl7aWYoXCJvYmplY3RcIiE9PSh2b2lkIDA9PT1lP1widW5kZWZpbmVkXCI6cigpKGUpKSl0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIFR5cGVcIik7cmV0dXJuIHRbZS5nZXREYXkoKV19LGdldE1vbnRoTmFtZTpmdW5jdGlvbihlLHQpe2lmKCF0KXRocm93IEVycm9yKFwibWlzc2luZyAybmQgcGFyYW1ldGVyIE1vbnRocyBhcnJheVwiKTtpZihcIm9iamVjdFwiPT09KHZvaWQgMD09PWU/XCJ1bmRlZmluZWRcIjpyKCkoZSkpKXJldHVybiB0W2UuZ2V0TW9udGgoKV07aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpcmV0dXJuIHRbZV07dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCB0eXBlXCIpfSxnZXRNb250aE5hbWVBYmJyOmZ1bmN0aW9uKGUsdCl7aWYoIXQpdGhyb3cgRXJyb3IoXCJtaXNzaW5nIDJuZCBwYXJhbXRlciBNb250aHMgYXJyYXlcIik7aWYoXCJvYmplY3RcIj09PSh2b2lkIDA9PT1lP1widW5kZWZpbmVkXCI6cigpKGUpKSlyZXR1cm4gdFtlLmdldE1vbnRoKCldO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXJldHVybiB0W2VdO3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgdHlwZVwiKX0sZGF5c0luTW9udGg6ZnVuY3Rpb24oZSx0KXtyZXR1cm4vOHwzfDV8MTAvLnRlc3QodCk/MzA6MT09PXQ/KGUlNHx8IShlJTEwMCkpJiZlJTQwMD8yODoyOTozMX0sZ2V0TnRoU3VmZml4OmZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIDE6Y2FzZSAyMTpjYXNlIDMxOnJldHVyblwic3RcIjtjYXNlIDI6Y2FzZSAyMjpyZXR1cm5cIm5kXCI7Y2FzZSAzOmNhc2UgMjM6cmV0dXJuXCJyZFwiO2RlZmF1bHQ6cmV0dXJuXCJ0aFwifX0sZm9ybWF0RGF0ZTpmdW5jdGlvbihlLHQsbil7bj1ufHxhLmEudHJhbnNsYXRpb25zLmVuO3ZhciBpPWUuZ2V0RnVsbFllYXIoKSxyPWUuZ2V0TW9udGgoKSsxLG89ZS5nZXREYXRlKCk7cmV0dXJuIHQucmVwbGFjZSgvZGQvLChcIjBcIitvKS5zbGljZSgtMikpLnJlcGxhY2UoL2QvLG8pLnJlcGxhY2UoL3l5eXkvLGkpLnJlcGxhY2UoL3l5LyxTdHJpbmcoaSkuc2xpY2UoMikpLnJlcGxhY2UoL01NTU0vLHRoaXMuZ2V0TW9udGhOYW1lKGUuZ2V0TW9udGgoKSxuLm1vbnRocy5vcmlnaW5hbCkpLnJlcGxhY2UoL01NTS8sdGhpcy5nZXRNb250aE5hbWVBYmJyKGUuZ2V0TW9udGgoKSxuLm1vbnRocy5hYmJyKSkucmVwbGFjZSgvTU0vLChcIjBcIityKS5zbGljZSgtMikpLnJlcGxhY2UoL00oPyFhfMOkfGUpLyxyKS5yZXBsYWNlKC9zdS8sdGhpcy5nZXROdGhTdWZmaXgoZS5nZXREYXRlKCkpKS5yZXBsYWNlKC9EKD8hZXzDqXxpKS8sdGhpcy5nZXREYXlOYW1lQWJicihlLG4uZGF5cykpfSxjcmVhdGVEYXRlQXJyYXk6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W107ZTw9dDspbi5wdXNoKG5ldyBEYXRlKGUpKSxlPW5ldyBEYXRlKGUpLnNldERhdGUobmV3IERhdGUoZSkuZ2V0RGF0ZSgpKzEpO3JldHVybiBufX19LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9e2RlZmF1bHQ6big0NSksX19lc01vZHVsZTohMH19LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9e2RlZmF1bHQ6big0NiksX19lc01vZHVsZTohMH19LGZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBpKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10Ll9fZXNNb2R1bGU9ITA7dmFyIHI9big0MyksYT1pKHIpLG89big0Mikscz1pKG8pLGw9XCJmdW5jdGlvblwiPT10eXBlb2Ygcy5kZWZhdWx0JiZcInN5bWJvbFwiPT10eXBlb2YgYS5kZWZhdWx0P2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHMuZGVmYXVsdCYmZS5jb25zdHJ1Y3Rvcj09PXMuZGVmYXVsdCYmZSE9PXMuZGVmYXVsdC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX07dC5kZWZhdWx0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHMuZGVmYXVsdCYmXCJzeW1ib2xcIj09PWwoYS5kZWZhdWx0KT9mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZT9cInVuZGVmaW5lZFwiOmwoZSl9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBzLmRlZmF1bHQmJmUuY29uc3RydWN0b3I9PT1zLmRlZmF1bHQmJmUhPT1zLmRlZmF1bHQucHJvdG90eXBlP1wic3ltYm9sXCI6dm9pZCAwPT09ZT9cInVuZGVmaW5lZFwiOmwoZSl9fSxmdW5jdGlvbihlLHQsbil7big3MCksbig2OCksbig3MSksbig3MiksZS5leHBvcnRzPW4oMTMpLlN5bWJvbH0sZnVuY3Rpb24oZSx0LG4pe24oNjkpLG4oNzMpLGUuZXhwb3J0cz1uKDI1KS5mKFwiaXRlcmF0b3JcIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgVHlwZUVycm9yKGUrXCIgaXMgbm90IGEgZnVuY3Rpb24hXCIpO3JldHVybiBlfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSxmdW5jdGlvbihlLHQsbil7dmFyIGk9bigyKSxyPW4oNjUpLGE9big2NCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4sbyl7dmFyIHMsbD1pKHQpLHU9cihsLmxlbmd0aCksYz1hKG8sdSk7aWYoZSYmbiE9bil7Zm9yKDt1PmM7KWlmKChzPWxbYysrXSkhPXMpcmV0dXJuITB9ZWxzZSBmb3IoO3U+YztjKyspaWYoKGV8fGMgaW4gbCkmJmxbY109PT1uKXJldHVybiBlfHxjfHwwO3JldHVybiFlJiYtMX19fSxmdW5jdGlvbihlLHQsbil7dmFyIGk9big0Nyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtpZihpKGUpLHZvaWQgMD09PXQpcmV0dXJuIGU7c3dpdGNoKG4pe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGUuY2FsbCh0LG4pfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKG4saSl7cmV0dXJuIGUuY2FsbCh0LG4saSl9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24obixpLHIpe3JldHVybiBlLmNhbGwodCxuLGkscil9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19fSxmdW5jdGlvbihlLHQsbil7dmFyIGk9bigxMCkscj1uKDM0KSxhPW4oMTgpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1pKGUpLG49ci5mO2lmKG4pZm9yKHZhciBvLHM9bihlKSxsPWEuZix1PTA7cy5sZW5ndGg+dTspbC5jYWxsKGUsbz1zW3UrK10pJiZ0LnB1c2gobyk7cmV0dXJuIHR9fSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oMCkuZG9jdW1lbnQmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudH0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oMjcpO2UuZXhwb3J0cz1PYmplY3QoXCJ6XCIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApP09iamVjdDpmdW5jdGlvbihlKXtyZXR1cm5cIlN0cmluZ1wiPT1pKGUpP2Uuc3BsaXQoXCJcIik6T2JqZWN0KGUpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oMjcpO2UuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm5cIkFycmF5XCI9PWkoZSl9fSxmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9bigzMikscj1uKDExKSxhPW4oMTkpLG89e307big0KShvLG4oNikoXCJpdGVyYXRvclwiKSxmdW5jdGlvbigpe3JldHVybiB0aGlzfSksZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtlLnByb3RvdHlwZT1pKG8se25leHQ6cigxLG4pfSksYShlLHQrXCIgSXRlcmF0b3JcIil9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybnt2YWx1ZTp0LGRvbmU6ISFlfX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDEwKSxyPW4oMik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLGE9cihlKSxvPWkoYSkscz1vLmxlbmd0aCxsPTA7cz5sOylpZihhW249b1tsKytdXT09PXQpcmV0dXJuIG59fSxmdW5jdGlvbihlLHQsbil7dmFyIGk9bigxMikoXCJtZXRhXCIpLHI9big5KSxhPW4oMSksbz1uKDUpLmYscz0wLGw9T2JqZWN0LmlzRXh0ZW5zaWJsZXx8ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdT0hbig4KShmdW5jdGlvbigpe3JldHVybiBsKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpfSksYz1mdW5jdGlvbihlKXtvKGUsaSx7dmFsdWU6e2k6XCJPXCIrICsrcyx3Ont9fX0pfSxkPWZ1bmN0aW9uKGUsdCl7aWYoIXIoZSkpcmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIGU/ZTooXCJzdHJpbmdcIj09dHlwZW9mIGU/XCJTXCI6XCJQXCIpK2U7aWYoIWEoZSxpKSl7aWYoIWwoZSkpcmV0dXJuXCJGXCI7aWYoIXQpcmV0dXJuXCJFXCI7YyhlKX1yZXR1cm4gZVtpXS5pfSxoPWZ1bmN0aW9uKGUsdCl7aWYoIWEoZSxpKSl7aWYoIWwoZSkpcmV0dXJuITA7aWYoIXQpcmV0dXJuITE7YyhlKX1yZXR1cm4gZVtpXS53fSxwPWZ1bmN0aW9uKGUpe3JldHVybiB1JiZmLk5FRUQmJmwoZSkmJiFhKGUsaSkmJmMoZSksZX0sZj1lLmV4cG9ydHM9e0tFWTppLE5FRUQ6ITEsZmFzdEtleTpkLGdldFdlYWs6aCxvbkZyZWV6ZTpwfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oNSkscj1uKDcpLGE9bigxMCk7ZS5leHBvcnRzPW4oMyk/T2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24oZSx0KXtyKGUpO2Zvcih2YXIgbixvPWEodCkscz1vLmxlbmd0aCxsPTA7cz5sOylpLmYoZSxuPW9bbCsrXSx0W25dKTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDE4KSxyPW4oMTEpLGE9bigyKSxvPW4oMjMpLHM9bigxKSxsPW4oMzApLHU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjt0LmY9bigzKT91OmZ1bmN0aW9uKGUsdCl7aWYoZT1hKGUpLHQ9byh0LCEwKSxsKXRyeXtyZXR1cm4gdShlLHQpfWNhdGNoKGUpe31pZihzKGUsdCkpcmV0dXJuIHIoIWkuZi5jYWxsKGUsdCksZVt0XSl9fSxmdW5jdGlvbihlLHQsbil7dmFyIGk9bigyKSxyPW4oMzMpLmYsYT17fS50b1N0cmluZyxvPVwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXSxzPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gcihlKX1jYXRjaChlKXtyZXR1cm4gby5zbGljZSgpfX07ZS5leHBvcnRzLmY9ZnVuY3Rpb24oZSl7cmV0dXJuIG8mJlwiW29iamVjdCBXaW5kb3ddXCI9PWEuY2FsbChlKT9zKGUpOnIoaShlKSl9fSxmdW5jdGlvbihlLHQsbil7dmFyIGk9bigxKSxyPW4oNjYpLGE9bigyMCkoXCJJRV9QUk9UT1wiKSxvPU9iamVjdC5wcm90b3R5cGU7ZS5leHBvcnRzPU9iamVjdC5nZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGU9cihlKSxpKGUsYSk/ZVthXTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yJiZlIGluc3RhbmNlb2YgZS5jb25zdHJ1Y3Rvcj9lLmNvbnN0cnVjdG9yLnByb3RvdHlwZTplIGluc3RhbmNlb2YgT2JqZWN0P286bnVsbH19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDIyKSxyPW4oMTQpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXt2YXIgYSxvLHM9U3RyaW5nKHIodCkpLGw9aShuKSx1PXMubGVuZ3RoO3JldHVybiBsPDB8fGw+PXU/ZT9cIlwiOnZvaWQgMDooYT1zLmNoYXJDb2RlQXQobCksYTw1NTI5Nnx8YT41NjMxOXx8bCsxPT09dXx8KG89cy5jaGFyQ29kZUF0KGwrMSkpPDU2MzIwfHxvPjU3MzQzP2U/cy5jaGFyQXQobCk6YTplP3Muc2xpY2UobCxsKzIpOm8tNTYzMjArKGEtNTUyOTY8PDEwKSs2NTUzNil9fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oMjIpLHI9TWF0aC5tYXgsYT1NYXRoLm1pbjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1pKGUpLGU8MD9yKGUrdCwwKTphKGUsdCl9fSxmdW5jdGlvbihlLHQsbil7dmFyIGk9bigyMikscj1NYXRoLm1pbjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD9yKGkoZSksOTAwNzE5OTI1NDc0MDk5MSk6MH19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDE0KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChpKGUpKX19LGZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjt2YXIgaT1uKDQ4KSxyPW4oNTYpLGE9bigxNiksbz1uKDIpO2UuZXhwb3J0cz1uKDMxKShBcnJheSxcIkFycmF5XCIsZnVuY3Rpb24oZSx0KXt0aGlzLl90PW8oZSksdGhpcy5faT0wLHRoaXMuX2s9dH0sZnVuY3Rpb24oKXt2YXIgZT10aGlzLl90LHQ9dGhpcy5fayxuPXRoaXMuX2krKztyZXR1cm4hZXx8bj49ZS5sZW5ndGg/KHRoaXMuX3Q9dm9pZCAwLHIoMSkpOlwia2V5c1wiPT10P3IoMCxuKTpcInZhbHVlc1wiPT10P3IoMCxlW25dKTpyKDAsW24sZVtuXV0pfSxcInZhbHVlc1wiKSxhLkFyZ3VtZW50cz1hLkFycmF5LGkoXCJrZXlzXCIpLGkoXCJ2YWx1ZXNcIiksaShcImVudHJpZXNcIil9LGZ1bmN0aW9uKGUsdCl7fSxmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9big2MykoITApO24oMzEpKFN0cmluZyxcIlN0cmluZ1wiLGZ1bmN0aW9uKGUpe3RoaXMuX3Q9U3RyaW5nKGUpLHRoaXMuX2k9MH0sZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMuX3Qsbj10aGlzLl9pO3JldHVybiBuPj10Lmxlbmd0aD97dmFsdWU6dm9pZCAwLGRvbmU6ITB9OihlPWkodCxuKSx0aGlzLl9pKz1lLmxlbmd0aCx7dmFsdWU6ZSxkb25lOiExfSl9KX0sZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO3ZhciBpPW4oMCkscj1uKDEpLGE9bigzKSxvPW4oMjkpLHM9bigzNiksbD1uKDU4KS5LRVksdT1uKDgpLGM9bigyMSksZD1uKDE5KSxoPW4oMTIpLHA9big2KSxmPW4oMjUpLGc9bigyNCksYj1uKDU3KSxtPW4oNTEpLHY9big1NCkseT1uKDcpLEQ9bigyKSxNPW4oMjMpLFM9bigxMSksdz1uKDMyKSxfPW4oNjEpLGs9big2MCkseD1uKDUpLE89bigxMCksSj1rLmYsRj14LmYsQT1fLmYsaj1pLlN5bWJvbCxUPWkuSlNPTixOPVQmJlQuc3RyaW5naWZ5LFk9cChcIl9oaWRkZW5cIiksQz1wKFwidG9QcmltaXRpdmVcIiksUD17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxWPWMoXCJzeW1ib2wtcmVnaXN0cnlcIiksRT1jKFwic3ltYm9sc1wiKSxJPWMoXCJvcC1zeW1ib2xzXCIpLEw9T2JqZWN0LnByb3RvdHlwZSx6PVwiZnVuY3Rpb25cIj09dHlwZW9mIGosQj1pLlFPYmplY3QsUj0hQnx8IUIucHJvdG90eXBlfHwhQi5wcm90b3R5cGUuZmluZENoaWxkLEg9YSYmdShmdW5jdGlvbigpe3JldHVybiA3IT13KEYoe30sXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBGKHRoaXMsXCJhXCIse3ZhbHVlOjd9KS5hfX0pKS5hfSk/ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPUooTCx0KTtpJiZkZWxldGUgTFt0XSxGKGUsdCxuKSxpJiZlIT09TCYmRihMLHQsaSl9OkYsRz1mdW5jdGlvbihlKXt2YXIgdD1FW2VdPXcoai5wcm90b3R5cGUpO3JldHVybiB0Ll9rPWUsdH0sJD16JiZcInN5bWJvbFwiPT10eXBlb2Ygai5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBqfSxVPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT09PUwmJlUoSSx0LG4pLHkoZSksdD1NKHQsITApLHkobikscihFLHQpPyhuLmVudW1lcmFibGU/KHIoZSxZKSYmZVtZXVt0XSYmKGVbWV1bdF09ITEpLG49dyhuLHtlbnVtZXJhYmxlOlMoMCwhMSl9KSk6KHIoZSxZKXx8RihlLFksUygxLHt9KSksZVtZXVt0XT0hMCksSChlLHQsbikpOkYoZSx0LG4pfSxLPWZ1bmN0aW9uKGUsdCl7eShlKTtmb3IodmFyIG4saT1tKHQ9RCh0KSkscj0wLGE9aS5sZW5ndGg7YT5yOylVKGUsbj1pW3IrK10sdFtuXSk7cmV0dXJuIGV9LFc9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dD93KGUpOksodyhlKSx0KX0scT1mdW5jdGlvbihlKXt2YXIgdD1QLmNhbGwodGhpcyxlPU0oZSwhMCkpO3JldHVybiEodGhpcz09PUwmJnIoRSxlKSYmIXIoSSxlKSkmJighKHR8fCFyKHRoaXMsZSl8fCFyKEUsZSl8fHIodGhpcyxZKSYmdGhpc1tZXVtlXSl8fHQpfSxYPWZ1bmN0aW9uKGUsdCl7aWYoZT1EKGUpLHQ9TSh0LCEwKSxlIT09THx8IXIoRSx0KXx8cihJLHQpKXt2YXIgbj1KKGUsdCk7cmV0dXJuIW58fCFyKEUsdCl8fHIoZSxZKSYmZVtZXVt0XXx8KG4uZW51bWVyYWJsZT0hMCksbn19LFE9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49QShEKGUpKSxpPVtdLGE9MDtuLmxlbmd0aD5hOylyKEUsdD1uW2ErK10pfHx0PT1ZfHx0PT1sfHxpLnB1c2godCk7cmV0dXJuIGl9LFo9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49ZT09PUwsaT1BKG4/STpEKGUpKSxhPVtdLG89MDtpLmxlbmd0aD5vOykhcihFLHQ9aVtvKytdKXx8biYmIXIoTCx0KXx8YS5wdXNoKEVbdF0pO3JldHVybiBhfTt6fHwoaj1mdW5jdGlvbigpe2lmKHRoaXMgaW5zdGFuY2VvZiBqKXRocm93IFR5cGVFcnJvcihcIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciFcIik7dmFyIGU9aChhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCksdD1mdW5jdGlvbihuKXt0aGlzPT09TCYmdC5jYWxsKEksbikscih0aGlzLFkpJiZyKHRoaXNbWV0sZSkmJih0aGlzW1ldW2VdPSExKSxIKHRoaXMsZSxTKDEsbikpfTtyZXR1cm4gYSYmUiYmSChMLGUse2NvbmZpZ3VyYWJsZTohMCxzZXQ6dH0pLEcoZSl9LHMoai5wcm90b3R5cGUsXCJ0b1N0cmluZ1wiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2t9KSxrLmY9WCx4LmY9VSxuKDMzKS5mPV8uZj1RLG4oMTgpLmY9cSxuKDM0KS5mPVosYSYmIW4oMTcpJiZzKEwsXCJwcm9wZXJ0eUlzRW51bWVyYWJsZVwiLHEsITApLGYuZj1mdW5jdGlvbihlKXtyZXR1cm4gRyhwKGUpKX0pLG8oby5HK28uVytvLkYqIXose1N5bWJvbDpqfSk7Zm9yKHZhciBlZT1cImhhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzXCIuc3BsaXQoXCIsXCIpLHRlPTA7ZWUubGVuZ3RoPnRlOylwKGVlW3RlKytdKTtmb3IodmFyIGVlPU8ocC5zdG9yZSksdGU9MDtlZS5sZW5ndGg+dGU7KWcoZWVbdGUrK10pO28oby5TK28uRioheixcIlN5bWJvbFwiLHtmb3I6ZnVuY3Rpb24oZSl7cmV0dXJuIHIoVixlKz1cIlwiKT9WW2VdOlZbZV09aihlKX0sa2V5Rm9yOmZ1bmN0aW9uKGUpe2lmKCQoZSkpcmV0dXJuIGIoVixlKTt0aHJvdyBUeXBlRXJyb3IoZStcIiBpcyBub3QgYSBzeW1ib2whXCIpfSx1c2VTZXR0ZXI6ZnVuY3Rpb24oKXtSPSEwfSx1c2VTaW1wbGU6ZnVuY3Rpb24oKXtSPSExfX0pLG8oby5TK28uRioheixcIk9iamVjdFwiLHtjcmVhdGU6VyxkZWZpbmVQcm9wZXJ0eTpVLGRlZmluZVByb3BlcnRpZXM6SyxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6WCxnZXRPd25Qcm9wZXJ0eU5hbWVzOlEsZ2V0T3duUHJvcGVydHlTeW1ib2xzOlp9KSxUJiZvKG8uUytvLkYqKCF6fHx1KGZ1bmN0aW9uKCl7dmFyIGU9aigpO3JldHVyblwiW251bGxdXCIhPU4oW2VdKXx8XCJ7fVwiIT1OKHthOmV9KXx8XCJ7fVwiIT1OKE9iamVjdChlKSl9KSksXCJKU09OXCIse3N0cmluZ2lmeTpmdW5jdGlvbihlKXtpZih2b2lkIDAhPT1lJiYhJChlKSl7Zm9yKHZhciB0LG4saT1bZV0scj0xO2FyZ3VtZW50cy5sZW5ndGg+cjspaS5wdXNoKGFyZ3VtZW50c1tyKytdKTtyZXR1cm4gdD1pWzFdLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJihuPXQpLCFuJiZ2KHQpfHwodD1mdW5jdGlvbihlLHQpe2lmKG4mJih0PW4uY2FsbCh0aGlzLGUsdCkpLCEkKHQpKXJldHVybiB0fSksaVsxXT10LE4uYXBwbHkoVCxpKX19fSksai5wcm90b3R5cGVbQ118fG4oNCkoai5wcm90b3R5cGUsQyxqLnByb3RvdHlwZS52YWx1ZU9mKSxkKGosXCJTeW1ib2xcIiksZChNYXRoLFwiTWF0aFwiLCEwKSxkKGkuSlNPTixcIkpTT05cIiwhMCl9LGZ1bmN0aW9uKGUsdCxuKXtuKDI0KShcImFzeW5jSXRlcmF0b3JcIil9LGZ1bmN0aW9uKGUsdCxuKXtuKDI0KShcIm9ic2VydmFibGVcIil9LGZ1bmN0aW9uKGUsdCxuKXtuKDY3KTtmb3IodmFyIGk9bigwKSxyPW4oNCksYT1uKDE2KSxvPW4oNikoXCJ0b1N0cmluZ1RhZ1wiKSxzPVtcIk5vZGVMaXN0XCIsXCJET01Ub2tlbkxpc3RcIixcIk1lZGlhTGlzdFwiLFwiU3R5bGVTaGVldExpc3RcIixcIkNTU1J1bGVMaXN0XCJdLGw9MDtsPDU7bCsrKXt2YXIgdT1zW2xdLGM9aVt1XSxkPWMmJmMucHJvdG90eXBlO2QmJiFkW29dJiZyKGQsbyx1KSxhW3VdPWEuQXJyYXl9fSxmdW5jdGlvbihlLHQsbil7dD1lLmV4cG9ydHM9big3NSkoITEpLHQucHVzaChbZS5pLCcucnRse2RpcmVjdGlvbjpydGx9LnZkcC1kYXRlcGlja2Vye3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246bGVmdH0udmRwLWRhdGVwaWNrZXIgKntib3gtc2l6aW5nOmJvcmRlci1ib3h9LnZkcC1kYXRlcGlja2VyX19jYWxlbmRhcntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDtiYWNrZ3JvdW5kOiNmZmY7d2lkdGg6MzAwcHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjfS52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgaGVhZGVye2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6NDBweH0udmRwLWRhdGVwaWNrZXJfX2NhbGVuZGFyIGhlYWRlciBzcGFue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjcxLjQyODU3MTQyODU3MTQzJTtmbG9hdDpsZWZ0fS52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgaGVhZGVyIC5uZXh0LC52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgaGVhZGVyIC5wcmV2e3dpZHRoOjE0LjI4NTcxNDI4NTcxNDI4NiU7ZmxvYXQ6bGVmdDt0ZXh0LWluZGVudDotMTAwMDBweDtwb3NpdGlvbjpyZWxhdGl2ZX0udmRwLWRhdGVwaWNrZXJfX2NhbGVuZGFyIGhlYWRlciAubmV4dDphZnRlciwudmRwLWRhdGVwaWNrZXJfX2NhbGVuZGFyIGhlYWRlciAucHJldjphZnRlcntjb250ZW50OlwiXCI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo1MCU7dG9wOjUwJTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLTUwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgtNTAlKTtib3JkZXI6NnB4IHNvbGlkIHRyYW5zcGFyZW50fS52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgaGVhZGVyIC5wcmV2OmFmdGVye2JvcmRlci1yaWdodDoxMHB4IHNvbGlkICMwMDA7bWFyZ2luLWxlZnQ6LTVweH0udmRwLWRhdGVwaWNrZXJfX2NhbGVuZGFyIGhlYWRlciAucHJldi5kaXNhYmxlZDphZnRlcntib3JkZXItcmlnaHQ6MTBweCBzb2xpZCAjZGRkfS52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgaGVhZGVyIC5uZXh0OmFmdGVye2JvcmRlci1sZWZ0OjEwcHggc29saWQgIzAwMDttYXJnaW4tbGVmdDo1cHh9LnZkcC1kYXRlcGlja2VyX19jYWxlbmRhciBoZWFkZXIgLm5leHQuZGlzYWJsZWQ6YWZ0ZXJ7Ym9yZGVyLWxlZnQ6MTBweCBzb2xpZCAjZGRkfS52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgaGVhZGVyIC5uZXh0Om5vdCguZGlzYWJsZWQpLC52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgaGVhZGVyIC5wcmV2Om5vdCguZGlzYWJsZWQpLC52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgaGVhZGVyIC51cDpub3QoLmRpc2FibGVkKXtjdXJzb3I6cG9pbnRlcn0udmRwLWRhdGVwaWNrZXJfX2NhbGVuZGFyIGhlYWRlciAubmV4dDpub3QoLmRpc2FibGVkKTpob3ZlciwudmRwLWRhdGVwaWNrZXJfX2NhbGVuZGFyIGhlYWRlciAucHJldjpub3QoLmRpc2FibGVkKTpob3ZlciwudmRwLWRhdGVwaWNrZXJfX2NhbGVuZGFyIGhlYWRlciAudXA6bm90KC5kaXNhYmxlZCk6aG92ZXJ7YmFja2dyb3VuZDojZWVlfS52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgLmRpc2FibGVke2NvbG9yOiNkZGQ7Y3Vyc29yOmRlZmF1bHR9LnZkcC1kYXRlcGlja2VyX19jYWxlbmRhciAuZmxleC1ydGx7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDt3aWR0aDppbmhlcml0Oy1tcy1mbGV4LXdyYXA6d3JhcDtmbGV4LXdyYXA6d3JhcH0udmRwLWRhdGVwaWNrZXJfX2NhbGVuZGFyIC5jZWxse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCA1cHg7d2lkdGg6MTQuMjg1NzE0Mjg1NzE0Mjg2JTtoZWlnaHQ6NDBweDtsaW5lLWhlaWdodDo0MHB4O3RleHQtYWxpZ246Y2VudGVyO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50fS52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgLmNlbGw6bm90KC5ibGFuayk6bm90KC5kaXNhYmxlZCkuZGF5LC52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgLmNlbGw6bm90KC5ibGFuayk6bm90KC5kaXNhYmxlZCkubW9udGgsLnZkcC1kYXRlcGlja2VyX19jYWxlbmRhciAuY2VsbDpub3QoLmJsYW5rKTpub3QoLmRpc2FibGVkKS55ZWFye2N1cnNvcjpwb2ludGVyfS52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgLmNlbGw6bm90KC5ibGFuayk6bm90KC5kaXNhYmxlZCkuZGF5OmhvdmVyLC52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgLmNlbGw6bm90KC5ibGFuayk6bm90KC5kaXNhYmxlZCkubW9udGg6aG92ZXIsLnZkcC1kYXRlcGlja2VyX19jYWxlbmRhciAuY2VsbDpub3QoLmJsYW5rKTpub3QoLmRpc2FibGVkKS55ZWFyOmhvdmVye2JvcmRlcjoxcHggc29saWQgIzRiZH0udmRwLWRhdGVwaWNrZXJfX2NhbGVuZGFyIC5jZWxsLnNlbGVjdGVkLC52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgLmNlbGwuc2VsZWN0ZWQuaGlnaGxpZ2h0ZWQsLnZkcC1kYXRlcGlja2VyX19jYWxlbmRhciAuY2VsbC5zZWxlY3RlZDpob3ZlcntiYWNrZ3JvdW5kOiM0YmR9LnZkcC1kYXRlcGlja2VyX19jYWxlbmRhciAuY2VsbC5oaWdobGlnaHRlZHtiYWNrZ3JvdW5kOiNjYWU1ZWR9LnZkcC1kYXRlcGlja2VyX19jYWxlbmRhciAuY2VsbC5oaWdobGlnaHRlZC5kaXNhYmxlZHtjb2xvcjojYTNhM2EzfS52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgLmNlbGwuZ3JleXtjb2xvcjojODg4fS52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgLmNlbGwuZ3JleTpob3ZlcntiYWNrZ3JvdW5kOmluaGVyaXR9LnZkcC1kYXRlcGlja2VyX19jYWxlbmRhciAuY2VsbC5kYXktaGVhZGVye2ZvbnQtc2l6ZTo3NSU7d2hpdGUtc3BhY2U6bm8td3JhcDtjdXJzb3I6aW5oZXJpdH0udmRwLWRhdGVwaWNrZXJfX2NhbGVuZGFyIC5jZWxsLmRheS1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDppbmhlcml0fS52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgLm1vbnRoLC52ZHAtZGF0ZXBpY2tlcl9fY2FsZW5kYXIgLnllYXJ7d2lkdGg6MzMuMzMzJX0udmRwLWRhdGVwaWNrZXJfX2NhbGVuZGFyLWJ1dHRvbiwudmRwLWRhdGVwaWNrZXJfX2NsZWFyLWJ1dHRvbntjdXJzb3I6cG9pbnRlcjtmb250LXN0eWxlOm5vcm1hbH0udmRwLWRhdGVwaWNrZXJfX2NhbGVuZGFyLWJ1dHRvbi5kaXNhYmxlZCwudmRwLWRhdGVwaWNrZXJfX2NsZWFyLWJ1dHRvbi5kaXNhYmxlZHtjb2xvcjojOTk5O2N1cnNvcjpkZWZhdWx0fScsXCJcIl0pfSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0KXt2YXIgbj1lWzFdfHxcIlwiLHI9ZVszXTtpZighcilyZXR1cm4gbjtpZih0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBidG9hKXt2YXIgYT1pKHIpO3JldHVybltuXS5jb25jYXQoci5zb3VyY2VzLm1hcChmdW5jdGlvbihlKXtyZXR1cm5cIi8qIyBzb3VyY2VVUkw9XCIrci5zb3VyY2VSb290K2UrXCIgKi9cIn0pKS5jb25jYXQoW2FdKS5qb2luKFwiXFxuXCIpfXJldHVybltuXS5qb2luKFwiXFxuXCIpfWZ1bmN0aW9uIGkoZSl7cmV0dXJuXCIvKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIrYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoZSkpKSkrXCIgKi9cIn1lLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24odCl7dmFyIGk9bih0LGUpO3JldHVybiB0WzJdP1wiQG1lZGlhIFwiK3RbMl0rXCJ7XCIraStcIn1cIjppfSkuam9pbihcIlwiKX0sdC5pPWZ1bmN0aW9uKGUsbil7XCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPVtbbnVsbCxlLFwiXCJdXSk7Zm9yKHZhciBpPXt9LHI9MDtyPHRoaXMubGVuZ3RoO3IrKyl7dmFyIGE9dGhpc1tyXVswXTtcIm51bWJlclwiPT10eXBlb2YgYSYmKGlbYV09ITApfWZvcihyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBvPWVbcl07XCJudW1iZXJcIj09dHlwZW9mIG9bMF0mJmlbb1swXV18fChuJiYhb1syXT9vWzJdPW46biYmKG9bMl09XCIoXCIrb1syXStcIikgYW5kIChcIituK1wiKVwiKSx0LnB1c2gobykpfX0sdH19LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiBpKGUpe24oNDApfXZhciByPW4oMzgpKG4oMzcpLG4oMzkpLGksbnVsbCxudWxsKTtlLmV4cG9ydHM9ci5leHBvcnRzfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gaShlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIG49ZVt0XSxpPWNbbi5pZF07aWYoaSl7aS5yZWZzKys7Zm9yKHZhciByPTA7cjxpLnBhcnRzLmxlbmd0aDtyKyspaS5wYXJ0c1tyXShuLnBhcnRzW3JdKTtmb3IoO3I8bi5wYXJ0cy5sZW5ndGg7cisrKWkucGFydHMucHVzaChhKG4ucGFydHNbcl0pKTtpLnBhcnRzLmxlbmd0aD5uLnBhcnRzLmxlbmd0aCYmKGkucGFydHMubGVuZ3RoPW4ucGFydHMubGVuZ3RoKX1lbHNle2Zvcih2YXIgbz1bXSxyPTA7cjxuLnBhcnRzLmxlbmd0aDtyKyspby5wdXNoKGEobi5wYXJ0c1tyXSkpO2Nbbi5pZF09e2lkOm4uaWQscmVmczoxLHBhcnRzOm99fX19ZnVuY3Rpb24gcigpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtyZXR1cm4gZS50eXBlPVwidGV4dC9jc3NcIixkLmFwcGVuZENoaWxkKGUpLGV9ZnVuY3Rpb24gYShlKXt2YXIgdCxuLGk9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcignc3R5bGVbZGF0YS12dWUtc3NyLWlkfj1cIicrZS5pZCsnXCJdJyk7aWYoaSl7aWYoZilyZXR1cm4gZztpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaSl9aWYoYil7dmFyIGE9cCsrO2k9aHx8KGg9cigpKSx0PW8uYmluZChudWxsLGksYSwhMSksbj1vLmJpbmQobnVsbCxpLGEsITApfWVsc2UgaT1yKCksdD1zLmJpbmQobnVsbCxpKSxuPWZ1bmN0aW9uKCl7aS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGkpfTtyZXR1cm4gdChlKSxmdW5jdGlvbihpKXtpZihpKXtpZihpLmNzcz09PWUuY3NzJiZpLm1lZGlhPT09ZS5tZWRpYSYmaS5zb3VyY2VNYXA9PT1lLnNvdXJjZU1hcClyZXR1cm47dChlPWkpfWVsc2UgbigpfX1mdW5jdGlvbiBvKGUsdCxuLGkpe3ZhciByPW4/XCJcIjppLmNzcztpZihlLnN0eWxlU2hlZXQpZS5zdHlsZVNoZWV0LmNzc1RleHQ9bSh0LHIpO2Vsc2V7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUociksbz1lLmNoaWxkTm9kZXM7b1t0XSYmZS5yZW1vdmVDaGlsZChvW3RdKSxvLmxlbmd0aD9lLmluc2VydEJlZm9yZShhLG9bdF0pOmUuYXBwZW5kQ2hpbGQoYSl9fWZ1bmN0aW9uIHMoZSx0KXt2YXIgbj10LmNzcyxpPXQubWVkaWEscj10LnNvdXJjZU1hcDtpZihpJiZlLnNldEF0dHJpYnV0ZShcIm1lZGlhXCIsaSksciYmKG4rPVwiXFxuLyojIHNvdXJjZVVSTD1cIityLnNvdXJjZXNbMF0rXCIgKi9cIixuKz1cIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIrYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkocikpKSkrXCIgKi9cIiksZS5zdHlsZVNoZWV0KWUuc3R5bGVTaGVldC5jc3NUZXh0PW47ZWxzZXtmb3IoO2UuZmlyc3RDaGlsZDspZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpO2UuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobikpfX12YXIgbD1cInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQ7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIERFQlVHJiZERUJVRyYmIWwpdGhyb3cgbmV3IEVycm9yKFwidnVlLXN0eWxlLWxvYWRlciBjYW5ub3QgYmUgdXNlZCBpbiBhIG5vbi1icm93c2VyIGVudmlyb25tZW50LiBVc2UgeyB0YXJnZXQ6ICdub2RlJyB9IGluIHlvdXIgV2VicGFjayBjb25maWcgdG8gaW5kaWNhdGUgYSBzZXJ2ZXItcmVuZGVyaW5nIGVudmlyb25tZW50LlwiKTt2YXIgdT1uKDc4KSxjPXt9LGQ9bCYmKGRvY3VtZW50LmhlYWR8fGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXSksaD1udWxsLHA9MCxmPSExLGc9ZnVuY3Rpb24oKXt9LGI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIG5hdmlnYXRvciYmL21zaWUgWzYtOV1cXGIvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe2Y9bjt2YXIgcj11KGUsdCk7cmV0dXJuIGkociksZnVuY3Rpb24odCl7Zm9yKHZhciBuPVtdLGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIG89clthXSxzPWNbby5pZF07cy5yZWZzLS0sbi5wdXNoKHMpfXQ/KHI9dShlLHQpLGkocikpOnI9W107Zm9yKHZhciBhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBzPW5bYV07aWYoMD09PXMucmVmcyl7Zm9yKHZhciBsPTA7bDxzLnBhcnRzLmxlbmd0aDtsKyspcy5wYXJ0c1tsXSgpO2RlbGV0ZSBjW3MuaWRdfX19fTt2YXIgbT1mdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVybiBlW3RdPW4sZS5maWx0ZXIoQm9vbGVhbikuam9pbihcIlxcblwiKX19KCl9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdLGk9e30scj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgYT10W3JdLG89YVswXSxzPWFbMV0sbD1hWzJdLHU9YVszXSxjPXtpZDplK1wiOlwiK3IsY3NzOnMsbWVkaWE6bCxzb3VyY2VNYXA6dX07aVtvXT9pW29dLnBhcnRzLnB1c2goYyk6bi5wdXNoKGlbb109e2lkOm8scGFydHM6W2NdfSl9cmV0dXJuIG59fV0pOyIsIi8qKlxuICogdnVleCB2My4xLjJcbiAqIChjKSAyMDE5IEV2YW4gWW91XG4gKiBAbGljZW5zZSBNSVRcbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBhcHBseU1peGluIChWdWUpIHtcbiAgdmFyIHZlcnNpb24gPSBOdW1iZXIoVnVlLnZlcnNpb24uc3BsaXQoJy4nKVswXSk7XG5cbiAgaWYgKHZlcnNpb24gPj0gMikge1xuICAgIFZ1ZS5taXhpbih7IGJlZm9yZUNyZWF0ZTogdnVleEluaXQgfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gb3ZlcnJpZGUgaW5pdCBhbmQgaW5qZWN0IHZ1ZXggaW5pdCBwcm9jZWR1cmVcbiAgICAvLyBmb3IgMS54IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICAgIHZhciBfaW5pdCA9IFZ1ZS5wcm90b3R5cGUuX2luaXQ7XG4gICAgVnVlLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICBpZiAoIG9wdGlvbnMgPT09IHZvaWQgMCApIG9wdGlvbnMgPSB7fTtcblxuICAgICAgb3B0aW9ucy5pbml0ID0gb3B0aW9ucy5pbml0XG4gICAgICAgID8gW3Z1ZXhJbml0XS5jb25jYXQob3B0aW9ucy5pbml0KVxuICAgICAgICA6IHZ1ZXhJbml0O1xuICAgICAgX2luaXQuY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZ1ZXggaW5pdCBob29rLCBpbmplY3RlZCBpbnRvIGVhY2ggaW5zdGFuY2VzIGluaXQgaG9va3MgbGlzdC5cbiAgICovXG5cbiAgZnVuY3Rpb24gdnVleEluaXQgKCkge1xuICAgIHZhciBvcHRpb25zID0gdGhpcy4kb3B0aW9ucztcbiAgICAvLyBzdG9yZSBpbmplY3Rpb25cbiAgICBpZiAob3B0aW9ucy5zdG9yZSkge1xuICAgICAgdGhpcy4kc3RvcmUgPSB0eXBlb2Ygb3B0aW9ucy5zdG9yZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IG9wdGlvbnMuc3RvcmUoKVxuICAgICAgICA6IG9wdGlvbnMuc3RvcmU7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnBhcmVudCAmJiBvcHRpb25zLnBhcmVudC4kc3RvcmUpIHtcbiAgICAgIHRoaXMuJHN0b3JlID0gb3B0aW9ucy5wYXJlbnQuJHN0b3JlO1xuICAgIH1cbiAgfVxufVxuXG52YXIgdGFyZ2V0ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcbiAgPyB3aW5kb3dcbiAgOiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJ1xuICAgID8gZ2xvYmFsXG4gICAgOiB7fTtcbnZhciBkZXZ0b29sSG9vayA9IHRhcmdldC5fX1ZVRV9ERVZUT09MU19HTE9CQUxfSE9PS19fO1xuXG5mdW5jdGlvbiBkZXZ0b29sUGx1Z2luIChzdG9yZSkge1xuICBpZiAoIWRldnRvb2xIb29rKSB7IHJldHVybiB9XG5cbiAgc3RvcmUuX2RldnRvb2xIb29rID0gZGV2dG9vbEhvb2s7XG5cbiAgZGV2dG9vbEhvb2suZW1pdCgndnVleDppbml0Jywgc3RvcmUpO1xuXG4gIGRldnRvb2xIb29rLm9uKCd2dWV4OnRyYXZlbC10by1zdGF0ZScsIGZ1bmN0aW9uICh0YXJnZXRTdGF0ZSkge1xuICAgIHN0b3JlLnJlcGxhY2VTdGF0ZSh0YXJnZXRTdGF0ZSk7XG4gIH0pO1xuXG4gIHN0b3JlLnN1YnNjcmliZShmdW5jdGlvbiAobXV0YXRpb24sIHN0YXRlKSB7XG4gICAgZGV2dG9vbEhvb2suZW1pdCgndnVleDptdXRhdGlvbicsIG11dGF0aW9uLCBzdGF0ZSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCB0aGUgZmlyc3QgaXRlbSB0aGF0IHBhc3MgdGhlIHRlc3RcbiAqIGJ5IHNlY29uZCBhcmd1bWVudCBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGxpc3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZcbiAqIEByZXR1cm4geyp9XG4gKi9cblxuLyoqXG4gKiBmb3JFYWNoIGZvciBvYmplY3RcbiAqL1xuZnVuY3Rpb24gZm9yRWFjaFZhbHVlIChvYmosIGZuKSB7XG4gIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBmbihvYmpba2V5XSwga2V5KTsgfSk7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0IChvYmopIHtcbiAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0J1xufVxuXG5mdW5jdGlvbiBpc1Byb21pc2UgKHZhbCkge1xuICByZXR1cm4gdmFsICYmIHR5cGVvZiB2YWwudGhlbiA9PT0gJ2Z1bmN0aW9uJ1xufVxuXG5mdW5jdGlvbiBhc3NlcnQgKGNvbmRpdGlvbiwgbXNnKSB7XG4gIGlmICghY29uZGl0aW9uKSB7IHRocm93IG5ldyBFcnJvcigoXCJbdnVleF0gXCIgKyBtc2cpKSB9XG59XG5cbmZ1bmN0aW9uIHBhcnRpYWwgKGZuLCBhcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZm4oYXJnKVxuICB9XG59XG5cbi8vIEJhc2UgZGF0YSBzdHJ1Y3QgZm9yIHN0b3JlJ3MgbW9kdWxlLCBwYWNrYWdlIHdpdGggc29tZSBhdHRyaWJ1dGUgYW5kIG1ldGhvZFxudmFyIE1vZHVsZSA9IGZ1bmN0aW9uIE1vZHVsZSAocmF3TW9kdWxlLCBydW50aW1lKSB7XG4gIHRoaXMucnVudGltZSA9IHJ1bnRpbWU7XG4gIC8vIFN0b3JlIHNvbWUgY2hpbGRyZW4gaXRlbVxuICB0aGlzLl9jaGlsZHJlbiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIC8vIFN0b3JlIHRoZSBvcmlnaW4gbW9kdWxlIG9iamVjdCB3aGljaCBwYXNzZWQgYnkgcHJvZ3JhbW1lclxuICB0aGlzLl9yYXdNb2R1bGUgPSByYXdNb2R1bGU7XG4gIHZhciByYXdTdGF0ZSA9IHJhd01vZHVsZS5zdGF0ZTtcblxuICAvLyBTdG9yZSB0aGUgb3JpZ2luIG1vZHVsZSdzIHN0YXRlXG4gIHRoaXMuc3RhdGUgPSAodHlwZW9mIHJhd1N0YXRlID09PSAnZnVuY3Rpb24nID8gcmF3U3RhdGUoKSA6IHJhd1N0YXRlKSB8fCB7fTtcbn07XG5cbnZhciBwcm90b3R5cGVBY2Nlc3NvcnMgPSB7IG5hbWVzcGFjZWQ6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0gfTtcblxucHJvdG90eXBlQWNjZXNzb3JzLm5hbWVzcGFjZWQuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gISF0aGlzLl9yYXdNb2R1bGUubmFtZXNwYWNlZFxufTtcblxuTW9kdWxlLnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uIGFkZENoaWxkIChrZXksIG1vZHVsZSkge1xuICB0aGlzLl9jaGlsZHJlbltrZXldID0gbW9kdWxlO1xufTtcblxuTW9kdWxlLnByb3RvdHlwZS5yZW1vdmVDaGlsZCA9IGZ1bmN0aW9uIHJlbW92ZUNoaWxkIChrZXkpIHtcbiAgZGVsZXRlIHRoaXMuX2NoaWxkcmVuW2tleV07XG59O1xuXG5Nb2R1bGUucHJvdG90eXBlLmdldENoaWxkID0gZnVuY3Rpb24gZ2V0Q2hpbGQgKGtleSkge1xuICByZXR1cm4gdGhpcy5fY2hpbGRyZW5ba2V5XVxufTtcblxuTW9kdWxlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUgKHJhd01vZHVsZSkge1xuICB0aGlzLl9yYXdNb2R1bGUubmFtZXNwYWNlZCA9IHJhd01vZHVsZS5uYW1lc3BhY2VkO1xuICBpZiAocmF3TW9kdWxlLmFjdGlvbnMpIHtcbiAgICB0aGlzLl9yYXdNb2R1bGUuYWN0aW9ucyA9IHJhd01vZHVsZS5hY3Rpb25zO1xuICB9XG4gIGlmIChyYXdNb2R1bGUubXV0YXRpb25zKSB7XG4gICAgdGhpcy5fcmF3TW9kdWxlLm11dGF0aW9ucyA9IHJhd01vZHVsZS5tdXRhdGlvbnM7XG4gIH1cbiAgaWYgKHJhd01vZHVsZS5nZXR0ZXJzKSB7XG4gICAgdGhpcy5fcmF3TW9kdWxlLmdldHRlcnMgPSByYXdNb2R1bGUuZ2V0dGVycztcbiAgfVxufTtcblxuTW9kdWxlLnByb3RvdHlwZS5mb3JFYWNoQ2hpbGQgPSBmdW5jdGlvbiBmb3JFYWNoQ2hpbGQgKGZuKSB7XG4gIGZvckVhY2hWYWx1ZSh0aGlzLl9jaGlsZHJlbiwgZm4pO1xufTtcblxuTW9kdWxlLnByb3RvdHlwZS5mb3JFYWNoR2V0dGVyID0gZnVuY3Rpb24gZm9yRWFjaEdldHRlciAoZm4pIHtcbiAgaWYgKHRoaXMuX3Jhd01vZHVsZS5nZXR0ZXJzKSB7XG4gICAgZm9yRWFjaFZhbHVlKHRoaXMuX3Jhd01vZHVsZS5nZXR0ZXJzLCBmbik7XG4gIH1cbn07XG5cbk1vZHVsZS5wcm90b3R5cGUuZm9yRWFjaEFjdGlvbiA9IGZ1bmN0aW9uIGZvckVhY2hBY3Rpb24gKGZuKSB7XG4gIGlmICh0aGlzLl9yYXdNb2R1bGUuYWN0aW9ucykge1xuICAgIGZvckVhY2hWYWx1ZSh0aGlzLl9yYXdNb2R1bGUuYWN0aW9ucywgZm4pO1xuICB9XG59O1xuXG5Nb2R1bGUucHJvdG90eXBlLmZvckVhY2hNdXRhdGlvbiA9IGZ1bmN0aW9uIGZvckVhY2hNdXRhdGlvbiAoZm4pIHtcbiAgaWYgKHRoaXMuX3Jhd01vZHVsZS5tdXRhdGlvbnMpIHtcbiAgICBmb3JFYWNoVmFsdWUodGhpcy5fcmF3TW9kdWxlLm11dGF0aW9ucywgZm4pO1xuICB9XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyggTW9kdWxlLnByb3RvdHlwZSwgcHJvdG90eXBlQWNjZXNzb3JzICk7XG5cbnZhciBNb2R1bGVDb2xsZWN0aW9uID0gZnVuY3Rpb24gTW9kdWxlQ29sbGVjdGlvbiAocmF3Um9vdE1vZHVsZSkge1xuICAvLyByZWdpc3RlciByb290IG1vZHVsZSAoVnVleC5TdG9yZSBvcHRpb25zKVxuICB0aGlzLnJlZ2lzdGVyKFtdLCByYXdSb290TW9kdWxlLCBmYWxzZSk7XG59O1xuXG5Nb2R1bGVDb2xsZWN0aW9uLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQgKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGgucmVkdWNlKGZ1bmN0aW9uIChtb2R1bGUsIGtleSkge1xuICAgIHJldHVybiBtb2R1bGUuZ2V0Q2hpbGQoa2V5KVxuICB9LCB0aGlzLnJvb3QpXG59O1xuXG5Nb2R1bGVDb2xsZWN0aW9uLnByb3RvdHlwZS5nZXROYW1lc3BhY2UgPSBmdW5jdGlvbiBnZXROYW1lc3BhY2UgKHBhdGgpIHtcbiAgdmFyIG1vZHVsZSA9IHRoaXMucm9vdDtcbiAgcmV0dXJuIHBhdGgucmVkdWNlKGZ1bmN0aW9uIChuYW1lc3BhY2UsIGtleSkge1xuICAgIG1vZHVsZSA9IG1vZHVsZS5nZXRDaGlsZChrZXkpO1xuICAgIHJldHVybiBuYW1lc3BhY2UgKyAobW9kdWxlLm5hbWVzcGFjZWQgPyBrZXkgKyAnLycgOiAnJylcbiAgfSwgJycpXG59O1xuXG5Nb2R1bGVDb2xsZWN0aW9uLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUkMSAocmF3Um9vdE1vZHVsZSkge1xuICB1cGRhdGUoW10sIHRoaXMucm9vdCwgcmF3Um9vdE1vZHVsZSk7XG59O1xuXG5Nb2R1bGVDb2xsZWN0aW9uLnByb3RvdHlwZS5yZWdpc3RlciA9IGZ1bmN0aW9uIHJlZ2lzdGVyIChwYXRoLCByYXdNb2R1bGUsIHJ1bnRpbWUpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcbiAgICBpZiAoIHJ1bnRpbWUgPT09IHZvaWQgMCApIHJ1bnRpbWUgPSB0cnVlO1xuXG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0UmF3TW9kdWxlKHBhdGgsIHJhd01vZHVsZSk7XG4gIH1cblxuICB2YXIgbmV3TW9kdWxlID0gbmV3IE1vZHVsZShyYXdNb2R1bGUsIHJ1bnRpbWUpO1xuICBpZiAocGF0aC5sZW5ndGggPT09IDApIHtcbiAgICB0aGlzLnJvb3QgPSBuZXdNb2R1bGU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHBhcmVudCA9IHRoaXMuZ2V0KHBhdGguc2xpY2UoMCwgLTEpKTtcbiAgICBwYXJlbnQuYWRkQ2hpbGQocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBuZXdNb2R1bGUpO1xuICB9XG5cbiAgLy8gcmVnaXN0ZXIgbmVzdGVkIG1vZHVsZXNcbiAgaWYgKHJhd01vZHVsZS5tb2R1bGVzKSB7XG4gICAgZm9yRWFjaFZhbHVlKHJhd01vZHVsZS5tb2R1bGVzLCBmdW5jdGlvbiAocmF3Q2hpbGRNb2R1bGUsIGtleSkge1xuICAgICAgdGhpcyQxLnJlZ2lzdGVyKHBhdGguY29uY2F0KGtleSksIHJhd0NoaWxkTW9kdWxlLCBydW50aW1lKTtcbiAgICB9KTtcbiAgfVxufTtcblxuTW9kdWxlQ29sbGVjdGlvbi5wcm90b3R5cGUudW5yZWdpc3RlciA9IGZ1bmN0aW9uIHVucmVnaXN0ZXIgKHBhdGgpIHtcbiAgdmFyIHBhcmVudCA9IHRoaXMuZ2V0KHBhdGguc2xpY2UoMCwgLTEpKTtcbiAgdmFyIGtleSA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcbiAgaWYgKCFwYXJlbnQuZ2V0Q2hpbGQoa2V5KS5ydW50aW1lKSB7IHJldHVybiB9XG5cbiAgcGFyZW50LnJlbW92ZUNoaWxkKGtleSk7XG59O1xuXG5mdW5jdGlvbiB1cGRhdGUgKHBhdGgsIHRhcmdldE1vZHVsZSwgbmV3TW9kdWxlKSB7XG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0UmF3TW9kdWxlKHBhdGgsIG5ld01vZHVsZSk7XG4gIH1cblxuICAvLyB1cGRhdGUgdGFyZ2V0IG1vZHVsZVxuICB0YXJnZXRNb2R1bGUudXBkYXRlKG5ld01vZHVsZSk7XG5cbiAgLy8gdXBkYXRlIG5lc3RlZCBtb2R1bGVzXG4gIGlmIChuZXdNb2R1bGUubW9kdWxlcykge1xuICAgIGZvciAodmFyIGtleSBpbiBuZXdNb2R1bGUubW9kdWxlcykge1xuICAgICAgaWYgKCF0YXJnZXRNb2R1bGUuZ2V0Q2hpbGQoa2V5KSkge1xuICAgICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIFwiW3Z1ZXhdIHRyeWluZyB0byBhZGQgYSBuZXcgbW9kdWxlICdcIiArIGtleSArIFwiJyBvbiBob3QgcmVsb2FkaW5nLCBcIiArXG4gICAgICAgICAgICAnbWFudWFsIHJlbG9hZCBpcyBuZWVkZWQnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHVwZGF0ZShcbiAgICAgICAgcGF0aC5jb25jYXQoa2V5KSxcbiAgICAgICAgdGFyZ2V0TW9kdWxlLmdldENoaWxkKGtleSksXG4gICAgICAgIG5ld01vZHVsZS5tb2R1bGVzW2tleV1cbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbnZhciBmdW5jdGlvbkFzc2VydCA9IHtcbiAgYXNzZXJ0OiBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJzsgfSxcbiAgZXhwZWN0ZWQ6ICdmdW5jdGlvbidcbn07XG5cbnZhciBvYmplY3RBc3NlcnQgPSB7XG4gIGFzc2VydDogZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgfHxcbiAgICAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUuaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJyk7IH0sXG4gIGV4cGVjdGVkOiAnZnVuY3Rpb24gb3Igb2JqZWN0IHdpdGggXCJoYW5kbGVyXCIgZnVuY3Rpb24nXG59O1xuXG52YXIgYXNzZXJ0VHlwZXMgPSB7XG4gIGdldHRlcnM6IGZ1bmN0aW9uQXNzZXJ0LFxuICBtdXRhdGlvbnM6IGZ1bmN0aW9uQXNzZXJ0LFxuICBhY3Rpb25zOiBvYmplY3RBc3NlcnRcbn07XG5cbmZ1bmN0aW9uIGFzc2VydFJhd01vZHVsZSAocGF0aCwgcmF3TW9kdWxlKSB7XG4gIE9iamVjdC5rZXlzKGFzc2VydFR5cGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIXJhd01vZHVsZVtrZXldKSB7IHJldHVybiB9XG5cbiAgICB2YXIgYXNzZXJ0T3B0aW9ucyA9IGFzc2VydFR5cGVzW2tleV07XG5cbiAgICBmb3JFYWNoVmFsdWUocmF3TW9kdWxlW2tleV0sIGZ1bmN0aW9uICh2YWx1ZSwgdHlwZSkge1xuICAgICAgYXNzZXJ0KFxuICAgICAgICBhc3NlcnRPcHRpb25zLmFzc2VydCh2YWx1ZSksXG4gICAgICAgIG1ha2VBc3NlcnRpb25NZXNzYWdlKHBhdGgsIGtleSwgdHlwZSwgdmFsdWUsIGFzc2VydE9wdGlvbnMuZXhwZWN0ZWQpXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbWFrZUFzc2VydGlvbk1lc3NhZ2UgKHBhdGgsIGtleSwgdHlwZSwgdmFsdWUsIGV4cGVjdGVkKSB7XG4gIHZhciBidWYgPSBrZXkgKyBcIiBzaG91bGQgYmUgXCIgKyBleHBlY3RlZCArIFwiIGJ1dCBcXFwiXCIgKyBrZXkgKyBcIi5cIiArIHR5cGUgKyBcIlxcXCJcIjtcbiAgaWYgKHBhdGgubGVuZ3RoID4gMCkge1xuICAgIGJ1ZiArPSBcIiBpbiBtb2R1bGUgXFxcIlwiICsgKHBhdGguam9pbignLicpKSArIFwiXFxcIlwiO1xuICB9XG4gIGJ1ZiArPSBcIiBpcyBcIiArIChKU09OLnN0cmluZ2lmeSh2YWx1ZSkpICsgXCIuXCI7XG4gIHJldHVybiBidWZcbn1cblxudmFyIFZ1ZTsgLy8gYmluZCBvbiBpbnN0YWxsXG5cbnZhciBTdG9yZSA9IGZ1bmN0aW9uIFN0b3JlIChvcHRpb25zKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuICBpZiAoIG9wdGlvbnMgPT09IHZvaWQgMCApIG9wdGlvbnMgPSB7fTtcblxuICAvLyBBdXRvIGluc3RhbGwgaWYgaXQgaXMgbm90IGRvbmUgeWV0IGFuZCBgd2luZG93YCBoYXMgYFZ1ZWAuXG4gIC8vIFRvIGFsbG93IHVzZXJzIHRvIGF2b2lkIGF1dG8taW5zdGFsbGF0aW9uIGluIHNvbWUgY2FzZXMsXG4gIC8vIHRoaXMgY29kZSBzaG91bGQgYmUgcGxhY2VkIGhlcmUuIFNlZSAjNzMxXG4gIGlmICghVnVlICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5WdWUpIHtcbiAgICBpbnN0YWxsKHdpbmRvdy5WdWUpO1xuICB9XG5cbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBhc3NlcnQoVnVlLCBcIm11c3QgY2FsbCBWdWUudXNlKFZ1ZXgpIGJlZm9yZSBjcmVhdGluZyBhIHN0b3JlIGluc3RhbmNlLlwiKTtcbiAgICBhc3NlcnQodHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnLCBcInZ1ZXggcmVxdWlyZXMgYSBQcm9taXNlIHBvbHlmaWxsIGluIHRoaXMgYnJvd3Nlci5cIik7XG4gICAgYXNzZXJ0KHRoaXMgaW5zdGFuY2VvZiBTdG9yZSwgXCJzdG9yZSBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3IuXCIpO1xuICB9XG5cbiAgdmFyIHBsdWdpbnMgPSBvcHRpb25zLnBsdWdpbnM7IGlmICggcGx1Z2lucyA9PT0gdm9pZCAwICkgcGx1Z2lucyA9IFtdO1xuICB2YXIgc3RyaWN0ID0gb3B0aW9ucy5zdHJpY3Q7IGlmICggc3RyaWN0ID09PSB2b2lkIDAgKSBzdHJpY3QgPSBmYWxzZTtcblxuICAvLyBzdG9yZSBpbnRlcm5hbCBzdGF0ZVxuICB0aGlzLl9jb21taXR0aW5nID0gZmFsc2U7XG4gIHRoaXMuX2FjdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB0aGlzLl9hY3Rpb25TdWJzY3JpYmVycyA9IFtdO1xuICB0aGlzLl9tdXRhdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB0aGlzLl93cmFwcGVkR2V0dGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHRoaXMuX21vZHVsZXMgPSBuZXcgTW9kdWxlQ29sbGVjdGlvbihvcHRpb25zKTtcbiAgdGhpcy5fbW9kdWxlc05hbWVzcGFjZU1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHRoaXMuX3N1YnNjcmliZXJzID0gW107XG4gIHRoaXMuX3dhdGNoZXJWTSA9IG5ldyBWdWUoKTtcbiAgdGhpcy5fbWFrZUxvY2FsR2V0dGVyc0NhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAvLyBiaW5kIGNvbW1pdCBhbmQgZGlzcGF0Y2ggdG8gc2VsZlxuICB2YXIgc3RvcmUgPSB0aGlzO1xuICB2YXIgcmVmID0gdGhpcztcbiAgdmFyIGRpc3BhdGNoID0gcmVmLmRpc3BhdGNoO1xuICB2YXIgY29tbWl0ID0gcmVmLmNvbW1pdDtcbiAgdGhpcy5kaXNwYXRjaCA9IGZ1bmN0aW9uIGJvdW5kRGlzcGF0Y2ggKHR5cGUsIHBheWxvYWQpIHtcbiAgICByZXR1cm4gZGlzcGF0Y2guY2FsbChzdG9yZSwgdHlwZSwgcGF5bG9hZClcbiAgfTtcbiAgdGhpcy5jb21taXQgPSBmdW5jdGlvbiBib3VuZENvbW1pdCAodHlwZSwgcGF5bG9hZCwgb3B0aW9ucykge1xuICAgIHJldHVybiBjb21taXQuY2FsbChzdG9yZSwgdHlwZSwgcGF5bG9hZCwgb3B0aW9ucylcbiAgfTtcblxuICAvLyBzdHJpY3QgbW9kZVxuICB0aGlzLnN0cmljdCA9IHN0cmljdDtcblxuICB2YXIgc3RhdGUgPSB0aGlzLl9tb2R1bGVzLnJvb3Quc3RhdGU7XG5cbiAgLy8gaW5pdCByb290IG1vZHVsZS5cbiAgLy8gdGhpcyBhbHNvIHJlY3Vyc2l2ZWx5IHJlZ2lzdGVycyBhbGwgc3ViLW1vZHVsZXNcbiAgLy8gYW5kIGNvbGxlY3RzIGFsbCBtb2R1bGUgZ2V0dGVycyBpbnNpZGUgdGhpcy5fd3JhcHBlZEdldHRlcnNcbiAgaW5zdGFsbE1vZHVsZSh0aGlzLCBzdGF0ZSwgW10sIHRoaXMuX21vZHVsZXMucm9vdCk7XG5cbiAgLy8gaW5pdGlhbGl6ZSB0aGUgc3RvcmUgdm0sIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVhY3Rpdml0eVxuICAvLyAoYWxzbyByZWdpc3RlcnMgX3dyYXBwZWRHZXR0ZXJzIGFzIGNvbXB1dGVkIHByb3BlcnRpZXMpXG4gIHJlc2V0U3RvcmVWTSh0aGlzLCBzdGF0ZSk7XG5cbiAgLy8gYXBwbHkgcGx1Z2luc1xuICBwbHVnaW5zLmZvckVhY2goZnVuY3Rpb24gKHBsdWdpbikgeyByZXR1cm4gcGx1Z2luKHRoaXMkMSk7IH0pO1xuXG4gIHZhciB1c2VEZXZ0b29scyA9IG9wdGlvbnMuZGV2dG9vbHMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuZGV2dG9vbHMgOiBWdWUuY29uZmlnLmRldnRvb2xzO1xuICBpZiAodXNlRGV2dG9vbHMpIHtcbiAgICBkZXZ0b29sUGx1Z2luKHRoaXMpO1xuICB9XG59O1xuXG52YXIgcHJvdG90eXBlQWNjZXNzb3JzJDEgPSB7IHN0YXRlOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH07XG5cbnByb3RvdHlwZUFjY2Vzc29ycyQxLnN0YXRlLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuX3ZtLl9kYXRhLiQkc3RhdGVcbn07XG5cbnByb3RvdHlwZUFjY2Vzc29ycyQxLnN0YXRlLnNldCA9IGZ1bmN0aW9uICh2KSB7XG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0KGZhbHNlLCBcInVzZSBzdG9yZS5yZXBsYWNlU3RhdGUoKSB0byBleHBsaWNpdCByZXBsYWNlIHN0b3JlIHN0YXRlLlwiKTtcbiAgfVxufTtcblxuU3RvcmUucHJvdG90eXBlLmNvbW1pdCA9IGZ1bmN0aW9uIGNvbW1pdCAoX3R5cGUsIF9wYXlsb2FkLCBfb3B0aW9ucykge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIC8vIGNoZWNrIG9iamVjdC1zdHlsZSBjb21taXRcbiAgdmFyIHJlZiA9IHVuaWZ5T2JqZWN0U3R5bGUoX3R5cGUsIF9wYXlsb2FkLCBfb3B0aW9ucyk7XG4gICAgdmFyIHR5cGUgPSByZWYudHlwZTtcbiAgICB2YXIgcGF5bG9hZCA9IHJlZi5wYXlsb2FkO1xuICAgIHZhciBvcHRpb25zID0gcmVmLm9wdGlvbnM7XG5cbiAgdmFyIG11dGF0aW9uID0geyB0eXBlOiB0eXBlLCBwYXlsb2FkOiBwYXlsb2FkIH07XG4gIHZhciBlbnRyeSA9IHRoaXMuX211dGF0aW9uc1t0eXBlXTtcbiAgaWYgKCFlbnRyeSkge1xuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKChcIlt2dWV4XSB1bmtub3duIG11dGF0aW9uIHR5cGU6IFwiICsgdHlwZSkpO1xuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICB0aGlzLl93aXRoQ29tbWl0KGZ1bmN0aW9uICgpIHtcbiAgICBlbnRyeS5mb3JFYWNoKGZ1bmN0aW9uIGNvbW1pdEl0ZXJhdG9yIChoYW5kbGVyKSB7XG4gICAgICBoYW5kbGVyKHBheWxvYWQpO1xuICAgIH0pO1xuICB9KTtcbiAgdGhpcy5fc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3ViKSB7IHJldHVybiBzdWIobXV0YXRpb24sIHRoaXMkMS5zdGF0ZSk7IH0pO1xuXG4gIGlmIChcbiAgICBcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgb3B0aW9ucyAmJiBvcHRpb25zLnNpbGVudFxuICApIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBcIlt2dWV4XSBtdXRhdGlvbiB0eXBlOiBcIiArIHR5cGUgKyBcIi4gU2lsZW50IG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkLiBcIiArXG4gICAgICAnVXNlIHRoZSBmaWx0ZXIgZnVuY3Rpb25hbGl0eSBpbiB0aGUgdnVlLWRldnRvb2xzJ1xuICAgICk7XG4gIH1cbn07XG5cblN0b3JlLnByb3RvdHlwZS5kaXNwYXRjaCA9IGZ1bmN0aW9uIGRpc3BhdGNoIChfdHlwZSwgX3BheWxvYWQpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAvLyBjaGVjayBvYmplY3Qtc3R5bGUgZGlzcGF0Y2hcbiAgdmFyIHJlZiA9IHVuaWZ5T2JqZWN0U3R5bGUoX3R5cGUsIF9wYXlsb2FkKTtcbiAgICB2YXIgdHlwZSA9IHJlZi50eXBlO1xuICAgIHZhciBwYXlsb2FkID0gcmVmLnBheWxvYWQ7XG5cbiAgdmFyIGFjdGlvbiA9IHsgdHlwZTogdHlwZSwgcGF5bG9hZDogcGF5bG9hZCB9O1xuICB2YXIgZW50cnkgPSB0aGlzLl9hY3Rpb25zW3R5cGVdO1xuICBpZiAoIWVudHJ5KSB7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoKFwiW3Z1ZXhdIHVua25vd24gYWN0aW9uIHR5cGU6IFwiICsgdHlwZSkpO1xuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIHRyeSB7XG4gICAgdGhpcy5fYWN0aW9uU3Vic2NyaWJlcnNcbiAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHN1YikgeyByZXR1cm4gc3ViLmJlZm9yZTsgfSlcbiAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uIChzdWIpIHsgcmV0dXJuIHN1Yi5iZWZvcmUoYWN0aW9uLCB0aGlzJDEuc3RhdGUpOyB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJbdnVleF0gZXJyb3IgaW4gYmVmb3JlIGFjdGlvbiBzdWJzY3JpYmVyczogXCIpO1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgcmVzdWx0ID0gZW50cnkubGVuZ3RoID4gMVxuICAgID8gUHJvbWlzZS5hbGwoZW50cnkubWFwKGZ1bmN0aW9uIChoYW5kbGVyKSB7IHJldHVybiBoYW5kbGVyKHBheWxvYWQpOyB9KSlcbiAgICA6IGVudHJ5WzBdKHBheWxvYWQpO1xuXG4gIHJldHVybiByZXN1bHQudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMkMS5fYWN0aW9uU3Vic2NyaWJlcnNcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoc3ViKSB7IHJldHVybiBzdWIuYWZ0ZXI7IH0pXG4gICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uIChzdWIpIHsgcmV0dXJuIHN1Yi5hZnRlcihhY3Rpb24sIHRoaXMkMS5zdGF0ZSk7IH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIlt2dWV4XSBlcnJvciBpbiBhZnRlciBhY3Rpb24gc3Vic2NyaWJlcnM6IFwiKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc1xuICB9KVxufTtcblxuU3RvcmUucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uIHN1YnNjcmliZSAoZm4pIHtcbiAgcmV0dXJuIGdlbmVyaWNTdWJzY3JpYmUoZm4sIHRoaXMuX3N1YnNjcmliZXJzKVxufTtcblxuU3RvcmUucHJvdG90eXBlLnN1YnNjcmliZUFjdGlvbiA9IGZ1bmN0aW9uIHN1YnNjcmliZUFjdGlvbiAoZm4pIHtcbiAgdmFyIHN1YnMgPSB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgPyB7IGJlZm9yZTogZm4gfSA6IGZuO1xuICByZXR1cm4gZ2VuZXJpY1N1YnNjcmliZShzdWJzLCB0aGlzLl9hY3Rpb25TdWJzY3JpYmVycylcbn07XG5cblN0b3JlLnByb3RvdHlwZS53YXRjaCA9IGZ1bmN0aW9uIHdhdGNoIChnZXR0ZXIsIGNiLCBvcHRpb25zKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBhc3NlcnQodHlwZW9mIGdldHRlciA9PT0gJ2Z1bmN0aW9uJywgXCJzdG9yZS53YXRjaCBvbmx5IGFjY2VwdHMgYSBmdW5jdGlvbi5cIik7XG4gIH1cbiAgcmV0dXJuIHRoaXMuX3dhdGNoZXJWTS4kd2F0Y2goZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2V0dGVyKHRoaXMkMS5zdGF0ZSwgdGhpcyQxLmdldHRlcnMpOyB9LCBjYiwgb3B0aW9ucylcbn07XG5cblN0b3JlLnByb3RvdHlwZS5yZXBsYWNlU3RhdGUgPSBmdW5jdGlvbiByZXBsYWNlU3RhdGUgKHN0YXRlKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdGhpcy5fd2l0aENvbW1pdChmdW5jdGlvbiAoKSB7XG4gICAgdGhpcyQxLl92bS5fZGF0YS4kJHN0YXRlID0gc3RhdGU7XG4gIH0pO1xufTtcblxuU3RvcmUucHJvdG90eXBlLnJlZ2lzdGVyTW9kdWxlID0gZnVuY3Rpb24gcmVnaXN0ZXJNb2R1bGUgKHBhdGgsIHJhd01vZHVsZSwgb3B0aW9ucykge1xuICAgIGlmICggb3B0aW9ucyA9PT0gdm9pZCAwICkgb3B0aW9ucyA9IHt9O1xuXG4gIGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHsgcGF0aCA9IFtwYXRoXTsgfVxuXG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0KEFycmF5LmlzQXJyYXkocGF0aCksIFwibW9kdWxlIHBhdGggbXVzdCBiZSBhIHN0cmluZyBvciBhbiBBcnJheS5cIik7XG4gICAgYXNzZXJ0KHBhdGgubGVuZ3RoID4gMCwgJ2Nhbm5vdCByZWdpc3RlciB0aGUgcm9vdCBtb2R1bGUgYnkgdXNpbmcgcmVnaXN0ZXJNb2R1bGUuJyk7XG4gIH1cblxuICB0aGlzLl9tb2R1bGVzLnJlZ2lzdGVyKHBhdGgsIHJhd01vZHVsZSk7XG4gIGluc3RhbGxNb2R1bGUodGhpcywgdGhpcy5zdGF0ZSwgcGF0aCwgdGhpcy5fbW9kdWxlcy5nZXQocGF0aCksIG9wdGlvbnMucHJlc2VydmVTdGF0ZSk7XG4gIC8vIHJlc2V0IHN0b3JlIHRvIHVwZGF0ZSBnZXR0ZXJzLi4uXG4gIHJlc2V0U3RvcmVWTSh0aGlzLCB0aGlzLnN0YXRlKTtcbn07XG5cblN0b3JlLnByb3RvdHlwZS51bnJlZ2lzdGVyTW9kdWxlID0gZnVuY3Rpb24gdW5yZWdpc3Rlck1vZHVsZSAocGF0aCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHsgcGF0aCA9IFtwYXRoXTsgfVxuXG4gIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0KEFycmF5LmlzQXJyYXkocGF0aCksIFwibW9kdWxlIHBhdGggbXVzdCBiZSBhIHN0cmluZyBvciBhbiBBcnJheS5cIik7XG4gIH1cblxuICB0aGlzLl9tb2R1bGVzLnVucmVnaXN0ZXIocGF0aCk7XG4gIHRoaXMuX3dpdGhDb21taXQoZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnRTdGF0ZSA9IGdldE5lc3RlZFN0YXRlKHRoaXMkMS5zdGF0ZSwgcGF0aC5zbGljZSgwLCAtMSkpO1xuICAgIFZ1ZS5kZWxldGUocGFyZW50U3RhdGUsIHBhdGhbcGF0aC5sZW5ndGggLSAxXSk7XG4gIH0pO1xuICByZXNldFN0b3JlKHRoaXMpO1xufTtcblxuU3RvcmUucHJvdG90eXBlLmhvdFVwZGF0ZSA9IGZ1bmN0aW9uIGhvdFVwZGF0ZSAobmV3T3B0aW9ucykge1xuICB0aGlzLl9tb2R1bGVzLnVwZGF0ZShuZXdPcHRpb25zKTtcbiAgcmVzZXRTdG9yZSh0aGlzLCB0cnVlKTtcbn07XG5cblN0b3JlLnByb3RvdHlwZS5fd2l0aENvbW1pdCA9IGZ1bmN0aW9uIF93aXRoQ29tbWl0IChmbikge1xuICB2YXIgY29tbWl0dGluZyA9IHRoaXMuX2NvbW1pdHRpbmc7XG4gIHRoaXMuX2NvbW1pdHRpbmcgPSB0cnVlO1xuICBmbigpO1xuICB0aGlzLl9jb21taXR0aW5nID0gY29tbWl0dGluZztcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBTdG9yZS5wcm90b3R5cGUsIHByb3RvdHlwZUFjY2Vzc29ycyQxICk7XG5cbmZ1bmN0aW9uIGdlbmVyaWNTdWJzY3JpYmUgKGZuLCBzdWJzKSB7XG4gIGlmIChzdWJzLmluZGV4T2YoZm4pIDwgMCkge1xuICAgIHN1YnMucHVzaChmbik7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaSA9IHN1YnMuaW5kZXhPZihmbik7XG4gICAgaWYgKGkgPiAtMSkge1xuICAgICAgc3Vicy5zcGxpY2UoaSwgMSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0U3RvcmUgKHN0b3JlLCBob3QpIHtcbiAgc3RvcmUuX2FjdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBzdG9yZS5fbXV0YXRpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgc3RvcmUuX3dyYXBwZWRHZXR0ZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgc3RvcmUuX21vZHVsZXNOYW1lc3BhY2VNYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB2YXIgc3RhdGUgPSBzdG9yZS5zdGF0ZTtcbiAgLy8gaW5pdCBhbGwgbW9kdWxlc1xuICBpbnN0YWxsTW9kdWxlKHN0b3JlLCBzdGF0ZSwgW10sIHN0b3JlLl9tb2R1bGVzLnJvb3QsIHRydWUpO1xuICAvLyByZXNldCB2bVxuICByZXNldFN0b3JlVk0oc3RvcmUsIHN0YXRlLCBob3QpO1xufVxuXG5mdW5jdGlvbiByZXNldFN0b3JlVk0gKHN0b3JlLCBzdGF0ZSwgaG90KSB7XG4gIHZhciBvbGRWbSA9IHN0b3JlLl92bTtcblxuICAvLyBiaW5kIHN0b3JlIHB1YmxpYyBnZXR0ZXJzXG4gIHN0b3JlLmdldHRlcnMgPSB7fTtcbiAgLy8gcmVzZXQgbG9jYWwgZ2V0dGVycyBjYWNoZVxuICBzdG9yZS5fbWFrZUxvY2FsR2V0dGVyc0NhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdmFyIHdyYXBwZWRHZXR0ZXJzID0gc3RvcmUuX3dyYXBwZWRHZXR0ZXJzO1xuICB2YXIgY29tcHV0ZWQgPSB7fTtcbiAgZm9yRWFjaFZhbHVlKHdyYXBwZWRHZXR0ZXJzLCBmdW5jdGlvbiAoZm4sIGtleSkge1xuICAgIC8vIHVzZSBjb21wdXRlZCB0byBsZXZlcmFnZSBpdHMgbGF6eS1jYWNoaW5nIG1lY2hhbmlzbVxuICAgIC8vIGRpcmVjdCBpbmxpbmUgZnVuY3Rpb24gdXNlIHdpbGwgbGVhZCB0byBjbG9zdXJlIHByZXNlcnZpbmcgb2xkVm0uXG4gICAgLy8gdXNpbmcgcGFydGlhbCB0byByZXR1cm4gZnVuY3Rpb24gd2l0aCBvbmx5IGFyZ3VtZW50cyBwcmVzZXJ2ZWQgaW4gY2xvc3VyZSBlbnZpcm9ubWVudC5cbiAgICBjb21wdXRlZFtrZXldID0gcGFydGlhbChmbiwgc3RvcmUpO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdG9yZS5nZXR0ZXJzLCBrZXksIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RvcmUuX3ZtW2tleV07IH0sXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlIC8vIGZvciBsb2NhbCBnZXR0ZXJzXG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIHVzZSBhIFZ1ZSBpbnN0YW5jZSB0byBzdG9yZSB0aGUgc3RhdGUgdHJlZVxuICAvLyBzdXBwcmVzcyB3YXJuaW5ncyBqdXN0IGluIGNhc2UgdGhlIHVzZXIgaGFzIGFkZGVkXG4gIC8vIHNvbWUgZnVua3kgZ2xvYmFsIG1peGluc1xuICB2YXIgc2lsZW50ID0gVnVlLmNvbmZpZy5zaWxlbnQ7XG4gIFZ1ZS5jb25maWcuc2lsZW50ID0gdHJ1ZTtcbiAgc3RvcmUuX3ZtID0gbmV3IFZ1ZSh7XG4gICAgZGF0YToge1xuICAgICAgJCRzdGF0ZTogc3RhdGVcbiAgICB9LFxuICAgIGNvbXB1dGVkOiBjb21wdXRlZFxuICB9KTtcbiAgVnVlLmNvbmZpZy5zaWxlbnQgPSBzaWxlbnQ7XG5cbiAgLy8gZW5hYmxlIHN0cmljdCBtb2RlIGZvciBuZXcgdm1cbiAgaWYgKHN0b3JlLnN0cmljdCkge1xuICAgIGVuYWJsZVN0cmljdE1vZGUoc3RvcmUpO1xuICB9XG5cbiAgaWYgKG9sZFZtKSB7XG4gICAgaWYgKGhvdCkge1xuICAgICAgLy8gZGlzcGF0Y2ggY2hhbmdlcyBpbiBhbGwgc3Vic2NyaWJlZCB3YXRjaGVyc1xuICAgICAgLy8gdG8gZm9yY2UgZ2V0dGVyIHJlLWV2YWx1YXRpb24gZm9yIGhvdCByZWxvYWRpbmcuXG4gICAgICBzdG9yZS5fd2l0aENvbW1pdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9sZFZtLl9kYXRhLiQkc3RhdGUgPSBudWxsO1xuICAgICAgfSk7XG4gICAgfVxuICAgIFZ1ZS5uZXh0VGljayhmdW5jdGlvbiAoKSB7IHJldHVybiBvbGRWbS4kZGVzdHJveSgpOyB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnN0YWxsTW9kdWxlIChzdG9yZSwgcm9vdFN0YXRlLCBwYXRoLCBtb2R1bGUsIGhvdCkge1xuICB2YXIgaXNSb290ID0gIXBhdGgubGVuZ3RoO1xuICB2YXIgbmFtZXNwYWNlID0gc3RvcmUuX21vZHVsZXMuZ2V0TmFtZXNwYWNlKHBhdGgpO1xuXG4gIC8vIHJlZ2lzdGVyIGluIG5hbWVzcGFjZSBtYXBcbiAgaWYgKG1vZHVsZS5uYW1lc3BhY2VkKSB7XG4gICAgaWYgKHN0b3JlLl9tb2R1bGVzTmFtZXNwYWNlTWFwW25hbWVzcGFjZV0gJiYgXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS5lcnJvcigoXCJbdnVleF0gZHVwbGljYXRlIG5hbWVzcGFjZSBcIiArIG5hbWVzcGFjZSArIFwiIGZvciB0aGUgbmFtZXNwYWNlZCBtb2R1bGUgXCIgKyAocGF0aC5qb2luKCcvJykpKSk7XG4gICAgfVxuICAgIHN0b3JlLl9tb2R1bGVzTmFtZXNwYWNlTWFwW25hbWVzcGFjZV0gPSBtb2R1bGU7XG4gIH1cblxuICAvLyBzZXQgc3RhdGVcbiAgaWYgKCFpc1Jvb3QgJiYgIWhvdCkge1xuICAgIHZhciBwYXJlbnRTdGF0ZSA9IGdldE5lc3RlZFN0YXRlKHJvb3RTdGF0ZSwgcGF0aC5zbGljZSgwLCAtMSkpO1xuICAgIHZhciBtb2R1bGVOYW1lID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuICAgIHN0b3JlLl93aXRoQ29tbWl0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmIChtb2R1bGVOYW1lIGluIHBhcmVudFN0YXRlKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgKFwiW3Z1ZXhdIHN0YXRlIGZpZWxkIFxcXCJcIiArIG1vZHVsZU5hbWUgKyBcIlxcXCIgd2FzIG92ZXJyaWRkZW4gYnkgYSBtb2R1bGUgd2l0aCB0aGUgc2FtZSBuYW1lIGF0IFxcXCJcIiArIChwYXRoLmpvaW4oJy4nKSkgKyBcIlxcXCJcIilcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBWdWUuc2V0KHBhcmVudFN0YXRlLCBtb2R1bGVOYW1lLCBtb2R1bGUuc3RhdGUpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIGxvY2FsID0gbW9kdWxlLmNvbnRleHQgPSBtYWtlTG9jYWxDb250ZXh0KHN0b3JlLCBuYW1lc3BhY2UsIHBhdGgpO1xuXG4gIG1vZHVsZS5mb3JFYWNoTXV0YXRpb24oZnVuY3Rpb24gKG11dGF0aW9uLCBrZXkpIHtcbiAgICB2YXIgbmFtZXNwYWNlZFR5cGUgPSBuYW1lc3BhY2UgKyBrZXk7XG4gICAgcmVnaXN0ZXJNdXRhdGlvbihzdG9yZSwgbmFtZXNwYWNlZFR5cGUsIG11dGF0aW9uLCBsb2NhbCk7XG4gIH0pO1xuXG4gIG1vZHVsZS5mb3JFYWNoQWN0aW9uKGZ1bmN0aW9uIChhY3Rpb24sIGtleSkge1xuICAgIHZhciB0eXBlID0gYWN0aW9uLnJvb3QgPyBrZXkgOiBuYW1lc3BhY2UgKyBrZXk7XG4gICAgdmFyIGhhbmRsZXIgPSBhY3Rpb24uaGFuZGxlciB8fCBhY3Rpb247XG4gICAgcmVnaXN0ZXJBY3Rpb24oc3RvcmUsIHR5cGUsIGhhbmRsZXIsIGxvY2FsKTtcbiAgfSk7XG5cbiAgbW9kdWxlLmZvckVhY2hHZXR0ZXIoZnVuY3Rpb24gKGdldHRlciwga2V5KSB7XG4gICAgdmFyIG5hbWVzcGFjZWRUeXBlID0gbmFtZXNwYWNlICsga2V5O1xuICAgIHJlZ2lzdGVyR2V0dGVyKHN0b3JlLCBuYW1lc3BhY2VkVHlwZSwgZ2V0dGVyLCBsb2NhbCk7XG4gIH0pO1xuXG4gIG1vZHVsZS5mb3JFYWNoQ2hpbGQoZnVuY3Rpb24gKGNoaWxkLCBrZXkpIHtcbiAgICBpbnN0YWxsTW9kdWxlKHN0b3JlLCByb290U3RhdGUsIHBhdGguY29uY2F0KGtleSksIGNoaWxkLCBob3QpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBtYWtlIGxvY2FsaXplZCBkaXNwYXRjaCwgY29tbWl0LCBnZXR0ZXJzIGFuZCBzdGF0ZVxuICogaWYgdGhlcmUgaXMgbm8gbmFtZXNwYWNlLCBqdXN0IHVzZSByb290IG9uZXNcbiAqL1xuZnVuY3Rpb24gbWFrZUxvY2FsQ29udGV4dCAoc3RvcmUsIG5hbWVzcGFjZSwgcGF0aCkge1xuICB2YXIgbm9OYW1lc3BhY2UgPSBuYW1lc3BhY2UgPT09ICcnO1xuXG4gIHZhciBsb2NhbCA9IHtcbiAgICBkaXNwYXRjaDogbm9OYW1lc3BhY2UgPyBzdG9yZS5kaXNwYXRjaCA6IGZ1bmN0aW9uIChfdHlwZSwgX3BheWxvYWQsIF9vcHRpb25zKSB7XG4gICAgICB2YXIgYXJncyA9IHVuaWZ5T2JqZWN0U3R5bGUoX3R5cGUsIF9wYXlsb2FkLCBfb3B0aW9ucyk7XG4gICAgICB2YXIgcGF5bG9hZCA9IGFyZ3MucGF5bG9hZDtcbiAgICAgIHZhciBvcHRpb25zID0gYXJncy5vcHRpb25zO1xuICAgICAgdmFyIHR5cGUgPSBhcmdzLnR5cGU7XG5cbiAgICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5yb290KSB7XG4gICAgICAgIHR5cGUgPSBuYW1lc3BhY2UgKyB0eXBlO1xuICAgICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJyAmJiAhc3RvcmUuX2FjdGlvbnNbdHlwZV0pIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKChcIlt2dWV4XSB1bmtub3duIGxvY2FsIGFjdGlvbiB0eXBlOiBcIiArIChhcmdzLnR5cGUpICsgXCIsIGdsb2JhbCB0eXBlOiBcIiArIHR5cGUpKTtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RvcmUuZGlzcGF0Y2godHlwZSwgcGF5bG9hZClcbiAgICB9LFxuXG4gICAgY29tbWl0OiBub05hbWVzcGFjZSA/IHN0b3JlLmNvbW1pdCA6IGZ1bmN0aW9uIChfdHlwZSwgX3BheWxvYWQsIF9vcHRpb25zKSB7XG4gICAgICB2YXIgYXJncyA9IHVuaWZ5T2JqZWN0U3R5bGUoX3R5cGUsIF9wYXlsb2FkLCBfb3B0aW9ucyk7XG4gICAgICB2YXIgcGF5bG9hZCA9IGFyZ3MucGF5bG9hZDtcbiAgICAgIHZhciBvcHRpb25zID0gYXJncy5vcHRpb25zO1xuICAgICAgdmFyIHR5cGUgPSBhcmdzLnR5cGU7XG5cbiAgICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5yb290KSB7XG4gICAgICAgIHR5cGUgPSBuYW1lc3BhY2UgKyB0eXBlO1xuICAgICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJyAmJiAhc3RvcmUuX211dGF0aW9uc1t0eXBlXSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoKFwiW3Z1ZXhdIHVua25vd24gbG9jYWwgbXV0YXRpb24gdHlwZTogXCIgKyAoYXJncy50eXBlKSArIFwiLCBnbG9iYWwgdHlwZTogXCIgKyB0eXBlKSk7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3RvcmUuY29tbWl0KHR5cGUsIHBheWxvYWQsIG9wdGlvbnMpO1xuICAgIH1cbiAgfTtcblxuICAvLyBnZXR0ZXJzIGFuZCBzdGF0ZSBvYmplY3QgbXVzdCBiZSBnb3R0ZW4gbGF6aWx5XG4gIC8vIGJlY2F1c2UgdGhleSB3aWxsIGJlIGNoYW5nZWQgYnkgdm0gdXBkYXRlXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGxvY2FsLCB7XG4gICAgZ2V0dGVyczoge1xuICAgICAgZ2V0OiBub05hbWVzcGFjZVxuICAgICAgICA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0b3JlLmdldHRlcnM7IH1cbiAgICAgICAgOiBmdW5jdGlvbiAoKSB7IHJldHVybiBtYWtlTG9jYWxHZXR0ZXJzKHN0b3JlLCBuYW1lc3BhY2UpOyB9XG4gICAgfSxcbiAgICBzdGF0ZToge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnZXROZXN0ZWRTdGF0ZShzdG9yZS5zdGF0ZSwgcGF0aCk7IH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBsb2NhbFxufVxuXG5mdW5jdGlvbiBtYWtlTG9jYWxHZXR0ZXJzIChzdG9yZSwgbmFtZXNwYWNlKSB7XG4gIGlmICghc3RvcmUuX21ha2VMb2NhbEdldHRlcnNDYWNoZVtuYW1lc3BhY2VdKSB7XG4gICAgdmFyIGdldHRlcnNQcm94eSA9IHt9O1xuICAgIHZhciBzcGxpdFBvcyA9IG5hbWVzcGFjZS5sZW5ndGg7XG4gICAgT2JqZWN0LmtleXMoc3RvcmUuZ2V0dGVycykuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICAgICAgLy8gc2tpcCBpZiB0aGUgdGFyZ2V0IGdldHRlciBpcyBub3QgbWF0Y2ggdGhpcyBuYW1lc3BhY2VcbiAgICAgIGlmICh0eXBlLnNsaWNlKDAsIHNwbGl0UG9zKSAhPT0gbmFtZXNwYWNlKSB7IHJldHVybiB9XG5cbiAgICAgIC8vIGV4dHJhY3QgbG9jYWwgZ2V0dGVyIHR5cGVcbiAgICAgIHZhciBsb2NhbFR5cGUgPSB0eXBlLnNsaWNlKHNwbGl0UG9zKTtcblxuICAgICAgLy8gQWRkIGEgcG9ydCB0byB0aGUgZ2V0dGVycyBwcm94eS5cbiAgICAgIC8vIERlZmluZSBhcyBnZXR0ZXIgcHJvcGVydHkgYmVjYXVzZVxuICAgICAgLy8gd2UgZG8gbm90IHdhbnQgdG8gZXZhbHVhdGUgdGhlIGdldHRlcnMgaW4gdGhpcyB0aW1lLlxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdldHRlcnNQcm94eSwgbG9jYWxUeXBlLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RvcmUuZ2V0dGVyc1t0eXBlXTsgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgc3RvcmUuX21ha2VMb2NhbEdldHRlcnNDYWNoZVtuYW1lc3BhY2VdID0gZ2V0dGVyc1Byb3h5O1xuICB9XG5cbiAgcmV0dXJuIHN0b3JlLl9tYWtlTG9jYWxHZXR0ZXJzQ2FjaGVbbmFtZXNwYWNlXVxufVxuXG5mdW5jdGlvbiByZWdpc3Rlck11dGF0aW9uIChzdG9yZSwgdHlwZSwgaGFuZGxlciwgbG9jYWwpIHtcbiAgdmFyIGVudHJ5ID0gc3RvcmUuX211dGF0aW9uc1t0eXBlXSB8fCAoc3RvcmUuX211dGF0aW9uc1t0eXBlXSA9IFtdKTtcbiAgZW50cnkucHVzaChmdW5jdGlvbiB3cmFwcGVkTXV0YXRpb25IYW5kbGVyIChwYXlsb2FkKSB7XG4gICAgaGFuZGxlci5jYWxsKHN0b3JlLCBsb2NhbC5zdGF0ZSwgcGF5bG9hZCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWdpc3RlckFjdGlvbiAoc3RvcmUsIHR5cGUsIGhhbmRsZXIsIGxvY2FsKSB7XG4gIHZhciBlbnRyeSA9IHN0b3JlLl9hY3Rpb25zW3R5cGVdIHx8IChzdG9yZS5fYWN0aW9uc1t0eXBlXSA9IFtdKTtcbiAgZW50cnkucHVzaChmdW5jdGlvbiB3cmFwcGVkQWN0aW9uSGFuZGxlciAocGF5bG9hZCkge1xuICAgIHZhciByZXMgPSBoYW5kbGVyLmNhbGwoc3RvcmUsIHtcbiAgICAgIGRpc3BhdGNoOiBsb2NhbC5kaXNwYXRjaCxcbiAgICAgIGNvbW1pdDogbG9jYWwuY29tbWl0LFxuICAgICAgZ2V0dGVyczogbG9jYWwuZ2V0dGVycyxcbiAgICAgIHN0YXRlOiBsb2NhbC5zdGF0ZSxcbiAgICAgIHJvb3RHZXR0ZXJzOiBzdG9yZS5nZXR0ZXJzLFxuICAgICAgcm9vdFN0YXRlOiBzdG9yZS5zdGF0ZVxuICAgIH0sIHBheWxvYWQpO1xuICAgIGlmICghaXNQcm9taXNlKHJlcykpIHtcbiAgICAgIHJlcyA9IFByb21pc2UucmVzb2x2ZShyZXMpO1xuICAgIH1cbiAgICBpZiAoc3RvcmUuX2RldnRvb2xIb29rKSB7XG4gICAgICByZXR1cm4gcmVzLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgc3RvcmUuX2RldnRvb2xIb29rLmVtaXQoJ3Z1ZXg6ZXJyb3InLCBlcnIpO1xuICAgICAgICB0aHJvdyBlcnJcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWdpc3RlckdldHRlciAoc3RvcmUsIHR5cGUsIHJhd0dldHRlciwgbG9jYWwpIHtcbiAgaWYgKHN0b3JlLl93cmFwcGVkR2V0dGVyc1t0eXBlXSkge1xuICAgIGlmIChcInByb2R1Y3Rpb25cIiAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKChcIlt2dWV4XSBkdXBsaWNhdGUgZ2V0dGVyIGtleTogXCIgKyB0eXBlKSk7XG4gICAgfVxuICAgIHJldHVyblxuICB9XG4gIHN0b3JlLl93cmFwcGVkR2V0dGVyc1t0eXBlXSA9IGZ1bmN0aW9uIHdyYXBwZWRHZXR0ZXIgKHN0b3JlKSB7XG4gICAgcmV0dXJuIHJhd0dldHRlcihcbiAgICAgIGxvY2FsLnN0YXRlLCAvLyBsb2NhbCBzdGF0ZVxuICAgICAgbG9jYWwuZ2V0dGVycywgLy8gbG9jYWwgZ2V0dGVyc1xuICAgICAgc3RvcmUuc3RhdGUsIC8vIHJvb3Qgc3RhdGVcbiAgICAgIHN0b3JlLmdldHRlcnMgLy8gcm9vdCBnZXR0ZXJzXG4gICAgKVxuICB9O1xufVxuXG5mdW5jdGlvbiBlbmFibGVTdHJpY3RNb2RlIChzdG9yZSkge1xuICBzdG9yZS5fdm0uJHdhdGNoKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2RhdGEuJCRzdGF0ZSB9LCBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGFzc2VydChzdG9yZS5fY29tbWl0dGluZywgXCJkbyBub3QgbXV0YXRlIHZ1ZXggc3RvcmUgc3RhdGUgb3V0c2lkZSBtdXRhdGlvbiBoYW5kbGVycy5cIik7XG4gICAgfVxuICB9LCB7IGRlZXA6IHRydWUsIHN5bmM6IHRydWUgfSk7XG59XG5cbmZ1bmN0aW9uIGdldE5lc3RlZFN0YXRlIChzdGF0ZSwgcGF0aCkge1xuICByZXR1cm4gcGF0aC5sZW5ndGhcbiAgICA/IHBhdGgucmVkdWNlKGZ1bmN0aW9uIChzdGF0ZSwga2V5KSB7IHJldHVybiBzdGF0ZVtrZXldOyB9LCBzdGF0ZSlcbiAgICA6IHN0YXRlXG59XG5cbmZ1bmN0aW9uIHVuaWZ5T2JqZWN0U3R5bGUgKHR5cGUsIHBheWxvYWQsIG9wdGlvbnMpIHtcbiAgaWYgKGlzT2JqZWN0KHR5cGUpICYmIHR5cGUudHlwZSkge1xuICAgIG9wdGlvbnMgPSBwYXlsb2FkO1xuICAgIHBheWxvYWQgPSB0eXBlO1xuICAgIHR5cGUgPSB0eXBlLnR5cGU7XG4gIH1cblxuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydCh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycsIChcImV4cGVjdHMgc3RyaW5nIGFzIHRoZSB0eXBlLCBidXQgZm91bmQgXCIgKyAodHlwZW9mIHR5cGUpICsgXCIuXCIpKTtcbiAgfVxuXG4gIHJldHVybiB7IHR5cGU6IHR5cGUsIHBheWxvYWQ6IHBheWxvYWQsIG9wdGlvbnM6IG9wdGlvbnMgfVxufVxuXG5mdW5jdGlvbiBpbnN0YWxsIChfVnVlKSB7XG4gIGlmIChWdWUgJiYgX1Z1ZSA9PT0gVnVlKSB7XG4gICAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICdbdnVleF0gYWxyZWFkeSBpbnN0YWxsZWQuIFZ1ZS51c2UoVnVleCkgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IG9uY2UuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgVnVlID0gX1Z1ZTtcbiAgYXBwbHlNaXhpbihWdWUpO1xufVxuXG4vKipcbiAqIFJlZHVjZSB0aGUgY29kZSB3aGljaCB3cml0dGVuIGluIFZ1ZS5qcyBmb3IgZ2V0dGluZyB0aGUgc3RhdGUuXG4gKiBAcGFyYW0ge1N0cmluZ30gW25hbWVzcGFjZV0gLSBNb2R1bGUncyBuYW1lc3BhY2VcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBzdGF0ZXMgIyBPYmplY3QncyBpdGVtIGNhbiBiZSBhIGZ1bmN0aW9uIHdoaWNoIGFjY2VwdCBzdGF0ZSBhbmQgZ2V0dGVycyBmb3IgcGFyYW0sIHlvdSBjYW4gZG8gc29tZXRoaW5nIGZvciBzdGF0ZSBhbmQgZ2V0dGVycyBpbiBpdC5cbiAqIEBwYXJhbSB7T2JqZWN0fVxuICovXG52YXIgbWFwU3RhdGUgPSBub3JtYWxpemVOYW1lc3BhY2UoZnVuY3Rpb24gKG5hbWVzcGFjZSwgc3RhdGVzKSB7XG4gIHZhciByZXMgPSB7fTtcbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicgJiYgIWlzVmFsaWRNYXAoc3RhdGVzKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ1t2dWV4XSBtYXBTdGF0ZTogbWFwcGVyIHBhcmFtZXRlciBtdXN0IGJlIGVpdGhlciBhbiBBcnJheSBvciBhbiBPYmplY3QnKTtcbiAgfVxuICBub3JtYWxpemVNYXAoc3RhdGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChyZWYpIHtcbiAgICB2YXIga2V5ID0gcmVmLmtleTtcbiAgICB2YXIgdmFsID0gcmVmLnZhbDtcblxuICAgIHJlc1trZXldID0gZnVuY3Rpb24gbWFwcGVkU3RhdGUgKCkge1xuICAgICAgdmFyIHN0YXRlID0gdGhpcy4kc3RvcmUuc3RhdGU7XG4gICAgICB2YXIgZ2V0dGVycyA9IHRoaXMuJHN0b3JlLmdldHRlcnM7XG4gICAgICBpZiAobmFtZXNwYWNlKSB7XG4gICAgICAgIHZhciBtb2R1bGUgPSBnZXRNb2R1bGVCeU5hbWVzcGFjZSh0aGlzLiRzdG9yZSwgJ21hcFN0YXRlJywgbmFtZXNwYWNlKTtcbiAgICAgICAgaWYgKCFtb2R1bGUpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IG1vZHVsZS5jb250ZXh0LnN0YXRlO1xuICAgICAgICBnZXR0ZXJzID0gbW9kdWxlLmNvbnRleHQuZ2V0dGVycztcbiAgICAgIH1cbiAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gdmFsLmNhbGwodGhpcywgc3RhdGUsIGdldHRlcnMpXG4gICAgICAgIDogc3RhdGVbdmFsXVxuICAgIH07XG4gICAgLy8gbWFyayB2dWV4IGdldHRlciBmb3IgZGV2dG9vbHNcbiAgICByZXNba2V5XS52dWV4ID0gdHJ1ZTtcbiAgfSk7XG4gIHJldHVybiByZXNcbn0pO1xuXG4vKipcbiAqIFJlZHVjZSB0aGUgY29kZSB3aGljaCB3cml0dGVuIGluIFZ1ZS5qcyBmb3IgY29tbWl0dGluZyB0aGUgbXV0YXRpb25cbiAqIEBwYXJhbSB7U3RyaW5nfSBbbmFtZXNwYWNlXSAtIE1vZHVsZSdzIG5hbWVzcGFjZVxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG11dGF0aW9ucyAjIE9iamVjdCdzIGl0ZW0gY2FuIGJlIGEgZnVuY3Rpb24gd2hpY2ggYWNjZXB0IGBjb21taXRgIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBwYXJhbSwgaXQgY2FuIGFjY2VwdCBhbnRob3IgcGFyYW1zLiBZb3UgY2FuIGNvbW1pdCBtdXRhdGlvbiBhbmQgZG8gYW55IG90aGVyIHRoaW5ncyBpbiB0aGlzIGZ1bmN0aW9uLiBzcGVjaWFsbHksIFlvdSBuZWVkIHRvIHBhc3MgYW50aG9yIHBhcmFtcyBmcm9tIHRoZSBtYXBwZWQgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbnZhciBtYXBNdXRhdGlvbnMgPSBub3JtYWxpemVOYW1lc3BhY2UoZnVuY3Rpb24gKG5hbWVzcGFjZSwgbXV0YXRpb25zKSB7XG4gIHZhciByZXMgPSB7fTtcbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicgJiYgIWlzVmFsaWRNYXAobXV0YXRpb25zKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ1t2dWV4XSBtYXBNdXRhdGlvbnM6IG1hcHBlciBwYXJhbWV0ZXIgbXVzdCBiZSBlaXRoZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0Jyk7XG4gIH1cbiAgbm9ybWFsaXplTWFwKG11dGF0aW9ucykuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7XG4gICAgdmFyIGtleSA9IHJlZi5rZXk7XG4gICAgdmFyIHZhbCA9IHJlZi52YWw7XG5cbiAgICByZXNba2V5XSA9IGZ1bmN0aW9uIG1hcHBlZE11dGF0aW9uICgpIHtcbiAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAvLyBHZXQgdGhlIGNvbW1pdCBtZXRob2QgZnJvbSBzdG9yZVxuICAgICAgdmFyIGNvbW1pdCA9IHRoaXMuJHN0b3JlLmNvbW1pdDtcbiAgICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgICAgdmFyIG1vZHVsZSA9IGdldE1vZHVsZUJ5TmFtZXNwYWNlKHRoaXMuJHN0b3JlLCAnbWFwTXV0YXRpb25zJywgbmFtZXNwYWNlKTtcbiAgICAgICAgaWYgKCFtb2R1bGUpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBjb21taXQgPSBtb2R1bGUuY29udGV4dC5jb21taXQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHZhbC5hcHBseSh0aGlzLCBbY29tbWl0XS5jb25jYXQoYXJncykpXG4gICAgICAgIDogY29tbWl0LmFwcGx5KHRoaXMuJHN0b3JlLCBbdmFsXS5jb25jYXQoYXJncykpXG4gICAgfTtcbiAgfSk7XG4gIHJldHVybiByZXNcbn0pO1xuXG4vKipcbiAqIFJlZHVjZSB0aGUgY29kZSB3aGljaCB3cml0dGVuIGluIFZ1ZS5qcyBmb3IgZ2V0dGluZyB0aGUgZ2V0dGVyc1xuICogQHBhcmFtIHtTdHJpbmd9IFtuYW1lc3BhY2VdIC0gTW9kdWxlJ3MgbmFtZXNwYWNlXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gZ2V0dGVyc1xuICogQHJldHVybiB7T2JqZWN0fVxuICovXG52YXIgbWFwR2V0dGVycyA9IG5vcm1hbGl6ZU5hbWVzcGFjZShmdW5jdGlvbiAobmFtZXNwYWNlLCBnZXR0ZXJzKSB7XG4gIHZhciByZXMgPSB7fTtcbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicgJiYgIWlzVmFsaWRNYXAoZ2V0dGVycykpIHtcbiAgICBjb25zb2xlLmVycm9yKCdbdnVleF0gbWFwR2V0dGVyczogbWFwcGVyIHBhcmFtZXRlciBtdXN0IGJlIGVpdGhlciBhbiBBcnJheSBvciBhbiBPYmplY3QnKTtcbiAgfVxuICBub3JtYWxpemVNYXAoZ2V0dGVycykuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7XG4gICAgdmFyIGtleSA9IHJlZi5rZXk7XG4gICAgdmFyIHZhbCA9IHJlZi52YWw7XG5cbiAgICAvLyBUaGUgbmFtZXNwYWNlIGhhcyBiZWVuIG11dGF0ZWQgYnkgbm9ybWFsaXplTmFtZXNwYWNlXG4gICAgdmFsID0gbmFtZXNwYWNlICsgdmFsO1xuICAgIHJlc1trZXldID0gZnVuY3Rpb24gbWFwcGVkR2V0dGVyICgpIHtcbiAgICAgIGlmIChuYW1lc3BhY2UgJiYgIWdldE1vZHVsZUJ5TmFtZXNwYWNlKHRoaXMuJHN0b3JlLCAnbWFwR2V0dGVycycsIG5hbWVzcGFjZSkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJyAmJiAhKHZhbCBpbiB0aGlzLiRzdG9yZS5nZXR0ZXJzKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKChcIlt2dWV4XSB1bmtub3duIGdldHRlcjogXCIgKyB2YWwpKTtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy4kc3RvcmUuZ2V0dGVyc1t2YWxdXG4gICAgfTtcbiAgICAvLyBtYXJrIHZ1ZXggZ2V0dGVyIGZvciBkZXZ0b29sc1xuICAgIHJlc1trZXldLnZ1ZXggPSB0cnVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc1xufSk7XG5cbi8qKlxuICogUmVkdWNlIHRoZSBjb2RlIHdoaWNoIHdyaXR0ZW4gaW4gVnVlLmpzIGZvciBkaXNwYXRjaCB0aGUgYWN0aW9uXG4gKiBAcGFyYW0ge1N0cmluZ30gW25hbWVzcGFjZV0gLSBNb2R1bGUncyBuYW1lc3BhY2VcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBhY3Rpb25zICMgT2JqZWN0J3MgaXRlbSBjYW4gYmUgYSBmdW5jdGlvbiB3aGljaCBhY2NlcHQgYGRpc3BhdGNoYCBmdW5jdGlvbiBhcyB0aGUgZmlyc3QgcGFyYW0sIGl0IGNhbiBhY2NlcHQgYW50aG9yIHBhcmFtcy4gWW91IGNhbiBkaXNwYXRjaCBhY3Rpb24gYW5kIGRvIGFueSBvdGhlciB0aGluZ3MgaW4gdGhpcyBmdW5jdGlvbi4gc3BlY2lhbGx5LCBZb3UgbmVlZCB0byBwYXNzIGFudGhvciBwYXJhbXMgZnJvbSB0aGUgbWFwcGVkIGZ1bmN0aW9uLlxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG52YXIgbWFwQWN0aW9ucyA9IG5vcm1hbGl6ZU5hbWVzcGFjZShmdW5jdGlvbiAobmFtZXNwYWNlLCBhY3Rpb25zKSB7XG4gIHZhciByZXMgPSB7fTtcbiAgaWYgKFwicHJvZHVjdGlvblwiICE9PSAncHJvZHVjdGlvbicgJiYgIWlzVmFsaWRNYXAoYWN0aW9ucykpIHtcbiAgICBjb25zb2xlLmVycm9yKCdbdnVleF0gbWFwQWN0aW9uczogbWFwcGVyIHBhcmFtZXRlciBtdXN0IGJlIGVpdGhlciBhbiBBcnJheSBvciBhbiBPYmplY3QnKTtcbiAgfVxuICBub3JtYWxpemVNYXAoYWN0aW9ucykuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7XG4gICAgdmFyIGtleSA9IHJlZi5rZXk7XG4gICAgdmFyIHZhbCA9IHJlZi52YWw7XG5cbiAgICByZXNba2V5XSA9IGZ1bmN0aW9uIG1hcHBlZEFjdGlvbiAoKSB7XG4gICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgLy8gZ2V0IGRpc3BhdGNoIGZ1bmN0aW9uIGZyb20gc3RvcmVcbiAgICAgIHZhciBkaXNwYXRjaCA9IHRoaXMuJHN0b3JlLmRpc3BhdGNoO1xuICAgICAgaWYgKG5hbWVzcGFjZSkge1xuICAgICAgICB2YXIgbW9kdWxlID0gZ2V0TW9kdWxlQnlOYW1lc3BhY2UodGhpcy4kc3RvcmUsICdtYXBBY3Rpb25zJywgbmFtZXNwYWNlKTtcbiAgICAgICAgaWYgKCFtb2R1bGUpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBkaXNwYXRjaCA9IG1vZHVsZS5jb250ZXh0LmRpc3BhdGNoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyB2YWwuYXBwbHkodGhpcywgW2Rpc3BhdGNoXS5jb25jYXQoYXJncykpXG4gICAgICAgIDogZGlzcGF0Y2guYXBwbHkodGhpcy4kc3RvcmUsIFt2YWxdLmNvbmNhdChhcmdzKSlcbiAgICB9O1xuICB9KTtcbiAgcmV0dXJuIHJlc1xufSk7XG5cbi8qKlxuICogUmViaW5kaW5nIG5hbWVzcGFjZSBwYXJhbSBmb3IgbWFwWFhYIGZ1bmN0aW9uIGluIHNwZWNpYWwgc2NvcGVkLCBhbmQgcmV0dXJuIHRoZW0gYnkgc2ltcGxlIG9iamVjdFxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG52YXIgY3JlYXRlTmFtZXNwYWNlZEhlbHBlcnMgPSBmdW5jdGlvbiAobmFtZXNwYWNlKSB7IHJldHVybiAoe1xuICBtYXBTdGF0ZTogbWFwU3RhdGUuYmluZChudWxsLCBuYW1lc3BhY2UpLFxuICBtYXBHZXR0ZXJzOiBtYXBHZXR0ZXJzLmJpbmQobnVsbCwgbmFtZXNwYWNlKSxcbiAgbWFwTXV0YXRpb25zOiBtYXBNdXRhdGlvbnMuYmluZChudWxsLCBuYW1lc3BhY2UpLFxuICBtYXBBY3Rpb25zOiBtYXBBY3Rpb25zLmJpbmQobnVsbCwgbmFtZXNwYWNlKVxufSk7IH07XG5cbi8qKlxuICogTm9ybWFsaXplIHRoZSBtYXBcbiAqIG5vcm1hbGl6ZU1hcChbMSwgMiwgM10pID0+IFsgeyBrZXk6IDEsIHZhbDogMSB9LCB7IGtleTogMiwgdmFsOiAyIH0sIHsga2V5OiAzLCB2YWw6IDMgfSBdXG4gKiBub3JtYWxpemVNYXAoe2E6IDEsIGI6IDIsIGM6IDN9KSA9PiBbIHsga2V5OiAnYScsIHZhbDogMSB9LCB7IGtleTogJ2InLCB2YWw6IDIgfSwgeyBrZXk6ICdjJywgdmFsOiAzIH0gXVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IG1hcFxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBub3JtYWxpemVNYXAgKG1hcCkge1xuICBpZiAoIWlzVmFsaWRNYXAobWFwKSkge1xuICAgIHJldHVybiBbXVxuICB9XG4gIHJldHVybiBBcnJheS5pc0FycmF5KG1hcClcbiAgICA/IG1hcC5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gKHsga2V5OiBrZXksIHZhbDoga2V5IH0pOyB9KVxuICAgIDogT2JqZWN0LmtleXMobWFwKS5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gKHsga2V5OiBrZXksIHZhbDogbWFwW2tleV0gfSk7IH0pXG59XG5cbi8qKlxuICogVmFsaWRhdGUgd2hldGhlciBnaXZlbiBtYXAgaXMgdmFsaWQgb3Igbm90XG4gKiBAcGFyYW0geyp9IG1hcFxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNWYWxpZE1hcCAobWFwKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KG1hcCkgfHwgaXNPYmplY3QobWFwKVxufVxuXG4vKipcbiAqIFJldHVybiBhIGZ1bmN0aW9uIGV4cGVjdCB0d28gcGFyYW0gY29udGFpbnMgbmFtZXNwYWNlIGFuZCBtYXAuIGl0IHdpbGwgbm9ybWFsaXplIHRoZSBuYW1lc3BhY2UgYW5kIHRoZW4gdGhlIHBhcmFtJ3MgZnVuY3Rpb24gd2lsbCBoYW5kbGUgdGhlIG5ldyBuYW1lc3BhY2UgYW5kIHRoZSBtYXAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWVzcGFjZSAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1hcCkge1xuICAgIGlmICh0eXBlb2YgbmFtZXNwYWNlICE9PSAnc3RyaW5nJykge1xuICAgICAgbWFwID0gbmFtZXNwYWNlO1xuICAgICAgbmFtZXNwYWNlID0gJyc7XG4gICAgfSBlbHNlIGlmIChuYW1lc3BhY2UuY2hhckF0KG5hbWVzcGFjZS5sZW5ndGggLSAxKSAhPT0gJy8nKSB7XG4gICAgICBuYW1lc3BhY2UgKz0gJy8nO1xuICAgIH1cbiAgICByZXR1cm4gZm4obmFtZXNwYWNlLCBtYXApXG4gIH1cbn1cblxuLyoqXG4gKiBTZWFyY2ggYSBzcGVjaWFsIG1vZHVsZSBmcm9tIHN0b3JlIGJ5IG5hbWVzcGFjZS4gaWYgbW9kdWxlIG5vdCBleGlzdCwgcHJpbnQgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdG9yZVxuICogQHBhcmFtIHtTdHJpbmd9IGhlbHBlclxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBnZXRNb2R1bGVCeU5hbWVzcGFjZSAoc3RvcmUsIGhlbHBlciwgbmFtZXNwYWNlKSB7XG4gIHZhciBtb2R1bGUgPSBzdG9yZS5fbW9kdWxlc05hbWVzcGFjZU1hcFtuYW1lc3BhY2VdO1xuICBpZiAoXCJwcm9kdWN0aW9uXCIgIT09ICdwcm9kdWN0aW9uJyAmJiAhbW9kdWxlKSB7XG4gICAgY29uc29sZS5lcnJvcigoXCJbdnVleF0gbW9kdWxlIG5hbWVzcGFjZSBub3QgZm91bmQgaW4gXCIgKyBoZWxwZXIgKyBcIigpOiBcIiArIG5hbWVzcGFjZSkpO1xuICB9XG4gIHJldHVybiBtb2R1bGVcbn1cblxudmFyIGluZGV4ID0ge1xuICBTdG9yZTogU3RvcmUsXG4gIGluc3RhbGw6IGluc3RhbGwsXG4gIHZlcnNpb246ICczLjEuMicsXG4gIG1hcFN0YXRlOiBtYXBTdGF0ZSxcbiAgbWFwTXV0YXRpb25zOiBtYXBNdXRhdGlvbnMsXG4gIG1hcEdldHRlcnM6IG1hcEdldHRlcnMsXG4gIG1hcEFjdGlvbnM6IG1hcEFjdGlvbnMsXG4gIGNyZWF0ZU5hbWVzcGFjZWRIZWxwZXJzOiBjcmVhdGVOYW1lc3BhY2VkSGVscGVyc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbmRleDtcbiIsImltcG9ydCAnZXM2LXByb21pc2UvYXV0byc7XG5cbmltcG9ydCBvYmplY3RGaXRJbWFnZXMgZnJvbSAnb2JqZWN0LWZpdC1pbWFnZXMnO1xuaW1wb3J0IGltYWdlUG9wdXAgZnJvbSAnLi9tb2R1bGVzL2ltYWdlLXBvcHVwJztcbmltcG9ydCB2aWRlb1BvcHVwIGZyb20gJy4vbW9kdWxlcy92aWRlby1wb3B1cCc7XG5pbXBvcnQgbWFjaGluZVNlYXJjaCBmcm9tICcuL21vZHVsZXMvbWFjaGluZS1zZWFyY2gnO1xuaW1wb3J0IGJyYW5jaEJhciBmcm9tICcuL21vZHVsZXMvYnJhbmNoLWJhcic7XG5pbXBvcnQgY3VzdG9tU2VsZWN0IGZyb20gJy4vbW9kdWxlcy9jdXN0b20tc2VsZWN0JztcbmltcG9ydCBuYXZpZ2F0aW9uIGZyb20gJy4vbW9kdWxlcy9uYXZpZ2F0aW9uJztcbmltcG9ydCBzaG93SW5wdXRzIGZyb20gJy4vbW9kdWxlcy9zaG93LW1vcmUtZmlsZS1pbnB1dHMnO1xuaW1wb3J0IGZpbHRlck1hY2hpbmVBY2Nlc3NvcmllcyBmcm9tICcuL21vZHVsZXMvZmlsdGVyLW1hY2hpbmUtYWNjZXNzb3JpZXMnO1xuaW1wb3J0IGZpbHRlck5ld3MgZnJvbSAnLi9tb2R1bGVzL2ZpbHRlci1uZXdzJztcbmltcG9ydCBjdXN0b21PcmRlcmVySW5mbyBmcm9tICcuL21vZHVsZXMvY3VzdG9tLW9yZGVyZXItaW5mbyc7XG5pbXBvcnQgY29sbGVjdGlvbk1ha2VyIGZyb20gJy4vbW9kdWxlcy9jb2xsZWN0aW9uLW1ha2VyJztcbmltcG9ydCBzZWxlY3RNYXRlcmlhbExhbmd1YWdlIGZyb20gJy4vbW9kdWxlcy9zZWxlY3QtbWF0ZXJpYWwtbGFuZ3VhZ2UnO1xuXG5cbmltcG9ydCBjdXN0b21lcnNBcHAgZnJvbSAnLi9tb2R1bGVzL3Z1ZS9hcHBzL2N1c3RvbWVycy1hcHAvJztcbmltcG9ydCB1c2VyU2V0dGluZ3NBcHAgZnJvbSAnLi9tb2R1bGVzL3Z1ZS9hcHBzL3VzZXItc2V0dGluZ3MtYXBwLyc7XG5pbXBvcnQgZm9yZ290dGVuUGFzc3dvcmRBcHAgZnJvbSAnLi9tb2R1bGVzL3Z1ZS9hcHBzL2ZvcmdvdHRlbi1wYXNzd29yZC1hcHAvJztcbmltcG9ydCB1cGRhdGVQYXNzd29yZEFwcCBmcm9tICcuL21vZHVsZXMvdnVlL2FwcHMvdXBkYXRlLXBhc3N3b3JkLWFwcC8nO1xuaW1wb3J0IG93bkNvbXBhbnlBcHAgZnJvbSAnLi9tb2R1bGVzL3Z1ZS9hcHBzL293bi1jb21wYW55LWFwcCc7XG5pbXBvcnQgY3VzdG9tZXJNYWNoaW5lc0FwcCBmcm9tICcuL21vZHVsZXMvdnVlL2FwcHMvY3VzdG9tZXItbWFjaGluZXMtYXBwJztcbmltcG9ydCBjb21wbGFpbnRzQXBwIGZyb20gJy4vbW9kdWxlcy92dWUvYXBwcy9jb21wbGFpbnRzLWFwcCc7XG5pbXBvcnQgd2FycmFudHlSZWdpc3RyYXRpb25zQXBwIGZyb20gJy4vbW9kdWxlcy92dWUvYXBwcy93YXJyYW50eS1yZWdpc3RyYXRpb25zLWFwcCc7XG5cbi8vIEFjdGl2YXRlIHNlcnZlciB3b3JrZXJcbmlmICgnc2VydmljZVdvcmtlcicgaW4gbmF2aWdhdG9yKSB7XG4gIGlmIChwcm9jZXNzLmVudi5MT0NBTF9NT0RFKSB7XG4gICAgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0ZXIoJy9sb2NhbC1zZXJ2aWNlLXdvcmtlci5qcycsIHsgc2NvcGU6ICcvJyB9KS50aGVuKGZ1bmN0aW9uIChyZWcpIHtcbiAgICAgIC8vIHJlZ2lzdHJhdGlvbiB3b3JrZWRcbiAgICAgIGNvbnNvbGUubG9nKCdMb2NhbCBzZXJ2aWNlIHdvcmtlciB2ZXJzaW9uIHJlZ2lzdHJhdGlvbiBzdWNjZWVkZWQuIFNjb3BlIGlzICcgKyByZWcuc2NvcGUpO1xuICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgLy8gcmVnaXN0cmF0aW9uIGZhaWxlZFxuICAgICAgY29uc29sZS5sb2coJ0xvY2FsIHNlcnZpY2Ugd29ya2VyIHJlZ2lzdHJhdGlvbiBmYWlsZWQuJyk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0ZXIoJy9zdGF0aWMvc3R1ZGlvL3B1Yi93ZWIvdjEvJyArIHByb2Nlc3MuZW52LlJFU09VUkNFX0ZPTERFUiArICcvc2VydmljZS13b3JrZXIuanMnLCB7IHNjb3BlOiAnLycgfSlcbiAgICAgIC50aGVuKGZ1bmN0aW9uIChyZWcpIHtcbiAgICAgICAgLy8gcmVnaXN0cmF0aW9uIHdvcmtlZFxuICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgIC8vIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiAgICAgICAgY29uc29sZS5sb2coJ1NlcnZpY2Ugd29ya2VyIHJlZ2lzdHJhdGlvbiBmYWlsZWQuJyk7XG4gICAgICB9KTtcbiAgfVxufVxuXG4vLyBWdWUgYXBwc1xuY3VzdG9tZXJzQXBwLmluaXQoJ2pzLWN1c3RvbWVycy1hcHAnKTtcbnVzZXJTZXR0aW5nc0FwcC5pbml0KCdqcy11c2VyLXNldHRpbmdzLWFwcCcpO1xuZm9yZ290dGVuUGFzc3dvcmRBcHAuaW5pdCgnanMtZm9yZ290LXBhc3N3b3JkLWFwcCcpO1xudXBkYXRlUGFzc3dvcmRBcHAuaW5pdCgnanMtdXBkYXRlLXBhc3N3b3JkLWFwcCcpO1xub3duQ29tcGFueUFwcC5pbml0KCdqcy1vd24tY29tcGFueS1hcHAnKTtcbmN1c3RvbWVyTWFjaGluZXNBcHAuaW5pdCgnanMtY3VzdG9tZXItbWFjaGluZXMtYXBwJyk7XG5jb21wbGFpbnRzQXBwLmluaXQoJ2pzLWNvbXBsYWludHMtYXBwJyk7XG53YXJyYW50eVJlZ2lzdHJhdGlvbnNBcHAuaW5pdCgnanMtd2FycmFudHktcmVnaXN0cmF0aW9ucy1hcHAnKTtcblxubmF2aWdhdGlvbi5pbml0KCk7XG5zaG93SW5wdXRzLmluaXQoKTtcbmJyYW5jaEJhci5pbml0KCk7XG5jdXN0b21TZWxlY3QuaW5pdCgpO1xuY3VzdG9tT3JkZXJlckluZm8uaW5pdCgpO1xuZmlsdGVyTmV3cy5pbml0KCk7XG5maWx0ZXJNYWNoaW5lQWNjZXNzb3JpZXMuaW5pdCgpO1xubWFjaGluZVNlYXJjaC5pbml0KCk7XG5pbWFnZVBvcHVwLmluaXQoJy5qcy1wb3B1cC1pbWFnZScpO1xudmlkZW9Qb3B1cC5pbml0KCcuanMtcG9wdXAtdmlkZW8nKTtcbmNvbGxlY3Rpb25NYWtlci5pbml0KCk7XG5zZWxlY3RNYXRlcmlhbExhbmd1YWdlLmluaXQoKTtcblxuLy9Qb2x5ZmlsbHNcblxuaW1wb3J0ICdwb2x5ZmlsbC1hcnJheS1pbmNsdWRlcyc7XG4vL1BvbHlmaWxsIE9iamVjdC5hc3NpZ24oKVxucmVxdWlyZSgnZXM2LW9iamVjdC1hc3NpZ24vYXV0bycpO1xuLy8gUG9seWZpbGwgb2JqZWN0LWZpdCBjc3MgcHJvcGVydHkgZm9yIElFIGJyb3dzZXJzXG5vYmplY3RGaXRJbWFnZXMoJy5qcy1vYmplY3QtZml0Jyk7XG4iLCJcbmNvbnN0IEdBVHJhY2tpbmdDb2RlID0gJ1VBLTQ4MzE4ODktMzAnO1xubGV0IEdBQ3JlYXRlZCA9IG51bGw7XG5cbi8qKlxuICogU2VuZCBldmVudCB0byBHb29nbGUgYW5hbHl0aWNzXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRDYXRlZ29yeSBldmVudCBjYXRlZ29yeVxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50QWN0aW9uIGV2ZW50IGFjdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TGFiZWwgZXZlbnQgbGFiZWxcbiAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnRWYWx1ZSBldmVudCB2YWx1ZVxuKi9cbmZ1bmN0aW9uIHNlbmRHQUV2ZW50KGV2ZW50Q2F0ZWdvcnksIGV2ZW50QWN0aW9uLCBldmVudExhYmVsLCBldmVudFZhbHVlKSB7XG4gIGlmKCB0eXBlb2Ygd2luZG93LmdhICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZ2EgKXtcblxuICAgIGlmKCAhR0FDcmVhdGVkICl7XG4gICAgICB3aW5kb3cuZ2EoJ2NyZWF0ZScsIEdBVHJhY2tpbmdDb2RlLCAnYXV0bycpO1xuICAgICAgR0FDcmVhdGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB3aW5kb3cuZ2EoJ3NlbmQnLCB7XG4gICAgICBoaXRUeXBlOiAnZXZlbnQnLFxuICAgICAgZXZlbnRDYXRlZ29yeSxcbiAgICAgIGV2ZW50QWN0aW9uLFxuICAgICAgZXZlbnRMYWJlbCxcbiAgICAgIGV2ZW50VmFsdWVcbiAgICB9KTtcbiAgfVxufVxuXG4vKlxuUHVzaCBldmVudCBkZXRhaWxzIHRvIERhdGFsYXllciwgdG8gYmUgcGFzc2VkIHRvIEdvb2dsZSBzZXJ2aWNlcyAoVGFnIE1hbmFnZXIpXG4qL1xuZnVuY3Rpb24gcHVzaEV2ZW50VG9EYXRhbGF5ZXIoZXZlbnQpIHtcbiAgaWYodHlwZW9mIHdpbmRvdy5kYXRhTGF5ZXIgIT09ICd1bmRlZmluZWQnKXtcbiAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goe1xuICAgICAgJ2V2ZW50JzogJ2dhRXZlbnQnLFxuICAgICAgJ2V2ZW50Q2F0ZWdvcnknOiBldmVudC5ldmVudENhdGVnb3J5LFxuICAgICAgJ2V2ZW50QWN0aW9uJzogZXZlbnQuZXZlbnRBY3Rpb24sXG4gICAgICAnZXZlbnRMYWJlbCc6IGV2ZW50LmV2ZW50TGFiZWxcbiAgICB9KTtcbiAgfVxufVxuXG4vKlxuUHVzaCBvYmplY3QgdG8gRGF0YWxheWVyLCB0byBiZSBwYXNzZWQgdG8gR29vZ2xlIHNlcnZpY2VzIChUYWcgTWFuYWdlcilcbiovXG5mdW5jdGlvbiBwdXNoT2JqZWN0VG9EYXRhbGF5ZXIob2JqZWN0KSB7XG4gIGlmKHR5cGVvZiB3aW5kb3cuZGF0YUxheWVyICE9PSAndW5kZWZpbmVkJyl7XG4gICAgd2luZG93LmRhdGFMYXllci5wdXNoKG9iamVjdCk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHB1c2hFdmVudFRvRGF0YWxheWVyLCBwdXNoT2JqZWN0VG9EYXRhbGF5ZXIsIHNlbmRHQUV2ZW50XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYnJhbmNoQmFyID0ge1xuICBfbWluaWZpZWRDbGFzczogJ2JyYW5jaC1iYXItLW1pbmlmaWVkJyxcbiAgX2hpZGRlbkNsYXNzOiAnYnJhbmNoLWJhci0taGlkZGVuJyxcbiAgX3N0b3JhZ2VTZXR0aW5nczogbnVsbCxcbiAgX2ZvbGRlcklkOiBudWxsLFxuICBfc2V0dGluZ3NLZXk6IG51bGwsXG4gIF9kb206IHtcbiAgICBiYXI6IG51bGwsXG4gICAgdG9nZ2xlczogbnVsbCxcbiAgICBwYWdlU2VsZWN0czogbnVsbFxuICB9LFxuICBfaXNMb2NhbFN0b3JhZ2VFbmFibGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRlc3QgPSAnYnJhbmNoLWJhci10ZXN0JztcblxuICAgIHRyeSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0ZXN0LCB0ZXN0KTtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRlc3QpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSxcbiAgX2lzTWluaWZpZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fZG9tLmJhci5jbGFzc05hbWUuc3BsaXQoJyAnKS5pbmRleE9mKHRoaXMuX21pbmlmaWVkQ2xhc3MpID49IDA7XG4gIH0sXG4gIF9nZXRTZXR0aW5nczogZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZXR0aW5ncyA9IG51bGw7XG5cbiAgICBpZiAoIXRoaXMuX2lzTG9jYWxTdG9yYWdlRW5hYmxlZCgpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5fZm9sZGVySWQgPSB0aGlzLl9kb20uYmFyLmdldEF0dHJpYnV0ZSgnZGF0YS1mb2xkZXItaWQnKTtcbiAgICB0aGlzLl9zZXR0aW5nc0tleSA9ICdicmFuY2gtYmFyLS0nICsgdGhpcy5fZm9sZGVySWQ7XG4gICAgaWYgKHRoaXMuX3NldHRpbmdzS2V5KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXR0aW5ncyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5fc2V0dGluZ3NLZXkpKTtcbiAgICAgICAgcmV0dXJuIHNldHRpbmdzO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2V0dGluZ3M7XG4gIH0sXG4gIF91cGRhdGVTZXR0aW5nczogZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5faXNMb2NhbFN0b3JhZ2VFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3N0b3JhZ2VTZXR0aW5ncykge1xuICAgICAgdGhpcy5fc3RvcmFnZVNldHRpbmdzID0ge307XG4gICAgfVxuXG4gICAgdGhpcy5fc3RvcmFnZVNldHRpbmdzLm1pbmlmaWVkID0gdGhpcy5faXNNaW5pZmllZCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuX3NldHRpbmdzS2V5LCBKU09OLnN0cmluZ2lmeSh0aGlzLl9zdG9yYWdlU2V0dGluZ3MpKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sXG4gIF90b2dnbGVNaW5pZmllZDogZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLl9pc01pbmlmaWVkKCkpIHtcbiAgICAgIHZhciByZWcgPSBuZXcgUmVnRXhwKCcoXFxcXHN8XiknICsgdGhpcy5fbWluaWZpZWRDbGFzcyArICcoXFxcXHN8JCknKTtcbiAgICAgIHRoaXMuX2RvbS5iYXIuY2xhc3NOYW1lID0gdGhpcy5fZG9tLmJhci5jbGFzc05hbWUucmVwbGFjZShyZWcsICcgJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2RvbS5iYXIuY2xhc3NOYW1lICs9ICcgJyArIHRoaXMuX21pbmlmaWVkQ2xhc3M7XG4gICAgfVxuICB9LFxuICBfaW5pdFRvZ2dsZXM6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB0aGlzLl9kb20udG9nZ2xlcyA9IHRoaXMuX2RvbS5iYXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnanMtYnJhbmNoLWJhcl9fdG9nZ2xlJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMuX2RvbS50b2dnbGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgdGhpcy5fZG9tLnRvZ2dsZXNbaV0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNlbGYuX3RvZ2dsZU1pbmlmaWVkKCk7XG4gICAgICAgIHNlbGYuX3VwZGF0ZVNldHRpbmdzKCk7XG4gICAgICB9LCBmYWxzZSk7XG4gICAgfVxuICB9LFxuICBfaW5pdFBhZ2VTZWxlY3RzOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fZG9tLnBhZ2VTZWxlY3RzID0gdGhpcy5fZG9tLmJhci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdqcy1icmFuY2gtYmFyX19wYWdlLXNlbGVjdCcpO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLl9kb20ucGFnZVNlbGVjdHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB0aGlzLl9kb20ucGFnZVNlbGVjdHNbaV0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgdmFyIHZhbCA9IGUudGFyZ2V0LnZhbHVlO1xuXG4gICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgfSwgZmFsc2UpO1xuICAgIH1cbiAgfSxcbiAgX3Nob3dCYXI6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVnID0gbmV3IFJlZ0V4cCgnKFxcXFxzfF4pJyArIHRoaXMuX2hpZGRlbkNsYXNzICsgJyhcXFxcc3wkKScpO1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHNlbGYuX2RvbS5iYXIuY2xhc3NOYW1lID0gc2VsZi5fZG9tLmJhci5jbGFzc05hbWUucmVwbGFjZShyZWcsICcgJyk7XG4gIH0sXG4gIGluaXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9kb20uYmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2pzLWJyYW5jaC1iYXInKTsgLy8gQXNzdW1lcyBvbmx5IG9uZSBiYXIgcGVyIHBhZ2VcblxuICAgIGlmICh0aGlzLl9kb20uYmFyKSB7XG4gICAgICB0aGlzLl9zdG9yYWdlU2V0dGluZ3MgPSB0aGlzLl9nZXRTZXR0aW5ncygpO1xuXG4gICAgICAvLyBJZiB1c2VyIGxlZnQgdGhlIGJhciBvcGVuXG4gICAgICBpZiAodGhpcy5fc3RvcmFnZVNldHRpbmdzICYmICF0aGlzLl9zdG9yYWdlU2V0dGluZ3MubWluaWZpZWQpIHtcbiAgICAgICAgdGhpcy5fdG9nZ2xlTWluaWZpZWQoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faW5pdFRvZ2dsZXMoKTtcbiAgICAgIHRoaXMuX2luaXRQYWdlU2VsZWN0cygpO1xuXG4gICAgICB0aGlzLl9zaG93QmFyKCk7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJyYW5jaEJhcjtcbiIsIi8vICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyAqIENvbGxlY3Rpb24gbWFrZXIgZnVuY3Rpb25hbGl0eVxuLy8gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IENvb2tpZXMgZnJvbSAnanMtY29va2llJztcbmltcG9ydCBkYXRhbGF5ZXJBY3Rpb25zIGZyb20gJy4vYW5hbHl0aWNzLWFjdGlvbnMnO1xuXG5cbmNvbnN0IGNvbGxlY3Rpb25NYWtlciA9IChmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGJsb2NrID0gJy5qcy1jb2xsZWN0aW9uLW1ha2VyJztcblxuICBsZXQgJGNtRWxlbWVudCA9IG51bGwsXG4gICAgJGRpYWxvZ0VsZW0gPSBudWxsLFxuICAgIGFqYXhIYW5kbGVyVXJsID0gbnVsbCxcbiAgICBpbml0aWFsaXplclVybCA9IG51bGwsXG4gICAgYmFza2V0SWQgPSAnZGVmYXVsdC1iYXNrZXQnLFxuICAgIGN1cnJlbnRQaGFzZSA9ICdub3RydW5uaW5nJyxcbiAgICBwZXJjZW50UGVyUG9sbCA9IDAsXG4gICAgcGRmUHJvZ3Jlc3MgPSAwO1xuXG4gIGZ1bmN0aW9uIGdlbmVyYWxBamF4KGFqYXhVcmwsIHBhcmFtcyA9IHt9LCB0eXBlID0gJ0dFVCcsIGNhbGxiYWNrLCBjYlBhcmFtcyA9IHt9KXtcbiAgICAkLmFqYXgoe1xuICAgICAgdXJsOiBhamF4VXJsLFxuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIGRhdGE6IHBhcmFtcyxcbiAgICAgIGNhY2hlOiBmYWxzZVxuICAgIH0pLmRvbmUoZnVuY3Rpb24gKHJlc3ApIHtcbiAgICAgIGlmKHR5cGVvZihjYWxsYmFjaykgIT09ICd1bmRlZmluZWQnKXtcbiAgICAgICAgY2FsbGJhY2socmVzcCwgY2JQYXJhbXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLypcbiAgKlxuICAqIEZ1bmN0aW9ucyB0aGF0IGFyZSB1c2VkIG91dHNpZGUgY29sbGVjdGlvbiBtYWtlciBwYWdlXG4gICpcbiAgKi9cblxuICAvLyBJdGVtIHJlbW92ZWQgZnJvbSBjb2xsZWN0aW9uIG1ha2VyIChidXR0b24pXG4gIGZ1bmN0aW9uIGl0ZW1SZW1vdmVkKHJlc3AsICRpdGVtKXtcbiAgICBpZigkaXRlbSl7XG4gICAgICAkaXRlbS5kYXRhKCdpbi1jYXJ0JywgZmFsc2UpO1xuICAgICAgJGl0ZW0udGV4dCgkaXRlbS5kYXRhKCd0ZXh0LWFkZCcpKTtcbiAgICB9XG4gIH1cblxuICAvLyBJdGVtIGFkZGVkIHRvIGNvbGxlY3Rpb24gbWFrZXIgKGJ1dHRvbilcbiAgZnVuY3Rpb24gaXRlbUFkZGVkKHJlc3AsICRpdGVtKXtcbiAgICBpZigkaXRlbSl7XG4gICAgICAkaXRlbS5kYXRhKCdpbi1jYXJ0JywgdHJ1ZSk7XG4gICAgICAkaXRlbS50ZXh0KCRpdGVtLmRhdGEoJ3RleHQtcmVtb3ZlJykpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRvZ2dsZSBzaW5nbGUgY2FydCBpdGVtXG4gIGZ1bmN0aW9uIHRvZ2dsZUNhcnRJdGVtKGlkLCBpbkNhcnQsICRpdGVtKXtcbiAgICBsZXQgdXJscyA9IFtdO1xuICAgIGxldCBhY3Rpb24gPSBpbkNhcnQgPyAncmVtb3ZlJyA6ICdhZGQnO1xuICAgIGxldCBjYWxsYmFjayA9IGluQ2FydCA/IGl0ZW1SZW1vdmVkIDogaXRlbUFkZGVkO1xuXG4gICAgdXJscy5wdXNoKGlkKTtcblxuICAgIGdlbmVyYWxBamF4KGFqYXhIYW5kbGVyVXJsLCB7IGFjdGlvbjogYWN0aW9uLCB1cmxzOiB1cmxzLCBiYXNrZXQ6IGJhc2tldElkIH0sICdQT1NUJywgY2FsbGJhY2ssICRpdGVtKTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIGl0ZW1zIGJlbG9uZyB0byBjYXJ0XG4gIGZ1bmN0aW9uIGNhcnRMb2FkZWQoY2FydCl7XG4gICAgLy8gRWFjaCBjYXJ0IHRvZ2dsZSBidXR0b25cbiAgICAkLmVhY2goJChibG9jaysnX19pdGVtLWNhcnQtdG9nZ2xlJyksIGZ1bmN0aW9uKGksIGl0ZW0pe1xuICAgICAgbGV0ICRpdGVtID0gJChpdGVtKTtcbiAgICAgIGxldCBpZCA9ICRpdGVtLmRhdGEoJ2l0ZW0taWQnKTtcbiAgICAgIGlmKCQuaW5BcnJheShpZCwgY2FydCkgIT09IC0xKXtcbiAgICAgICAgJGl0ZW0uZGF0YSgnaW4tY2FydCcsIHRydWUpO1xuICAgICAgICAkaXRlbS50ZXh0KCRpdGVtLmRhdGEoJ3RleHQtcmVtb3ZlJykpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQ2xpY2sgY2FydCB0b2dnbGUgYnV0dG9uXG4gICAgJChibG9jaysnX19pdGVtLWNhcnQtdG9nZ2xlJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSl7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBsZXQgJGl0ZW0gPSAkKHRoaXMpO1xuICAgICAgbGV0IGlkID0gJGl0ZW0uZGF0YSgnaXRlbS1pZCcpO1xuICAgICAgbGV0IGluQ2FydCA9ICRpdGVtLmRhdGEoJ2luLWNhcnQnKTtcblxuICAgICAgdG9nZ2xlQ2FydEl0ZW0oaWQsIGluQ2FydCwgJGl0ZW0pO1xuICAgIH0pO1xuXG4gICAgLy8gRWFjaCBjYXJ0IHRvZ2dsZSBjaGVja2JveFxuICAgICQuZWFjaCgkKGJsb2NrKydfX2NoZWNrYm94LWNhcnQtdG9nZ2xlJyksIGZ1bmN0aW9uKGksIGlucHV0KXtcbiAgICAgIGxldCAkaW5wdXQgPSAkKGlucHV0KTtcbiAgICAgIGxldCBpZCA9ICRpbnB1dC52YWwoKTtcbiAgICAgIGlmKCQuaW5BcnJheShpZCwgY2FydCkgIT09IC0xKXtcbiAgICAgICAgJGlucHV0LnByb3AoJ2NoZWNrZWQnLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIENoZWNrYm94IGNoYW5nZVxuICAgICQoYmxvY2srJ19fY2hlY2tib3gtY2FydC10b2dnbGUnKS5vbignY2hhbmdlJywgZnVuY3Rpb24oKXtcbiAgICAgIGxldCAkaW5wdXQgPSAkKHRoaXMpO1xuICAgICAgbGV0IGlkID0gJGlucHV0LnZhbCgpO1xuICAgICAgbGV0IGluQ2FydCA9ICEkaW5wdXQucHJvcCgnY2hlY2tlZCcpO1xuXG4gICAgICB0b2dnbGVDYXJ0SXRlbShpZCwgaW5DYXJ0LCBudWxsKTtcbiAgICB9KTtcblxuICB9XG5cbiAgLy8gTG9hZCBpbml0aWFsIGNhcnRcbiAgZnVuY3Rpb24gbG9hZENhcnQocmVzcCl7XG4gICAgZ2VuZXJhbEFqYXgoYWpheEhhbmRsZXJVcmwsIHsgYWN0aW9uOiAnbG9hZENhcnQnIH0sIHVuZGVmaW5lZCwgY2FydExvYWRlZCk7XG4gIH1cblxuICAvLyBJbml0aWFsaXplIHN0YWdlIGRsY2VudGVyXG4gIGZ1bmN0aW9uIGluaXRDYXJ0KCkge1xuICAgIGdlbmVyYWxBamF4KGluaXRpYWxpemVyVXJsLCB7IGFjdGlvbjogJ2luaXRpYWxpemUnIH0sIHVuZGVmaW5lZCwgbG9hZENhcnQpO1xuICB9XG5cbiAgLypcbiAgKlxuICAqIENvbGxlY3Rpb24gbWFrZXIgcGFnZSBmdW5jdGlvbnNcbiAgKlxuICAqL1xuXG4gIC8vIGNsZWFyIHdob2xlIGNhcnRcbiAgZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgJC5hamF4KHtcbiAgICAgIHVybDogYWpheEhhbmRsZXJVcmwsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGJhc2tldDogYmFza2V0SWQsXG4gICAgICAgIGFjdGlvbjogJ2NsZWFyJ1xuICAgICAgfSxcbiAgICAgIGNhY2hlOiBmYWxzZVxuICAgIH0pLmRvbmUoZnVuY3Rpb24gKHJlc3ApIHtcbiAgICAgIC8vIHJlZnJlc2hcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVuc2VsZWN0UGFyZW50cygkcGFyZW50cykge1xuICAgICRwYXJlbnRzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgJHBhcmVudCA9ICQodGhpcyk7XG4gICAgICBsZXQgc2VsZWN0ZWRDaGlsZHJlbiA9ICRwYXJlbnQuY2hpbGRyZW4oJ3VsJykuZmluZChibG9jayArICdfX3RvZ2dsZTpjaGVja2VkJyk7XG4gICAgICBpZiAoc2VsZWN0ZWRDaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgJHBhcmVudC5jaGlsZHJlbihibG9jayArICdfX2l0ZW0nKS5maW5kKGJsb2NrICsgJ19fdG9nZ2xlJykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdFBhcmVudHMoJHBhcmVudHMpIHtcbiAgICAkcGFyZW50cy5jaGlsZHJlbihibG9jayArICdfX2l0ZW0nKS5maW5kKGJsb2NrICsgJ19fdG9nZ2xlJykucHJvcCgnY2hlY2tlZCcsIHRydWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9nZ2xlSXRlbSgpIHtcbiAgICBsZXQgdXJscyA9IFtdLFxuICAgICAgJGl0ZW1DaGVja2JveCA9ICQodGhpcyksXG4gICAgICAkcGFyZW50TGkgPSAkaXRlbUNoZWNrYm94LmNsb3Nlc3QoYmxvY2sgKyAnX19saScpLFxuICAgICAgYWRkID0gJGl0ZW1DaGVja2JveC5pcygnOmNoZWNrZWQnKSxcbiAgICAgIGl0ZW1VcmwgPSAkaXRlbUNoZWNrYm94LmRhdGEoJ3VybCcpIHx8IG51bGwsXG4gICAgICAkY2hpbGRJdGVtcyA9ICRwYXJlbnRMaS5maW5kKCd1bCBsaSAnICsgYmxvY2sgKyAnX190b2dnbGUnKSxcbiAgICAgICRwYXJlbnRJdGVtcyA9ICRwYXJlbnRMaS5wYXJlbnRzKGJsb2NrICsgJ19fbGknKTtcblxuICAgIC8vIEFkZCBjdXJyZW50IGl0ZW0gdXJsXG4gICAgaWYgKGl0ZW1VcmwpIHtcbiAgICAgIHVybHMucHVzaChpdGVtVXJsKTtcbiAgICB9XG5cbiAgICAvLyBUb2dnbGUgY2hpbGRyZW4gJiBhZGQgdXJsc1xuICAgICRjaGlsZEl0ZW1zLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGNoaWxkVXJsID0gJCh0aGlzKS5kYXRhKCd1cmwnKSB8fCBudWxsO1xuICAgICAgaWYgKGNoaWxkVXJsKSB7XG4gICAgICAgIHVybHMucHVzaChjaGlsZFVybCk7XG4gICAgICB9XG4gICAgICAkKHRoaXMpLnByb3AoJ2NoZWNrZWQnLCBhZGQpO1xuICAgIH0pO1xuXG4gICAgLy8gVG9nZ2xlIHBhcmVudHNcbiAgICBpZiAoYWRkKSB7XG4gICAgICBzZWxlY3RQYXJlbnRzKCRwYXJlbnRJdGVtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc2VsZWN0UGFyZW50cygkcGFyZW50SXRlbXMpO1xuICAgIH1cblxuICAgICQuYWpheCh7XG4gICAgICB1cmw6IGFqYXhIYW5kbGVyVXJsLFxuICAgICAgdHlwZTogJ3Bvc3QnLFxuICAgICAgZGF0YToge1xuICAgICAgICBiYXNrZXQ6IGJhc2tldElkLFxuICAgICAgICBhY3Rpb246IChhZGQgPyAnYWRkJyA6ICdyZW1vdmUnKSxcbiAgICAgICAgdXJsczogdXJsc1xuICAgICAgfSxcbiAgICAgIGNhY2hlOiBmYWxzZSxcbiAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwKSB7XG4gICAgICAgICRjbUVsZW1lbnQuZGF0YSgnY291bnQnLCByZXNwLmxlbmd0aCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gc2hvdyBlcnJvciBub3RpZmljYXRpb25cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlcXVlc3RQZGYoKSB7XG4gICAgbGV0IHBkZlF1YWxpdHkgPSAkKHRoaXMpLmRhdGEoJ2ltYWdlLXF1YWxpdHknKTtcbiAgICBsZXQgcHJpbnRNYXJrcyA9ICAkKHRoaXMpLmRhdGEoJ3ByaW50LW1hcmtzJykgfHwgJ25vJztcbiAgICBsZXQgbGFuZ3VhZ2UgPSAkKCdzZWxlY3QuYnJvY2h1cmUtbGFuZ3VhZ2UnKS5jaGlsZHJlbignb3B0aW9uOnNlbGVjdGVkJykudmFsKCk7XG4gICAgJC5hamF4KHtcbiAgICAgIHVybDogYWpheEhhbmRsZXJVcmwsXG4gICAgICB0eXBlOiAnZ2V0JyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgYWN0aW9uOiAncGRmJyxcbiAgICAgICAgYmFza2V0OiBiYXNrZXRJZCxcbiAgICAgICAgaW1hZ2VRdWFsaXR5OiBwZGZRdWFsaXR5LFxuICAgICAgICBwcmludE1hcmtzOiBwcmludE1hcmtzLFxuICAgICAgICBsYW5ndWFnZTogbGFuZ3VhZ2VcbiAgICAgIH0sXG4gICAgICBjYWNoZTogZmFsc2UsXG4gICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBDb29raWVzLnNldChiYXNrZXRJZCArICctZGxjZW50ZXItd2FpdGluZycsIGRhdGEsIHsgcGF0aDogJy8nIH0pO1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgncHJlZkxhbmcnLCBsYW5ndWFnZSk7XG4gICAgICAgIGN1cnJlbnRQaGFzZSA9ICd3YWl0aW5nVGFzayc7XG4gICAgICAgIHBkZlByb2dyZXNzID0gMDtcbiAgICAgICAgcG9sbCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU2VuZERpYWxvZygpe1xuICAgIGxldCAkZWxlbSA9ICQoJzxkaXYgaWQ9XCJjbS1zZW5kLWRpYWxvZ1wiIGNsYXNzPVwiY20tZGlhbG9nXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPjwvZGl2PicpO1xuICAgIGlmICgkY21FbGVtZW50LmZpbmQoYmxvY2sgKyAnX19zZW5kLWxpbmtzLWRpYWxvZy10ZW1wbGF0ZScpLmxlbmd0aCkge1xuICAgICAgJGVsZW0uYXBwZW5kKCRjbUVsZW1lbnQuZmluZChibG9jayArICdfX3NlbmQtbGlua3MtZGlhbG9nLXRlbXBsYXRlJykuY2xvbmUoKS5jaGlsZHJlbigpKTtcbiAgICAgICQoJ2JvZHknKS5hcHBlbmQoJGVsZW0pO1xuXG4gICAgICAkZGlhbG9nRWxlbSA9ICQoJyNjbS1zZW5kLWRpYWxvZycpO1xuICAgICAgJGRpYWxvZ0VsZW0uZmFkZUluKCk7XG5cbiAgICAgICRkaWFsb2dFbGVtLm9uKCdjbGljaycsIGJsb2NrKydfX2Nsb3NlLWRpYWxvZycsIGZ1bmN0aW9uKGUpe1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICRkaWFsb2dFbGVtLmZhZGVPdXQoKTtcblxuICAgICAgICAvLyByZW1vdmUgP3NlbmRMaW5rcz0xXG4gICAgICAgIGxldCBjdXJVcmwgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmLnNwbGl0KCc/Jyk7XG4gICAgICAgIGlmKHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSl7XG4gICAgICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKG51bGwsIG51bGwsIGN1clVybFswXSk7XG4gICAgICAgIH1cblxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb3BlblNlbmRGb3JtKCl7XG4gICAgdmFyICRkaWFsb2dFbGVtID0gJCgnI2NtLXNlbmQtZGlhbG9nJyk7XG4gICAgaWYgKCEkZGlhbG9nRWxlbS5sZW5ndGgpIHtcbiAgICAgIGNyZWF0ZVNlbmREaWFsb2coKTtcbiAgICB9ZWxzZXtcbiAgICAgICRkaWFsb2dFbGVtLmZhZGVJbigpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZURpYWxvZygpIHtcbiAgICBsZXQgJGVsZW0gPSAkKCc8ZGl2IGlkPVwiY20tZGlhbG9nXCIgY2xhc3M9XCJzdGFydGVkIGNtLWRpYWxvZ1wiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj48L2Rpdj4nKTtcbiAgICBpZiAoJGNtRWxlbWVudC5maW5kKGJsb2NrICsgJ19fZGlhbG9nLXRlbXBsYXRlJykubGVuZ3RoKSB7XG4gICAgICAkZWxlbS5hcHBlbmQoJGNtRWxlbWVudC5maW5kKGJsb2NrICsgJ19fZGlhbG9nLXRlbXBsYXRlJykuY2xvbmUoKS5jaGlsZHJlbigpKTtcbiAgICAgICQoJ2JvZHknKS5hcHBlbmQoJGVsZW0pO1xuXG4gICAgICAkZGlhbG9nRWxlbSA9ICQoJyNjbS1kaWFsb2cnKTtcbiAgICAgICRkaWFsb2dFbGVtLmZhZGVJbigpO1xuXG4gICAgICAkZGlhbG9nRWxlbS5vbignY2xpY2snLCBibG9jaysnX19wcm9ncmVzcy1hYm9ydCcsIGZ1bmN0aW9uKCl7XG4gICAgICAgIENvb2tpZXMucmVtb3ZlKGJhc2tldElkICsgJy1kbGNlbnRlci13YWl0aW5nJywgeyBwYXRoOiAnLycgfSk7XG4gICAgICAgICRkaWFsb2dFbGVtLmZhZGVPdXQoKTtcbiAgICAgICAgcmVzZXREaWFsb2dMb2FkaW5nKCRkaWFsb2dFbGVtKTtcbiAgICAgIH0pO1xuXG4gICAgICAkZGlhbG9nRWxlbS5vbignY2xpY2snLCBibG9jaysnX19jbG9zZS1kaWFsb2cnLCBmdW5jdGlvbihlKXtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAkZGlhbG9nRWxlbS5mYWRlT3V0KCk7XG4gICAgICAgIHJlc2V0RGlhbG9nTG9hZGluZygkZGlhbG9nRWxlbSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZXNldERpYWxvZ0xvYWRpbmcoJGRpYWxvZ0VsZW0pIHtcbiAgICAkZGlhbG9nRWxlbS5maW5kKCcuY20tZGlhbG9nX19wcm9ncmVzcy10ZXh0JykudGV4dCgnMCUnKTtcbiAgICAkZGlhbG9nRWxlbS5maW5kKCcuY20tZGlhbG9nX19wcm9ncmVzcy1pbmRpY2F0b3InKS5zdG9wKCkuY3NzKCd3aWR0aCcsICcwJScpO1xuICB9XG5cbiAgZnVuY3Rpb24gcG9sbERvbmUoZGF0YSkge1xuICAgIC8vIGRlbGV0ZSBwcm9jZXNzIGNvb2tpZVxuICAgIENvb2tpZXMucmVtb3ZlKGJhc2tldElkICsgJy1kbGNlbnRlci13YWl0aW5nJywgeyBwYXRoOiAnLycgfSk7XG4gICAgLy8gZG8gdGhlIGRlZmF1bHQgYWN0aW9ucyBmb3IgZGVmYXVsdCBpbXBsZW1lbnRhdGlvblxuICAgICRkaWFsb2dFbGVtLnJlbW92ZUNsYXNzKCdzdGFydGVkJykuYWRkQ2xhc3MoJ3N1Y2Nlc3MnKTtcbiAgICAkZGlhbG9nRWxlbS5maW5kKGJsb2NrICsgJ19fZGxsaW5rJykuYXR0cignaHJlZicsIGRhdGEucmV0ZGF0YS51cmwpLnRleHQoZGF0YS5yZXRkYXRhLnRleHQpO1xuICAgICRkaWFsb2dFbGVtLmZpbmQoJy5jbS1kaWFsb2dfX3Byb2dyZXNzLWluZGljYXRvcicpLnN0b3AoKS5hbmltYXRlKHsgd2lkdGg6ICcxMDAlJyB9LCB7IGR1cmF0aW9uOiA1MDAgfSk7XG5cbiAgICAvL2Rvd25sb2FkIFBERiBjbGljayBldmVudFxuICAgICRkaWFsb2dFbGVtLm9uKCdjbGljaycsIGJsb2NrICsgJ19fZGxsaW5rJywgZnVuY3Rpb24oZSl7XG4gICAgICBsZXQgZ2FFdmVudCA9IHtcbiAgICAgICAgJ2V2ZW50JzogJ2Jyb2NodXJlR2VuZXJhdGVkJyxcbiAgICAgICAgJ2Jyb2NodXJlUXVhbGl0eSc6IGRhdGEucGFyYW1zLmltYWdlUXVhbGl0eSxcbiAgICAgICAgJ2Jyb2NodXJlRG93bmxvYWRDb250ZW50cyc6IGRhdGEucmV0ZGF0YS5pdGVtTmFtZXNcbiAgICAgIH07XG4gICAgICBkYXRhbGF5ZXJBY3Rpb25zLnB1c2hPYmplY3RUb0RhdGFsYXllcihnYUV2ZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBvbGxGYWlsKCkge1xuICAgIC8vIHNob3cgZXJyb3JcbiAgICBDb29raWVzLnJlbW92ZShiYXNrZXRJZCArICctZGxjZW50ZXItd2FpdGluZycsIHsgcGF0aDogJy8nIH0pO1xuICAgICRkaWFsb2dFbGVtLnJlbW92ZUNsYXNzKCdzdGFydGVkJykuYWRkQ2xhc3MoJ2Vycm9yJyk7XG4gIH1cblxuICBmdW5jdGlvbiBwb2xsUnVubmluZyhkYXRhKSB7XG4gICAgbGV0IHByb2dyZXNzID0gTWF0aC5mbG9vcihwYXJzZUZsb2F0KGRhdGEucmV0ZGF0YS5wcm9ncmVzcykpO1xuICAgIFxuICAgIHN3aXRjaCAoY3VycmVudFBoYXNlKSB7XG4gICAgY2FzZSAnd2FpdGluZ1Rhc2snOlxuICAgICAgY3VycmVudFBoYXNlID0gJ3J1bm5pbmcnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncnVubmluZyc6XG4gICAgICBpZiAoZGF0YS5yZXRkYXRhLnBoYXNlICYmIGRhdGEucmV0ZGF0YS5waGFzZSA9PT0gJ3BkZicpIHtcbiAgICAgICAgY3VycmVudFBoYXNlID0gJ3BkZic7XG4gICAgICAgIHBlcmNlbnRQZXJQb2xsID0gKDQ1IC8gZGF0YS5wYXJhbXMucGFnZXMubGVuZ3RoKSAqIDg7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwZGYnOlxuICAgICAgcGRmUHJvZ3Jlc3MgKz0gcGVyY2VudFBlclBvbGw7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBkaXNwbGF5UHJvZ3Jlc3MgdXNlcyBcInRydWVcIiBvciBzaW11bGF0ZWQgcHJvZ3Jlc3MgZGVwZW5kaW5nIGlmIGJnIHRhc2sgc3VwcG9ydHMgdHJ1ZVxuICAgIGxldCBkaXNwbGF5UHJvZ3Jlc3MgPSBkYXRhLnJldGRhdGEucGhhc2UgPyBwcm9ncmVzcyA6IE1hdGgubWluKE1hdGguZmxvb3IoMC41NSAqIHByb2dyZXNzICsgcGRmUHJvZ3Jlc3MpLCA5OSk7XG4gICAgJGRpYWxvZ0VsZW0uZmluZCgnLmNtLWRpYWxvZ19fcHJvZ3Jlc3MtdGV4dCcpLnRleHQoZGlzcGxheVByb2dyZXNzICsgJyUnKTtcbiAgICAkZGlhbG9nRWxlbS5maW5kKCcuY20tZGlhbG9nX19wcm9ncmVzcy1pbmRpY2F0b3InKS5zdG9wKCkuYW5pbWF0ZSh7IHdpZHRoOiBkaXNwbGF5UHJvZ3Jlc3MgKyAnJScgfSwgeyBkdXJhdGlvbjogNTAwIH0pO1xuICAgIHNldFRpbWVvdXQocG9sbCwgMjAwMCk7XG4gIH1cblxuICBmdW5jdGlvbiBwb2xsKCkge1xuICAgIGxldCBqb2JpZCA9IENvb2tpZXMuZ2V0KGJhc2tldElkICsgJy1kbGNlbnRlci13YWl0aW5nJyk7XG5cbiAgICBpZiAoam9iaWQgPT09IG51bGwgfHwgam9iaWQgPT09ICdudWxsJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgICRkaWFsb2dFbGVtID0gJCgnI2NtLWRpYWxvZycpO1xuICAgIGlmICghJGRpYWxvZ0VsZW0ubGVuZ3RoKSB7XG4gICAgICBjcmVhdGVEaWFsb2coKTtcbiAgICB9XG5cbiAgICBpZiAoISRkaWFsb2dFbGVtLmhhc0NsYXNzKCdzdGFydGVkJykpIHtcbiAgICAgICRkaWFsb2dFbGVtLnJlbW92ZUNsYXNzKCdlcnJvcicpLnJlbW92ZUNsYXNzKCdzdWNjZXNzJyk7XG4gICAgICAkZGlhbG9nRWxlbS5mYWRlSW4oKTtcbiAgICB9XG5cbiAgICAkLmFqYXgoe1xuICAgICAgdXJsOiBhamF4SGFuZGxlclVybCxcbiAgICAgIHR5cGU6ICdwb3N0JyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgam9iaWQ6IGpvYmlkLFxuICAgICAgICBhY3Rpb246ICdnZXRwZGYnXG4gICAgICB9LFxuICAgICAgZGF0YVR5cGU6ICdqc29uJyxcbiAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgZGF0YSkge1xuICAgICAgICAgIHN3aXRjaCAoZGF0YS5zdGF0dXMpIHtcbiAgICAgICAgICBjYXNlICdkb25lJzpcbiAgICAgICAgICAgIHBvbGxEb25lKGRhdGEpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncnVubmluZyc6XG4gICAgICAgICAgICBwb2xsUnVubmluZyhkYXRhKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgICAgICBwb2xsRmFpbChkYXRhKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBzZXRUaW1lb3V0KHBvbGwsIDIwMDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KHBvbGwsIDIwMDApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gc2hvdyBlcnJvclxuICAgICAgICBDb29raWVzLnJlbW92ZShiYXNrZXRJZCArICctZGxjZW50ZXItd2FpdGluZycsIHsgcGF0aDogJy8nIH0pO1xuICAgICAgICAkZGlhbG9nRWxlbS5yZW1vdmVDbGFzcygnc3RhcnRlZCcpLmFkZENsYXNzKCdlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9nZ2xlQ2hpbGRMaXN0KCl7XG4gICAgbGV0IGxpc3RFbGVtID0gJCh0aGlzKS5jbG9zZXN0KCcubGktLWNhdGVnb3J5Jyk7XG4gICAgbGlzdEVsZW0uY2hpbGRyZW4oJ3VsJykudG9nZ2xlQ2xhc3MoJ2FjdGl2ZScpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdEV2ZW50cygpIHtcbiAgICAkY21FbGVtZW50XG4gICAgICAub24oJ2NsaWNrJywgYmxvY2sgKyAnX190b2dnbGUnLCB0b2dnbGVJdGVtKVxuICAgICAgLm9uKCdjbGljaycsIGJsb2NrICsgJ19fdG9nZ2xlLWNhdGVnb3J5JywgdG9nZ2xlSXRlbSlcbiAgICAgIC5vbignY2xpY2snLCBibG9jayArICdfX3JlcXVlc3QtcGRmJywgcmVxdWVzdFBkZilcbiAgICAgIC5vbignY2xpY2snLCBibG9jayArICdfX2NsZWFyJywgY2xlYXIpXG4gICAgICAub24oJ2NsaWNrJywgYmxvY2sgKyAnX190b2dnbGUtY2hpbGQtdWwnLCB0b2dnbGVDaGlsZExpc3QpXG4gICAgICAub24oJ2NsaWNrJywgYmxvY2sgKyAnX19zZW5kLWxpbmtzJywgb3BlblNlbmRGb3JtKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrUGFyZW50cygpIHtcbiAgICAvLyBTZWxlY3QgcGFyZW50cyBvZiBjbG9zZXN0IHBhcmVudCBvZiBzZWxlY3RlZCBpdGVtc1xuICAgIGxldCBzZWxlY3RlZCA9ICRjbUVsZW1lbnQuZmluZChibG9jayArICdfX3RvZ2dsZTpjaGVja2VkJyk7XG4gICAgbGV0ICRwYXJlbnRJdGVtcyA9IHNlbGVjdGVkLmNsb3Nlc3QoYmxvY2sgKyAnX19saScpLnBhcmVudHMoYmxvY2sgKyAnX19saScpO1xuICAgIHNlbGVjdFBhcmVudHMoJHBhcmVudEl0ZW1zKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgLy8gQ29sbGVjdGlvbiBtYWtlciBwYWdlXG4gICAgJGNtRWxlbWVudCA9ICQoYmxvY2spO1xuICAgIGlmICgkY21FbGVtZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICRjbUVsZW1lbnQgPSAkKCRjbUVsZW1lbnRbMF0pOyAvLyBUaGVyZSBjYW4gb25seSBiZSBvbmVcblxuICAgICAgYWpheEhhbmRsZXJVcmwgPSAkY21FbGVtZW50LmRhdGEoJ2hhbmRsZXInKTtcbiAgICAgIGluaXRpYWxpemVyVXJsID0gJGNtRWxlbWVudC5kYXRhKCdpbml0aWFsaXplcicpO1xuICAgICAgLy9pbWFnZVF1YWxpdHkgPSAkY21FbGVtZW50LmRhdGEoJ2ltYWdlLXF1YWxpdHknKSB8fCAnaGlnaCc7XG4gICAgICBiYXNrZXRJZCA9ICRjbUVsZW1lbnQuZGF0YSgnYmFza2V0JykgfHwgYmFza2V0SWQ7XG5cbiAgICAgIGNoZWNrUGFyZW50cygpO1xuICAgICAgaW5pdEV2ZW50cygpO1xuXG4gICAgICBpZiAoQ29va2llcy5nZXQoYmFza2V0SWQgKyAnLWRsY2VudGVyLXdhaXRpbmcnKSkge1xuICAgICAgICAvLyBzdGFydCBwb2xsaW5nXG4gICAgICAgIHBvbGwoKTtcbiAgICAgIH1cblxuICAgICAgLyogT3BlbiBzZW5kIGxpbmtzIGZvcm0gaWY6IGZvcm0gaGFzIGVycm9ycywgZW1haWwgaXMgc2VudCwgc2VuZCBmb3JtIGlzIHJlcXVlc3RlZCAqL1xuICAgICAgaWYoJChibG9jaysnX19zZW50LWxpbmtzLWVycm9yJykubGVuZ3RoID4gMCB8fCAkKGJsb2NrKydfX2VtYWlsLXNlbnQnKS5sZW5ndGggPiAwIHx8ICQoYmxvY2srJ19fb3Blbi1zZW5kLWxpbmtzJykubGVuZ3RoID4gMCl7XG4gICAgICAgIG9wZW5TZW5kRm9ybSgpO1xuICAgICAgfVxuXG4gICAgICBpZiggJCgnLmJyb2NodXJlLWxhbmd1YWdlJykgKXtcbiAgICAgICAgbGV0IHByZWZMYW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3ByZWZMYW5nJykgPyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncHJlZkxhbmcnKSA6IGZhbHNlO1xuICAgICAgICBpZiggcHJlZkxhbmcgKXtcbiAgICAgICAgICAkKCcuYnJvY2h1cmUtbGFuZ3VhZ2UnKS52YWwocHJlZkxhbmcpLnRyaWdnZXIoJ2NoYW5nZScpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICB9ZWxzZXsgLy8gQW55IHBhZ2VcbiAgICAgIGxldCAkaW5pdENtRWxlbSA9ICQoYmxvY2sgKyAnX19pbml0LWNtLWNhcnQnKTtcbiAgICAgIGlmKCRpbml0Q21FbGVtLmxlbmd0aCA+IDApe1xuICAgICAgICAvLyBJZiBjb2xsZWN0aW9uIG1ha2VyIG11c3QgYmUgaW5pdGlhbGl6ZWQgZm9yIGN1c3RvbSBwYWdlXG4gICAgICAgIGFqYXhIYW5kbGVyVXJsID0gJCgnYm9keScpLmRhdGEoJ2NtLWhhbmRsZXInKTtcbiAgICAgICAgaW5pdGlhbGl6ZXJVcmwgPSAkKCdib2R5JykuZGF0YSgnY20taW5pdGlhbGl6ZXInKTtcblxuICAgICAgICBpbml0Q2FydCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaW5pdDogaW5pdFxuICB9XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbGxlY3Rpb25NYWtlcjtcbiIsIi8vICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyAqIENoZWNrb3V0IHRvZ2dsZSBjdXN0b20gb3JkZXJlciBpbmZvXG4vLyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbnZhciBjdXN0b21PcmRlcmVySW5mbyA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gaW5pdCgpe1xuXG5cbiAgICAkKCdpbnB1dFtuYW1lPWRlbGl2ZXJ5X2FkZHJlc3NdJykub24oJ2NoYW5nZScsIGZ1bmN0aW9uKCl7XG4gICAgICAvL3Nob3cgY3VzdG9tIGNvbnRhY3QgaW5mbyBmaWVsZHNcbiAgICAgICQoJy5jaGVja291dF9fZGVsaXZlcnktYWRkcmVzcy1mb3JtJykudG9nZ2xlKCk7XG5cbiAgICAgIGlmKCQodGhpcykuaXMoJzpjaGVja2VkJykpe1xuICAgICAgICAvL2Rpc2FibGUgcHJlZmlsbGVkIGZpZWxkcywgY3VzdG9tIGNvbnRhY3QgaW5mbyBmaWVsZHMgYXJlIHVzZWQgaW5zdGVhZFxuICAgICAgICAkKCcuanMtZm9ybV9fZmllbGQtcHJlZmlsbGVkJykuYXR0cignZGlzYWJsZWQnLHRydWUpO1xuICAgICAgICAkKCcuanMtZm9ybV9fZmllbGQtY3VzdG9tLWZpZWxkJykuYXR0cignZGlzYWJsZWQnLGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAvL3JldmVyc2UgcHJldmlvdXNcbiAgICAgICAgJCgnLmpzLWZvcm1fX2ZpZWxkLXByZWZpbGxlZCcpLmF0dHIoJ2Rpc2FibGVkJyxmYWxzZSk7XG4gICAgICAgICQoJy5qcy1mb3JtX19maWVsZC1jdXN0b20tZmllbGQnKS5hdHRyKCdkaXNhYmxlZCcsdHJ1ZSk7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuICByZXR1cm4ge1xuICAgIGluaXQ6IGluaXRcbiAgfVxufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjdXN0b21PcmRlcmVySW5mbztcbiIsIi8vICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyAqIFJlcGxhY2UgZGVmYXVsdCBzZWxlY3RzIGJ5IGN1c3RvbSBvbmVzXG4vLyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbnZhciBzZXRTZWxlY3RWYWx1ZSA9IGZ1bmN0aW9uKCR0ZXh0aG9sZGVyLHZhbHVlKXtcbiAgJHRleHRob2xkZXIuZW1wdHkoKS5hcHBlbmQodmFsdWUpO1xufTtcblxudmFyIGNyZWF0ZUN1c3RvbVNlbGVjdHMgPSAoZnVuY3Rpb24oKSB7XG5cbiAgZnVuY3Rpb24gaW5pdCgpe1xuICAgIHZhciAkb2dzZWxlY3QgPSAkKCcuanMtY3VzdG9tLXNlbGVjdCcpO1xuXG4gICAgaWYoJG9nc2VsZWN0LmZpbmQoJ29wdGlvbicpLmxlbmd0aCl7XG4gICAgICAkb2dzZWxlY3QuZWFjaChmdW5jdGlvbigpe1xuICAgICAgICB2YXIgJHRleHRob2xkZXIgPSAkKCc8c3BhbiBjbGFzcz1cImN1c3RvbS1zZWxlY3RfX3RleHQganMtY3VzdG9tLXNlbGVjdC10ZXh0aG9sZGVyXCI+PC9zcGFuPicpO1xuICAgICAgICB2YXIgJHdyYXBwZXIgPSAkKCc8ZGl2IGNsYXNzPVwiY3VzdG9tLXNlbGVjdCBqcy1jdXN0b20tc2VsZWN0LXdyYXBwZXJcIj48L2Rpdj4nKTtcbiAgICAgICAgdmFyICRzZWxlY3QgPSAkKCc8ZGl2IGNsYXNzPVwiY3VzdG9tLXNlbGVjdF9fZHJvcGRvd24ganMtY3VzdG9tLXNlbGVjdC1kcm9wZG93blwiPjwvZGl2PicpO1xuXG4gICAgICAgIGlmKCQodGhpcykuaGFzQ2xhc3MoJ2Zvcm1fX2ZpZWxkLXNlbGVjdC1jdXN0b20tZnVsbC13aWR0aCcpKXtcbiAgICAgICAgICAkd3JhcHBlci5hZGRDbGFzcygnY3VzdG9tLXNlbGVjdC1mdWxsLXdpZHRoJyk7XG4gICAgICAgIH1cblxuICAgICAgICAkKHRoaXMpLndyYXAoJHdyYXBwZXIpLmJlZm9yZSgkc2VsZWN0LCR0ZXh0aG9sZGVyKTtcbiAgICAgICAgJHRleHRob2xkZXIuZW1wdHkoKS5hcHBlbmQoJCh0aGlzKS5maW5kKCdvcHRpb24nKVswXS5pbm5lckhUTUwpO1xuXG4gICAgICAgICQoJCh0aGlzKSkub24oJ2NoYW5nZScsZnVuY3Rpb24oKXtcbiAgICAgICAgICAkdGV4dGhvbGRlci5lbXB0eSgpLmFwcGVuZCgkKHRoaXMpLmZpbmQoJ29wdGlvbjpzZWxlY3RlZCcpLnRleHQoKSk7XG4gICAgICAgICAgc2V0U2VsZWN0VmFsdWUoJCh0aGlzKS5maW5kKCcuanMtY3VzdG9tLXNlbGVjdC10ZXh0aG9sZGVyJyksICQodGhpcykuZmluZCgnb3B0aW9uOnNlbGVjdGVkJykudGV4dCgpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIH0pO1xuXG4gICAgICAvL01ha2Ugc3VyZSBjdXN0b20gc2VsZWN0cyBoYXZlIGNvcnJlY3QgdmFsdWUgc2hvd24gb24gbG9hZFxuICAgICAgJCgnLmpzLWN1c3RvbS1zZWxlY3Qtd3JhcHBlcicpLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgICAgc2V0U2VsZWN0VmFsdWUoJCh0aGlzKS5maW5kKCcuanMtY3VzdG9tLXNlbGVjdC10ZXh0aG9sZGVyJyksICQodGhpcykuZmluZCgnb3B0aW9uOnNlbGVjdGVkJykudGV4dCgpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGluaXQ6IGluaXRcbiAgfVxufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDdXN0b21TZWxlY3RzO1xuIiwiLy8gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vICogRmlsdGVyIG1hY2hpbmUgYWNjZXNzb3JpZXMgYnkgYWNjZXNzb3J5IGxldmVsXG4vLyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbnZhciBmaWx0ZXJNYWNoaW5lQWNjZXNzb3JpZXMgPSAoZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGluaXQoKXtcblxuICAgIC8qXG4gICAgLS0tIG9sZCBjb2RlIGZvciBjbGFzc2lmaWNhdGlvbiBsZXZlbHMgLS0tXG4gICAgJCgnW2RhdGEtY2xhc3NpZmljYXRpb24hPWJhc2ljXScpLnBhcmVudCgnLmpzLWFjY2Vzc29yaWVzLWxpc3QnKS5oaWRlKCk7XG5cblxuICAgICQoJy5qcy1zZWxlY3QtYWNjZXNzb3J5LWxldmVsJykub24oJ2NoYW5nZScsZnVuY3Rpb24oKXtcbiAgICAgIHZhciBsZXZlbCA9ICQodGhpcykudmFsKCk7XG4gICAgICB2YXIgJHBhcmVudCA9ICQodGhpcykucGFyZW50cygnLmpzLWFjY2Vzc29yaWVzLWNvbnRhaW5lcicpO1xuICAgICAgJHBhcmVudC5maW5kKCcuanMtYWNjZXNzb3JpZXMtbGlzdCcpLmhpZGUoKTtcbiAgICAgICRwYXJlbnQuZmluZCgnW2RhdGEtY2xhc3NpZmljYXRpb249JytsZXZlbCsnXScpLnBhcmVudCgnLmpzLWFjY2Vzc29yaWVzLWxpc3QnKS5zaG93KCk7XG4gICAgfSk7XG4gICAgKi9cblxuICAgICQoJy5qcy1zZWxlY3QtYWNjZXNzb3J5LWxldmVsJykub24oJ2NoYW5nZScsZnVuY3Rpb24oKXtcbiAgICAgIHZhciBhY2Nlc3Nvcmllc0FyciA9ICQodGhpcykudmFsKCkgPyAkKHRoaXMpLnZhbCgpLnNwbGl0KCcsJykgOiBbXTtcbiAgICAgIHZhciAkYWNjZXNzb3J5SXRlbXMgPSAkKCcuanMtYWNjZXNzb3J5aXRlbScpO1xuXG5cbiAgICAgICRhY2Nlc3NvcnlJdGVtcy5zaG93KCk7XG5cbiAgICAgIGlmKGFjY2Vzc29yaWVzQXJyLmxlbmd0aCl7XG4gICAgICAgICRhY2Nlc3NvcnlJdGVtcy5maWx0ZXIoZnVuY3Rpb24oaSwgZWwpe1xuICAgICAgICAgIGlmKGFjY2Vzc29yaWVzQXJyLmluZGV4T2YoJChlbCkuYXR0cignZGF0YS11dWlkJykpID09PSAtMSl7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pLmhpZGUoKTtcbiAgICAgIH1cblxuICAgICAgLy90b2RvIGRvIHRoaXMgcHJvcGVybHlcbiAgICAgIHZhciBsYW5nID0gJCgnYm9keScpLmF0dHIoJ2RhdGEtbGFuZycpO1xuICAgICAgdmFyIG5vUHJvZHVjdHNUZXh0ID0gbGFuZyA9PT0gJ2ZpJyA/ICdFaSB0dW90dGVpdGEnIDogJ05vIHByb2R1Y3RzJztcbiAgICAgICQoJy5hY2Nlc3NvcnlsaXN0JykuZWFjaChmdW5jdGlvbigpe1xuICAgICAgICBpZigkKHRoaXMpLmZpbmQoJ2xpOnZpc2libGUnKS5sZW5ndGggPT09IDApe1xuICAgICAgICAgICQodGhpcykuYXBwZW5kKCc8bGkgY2xhc3M9XCJhY2Nlc3NvcnlsaXN0X19uby1wcm9kdWN0c1wiPicrbm9Qcm9kdWN0c1RleHQrJzwvbGk+Jyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgJCh0aGlzKS5maW5kKCcuYWNjZXNzb3J5bGlzdF9fbm8tcHJvZHVjdHMnKS5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBpbml0OiBpbml0XG4gIH1cbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZmlsdGVyTWFjaGluZUFjY2Vzc29yaWVzO1xuIiwiLy8gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vICogRmlsdGVyIG5ld3Ncbi8vICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxudmFyIGZpbHRlck5ld3MgPSAoZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGluaXQoKXtcblxuICAgIHZhciAkaW5wdXRzID0gJCgnW2RhdGEtZmlsdGVyZm9yXScpO1xuXG4gICAgJGlucHV0cy5vbignY2hhbmdlJywgZnVuY3Rpb24oKXtcbiAgICAgIHZhciBmaWx0ZXJzID0ge2NoZWNrYm94ZXM6IFtdLCBzZWxlY3RzOiBbXX07XG4gICAgICB2YXIgJG5ld3NJdGVtcyA9ICQoJy5qcy1uZXdzbGlzdF9fbGlzdC1pdGVtJyk7XG4gICAgICAkaW5wdXRzLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgICAgdmFyIGZpbHRlciA9ICQodGhpcykuYXR0cignZGF0YS1maWx0ZXJmb3InKTtcbiAgICAgICAgdmFyIHZhbCA9ICQodGhpcykudmFsKCk7XG5cbiAgICAgICAgaWYoJCh0aGlzKS5pcygnOmNoZWNrYm94Jykpe1xuICAgICAgICAgIGlmKCQodGhpcykuaXMoJzpjaGVja2VkJykpIHtcbiAgICAgICAgICAgIGZpbHRlcnMuY2hlY2tib3hlcy5wdXNoKHtmaWx0ZXI6IGZpbHRlciwgdmFsdWU6IHZhbH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKCQodGhpcykuaXMoJ3NlbGVjdCcpKXtcbiAgICAgICAgICBpZih2YWwgIT09ICcnKXtcbiAgICAgICAgICAgIGZpbHRlcnMuc2VsZWN0cy5wdXNoKHtmaWx0ZXI6IGZpbHRlciwgdmFsdWU6IHZhbH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vaGlkZSBuZXdzIHVudGlsIGZpbHRlciBmdW5jdGlvblxuICAgICAgJG5ld3NJdGVtcy5oaWRlKCk7XG5cbiAgICAgICRuZXdzSXRlbXMuZmlsdGVyKGZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciBlbGVtZW50ID0gJCh0aGlzKTtcbiAgICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XG5cbiAgICAgICAgaWYoZmlsdGVycy5jaGVja2JveGVzLmxlbmd0aCl7XG4gICAgICAgICAgJC5lYWNoKGZpbHRlcnMuY2hlY2tib3hlcywgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGlmKGVsZW1lbnQuYXR0cignZGF0YS1maWx0ZXItdHlwZScpLmluZGV4T2YodGhpcy52YWx1ZSkgPiAtMSkge1xuICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgIC8vcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vaWYgbWFjaGluZSBpcyBzZWxlY3RlZCwgZ2V0IGFsbCBtYWNoaW5lIHJlbGF0ZWQgbmV3c1xuICAgICAgICBpZihmaWx0ZXJzLnNlbGVjdHMubGVuZ3RoICYmIGZpbHRlcnMuc2VsZWN0cy5sZW5ndGggPiAwICl7XG4gICAgICAgICAgJC5lYWNoKGZpbHRlcnMuc2VsZWN0cywgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGlmKGVsZW1lbnQuYXR0cignZGF0YS1maWx0ZXItcmVsYXRlZG1hY2hpbmVzJykuaW5kZXhPZih0aGlzLnZhbHVlKSA+IC0xKSB7XG4gICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICB9KS5zaG93KCk7XG4gICAgICAvL3Jlc2V0IG5ld3MgZmlsdGVyXG4gICAgICBpZihmaWx0ZXJzLmNoZWNrYm94ZXMubGVuZ3RoID09PSAwICYmIGZpbHRlcnMuc2VsZWN0cy5sZW5ndGggPT09MCApICRuZXdzSXRlbXMuc2hvdygpO1xuICAgIH0pO1xuXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBpbml0OiBpbml0XG4gIH1cbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZmlsdGVyTmV3cztcbiIsIi8vICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyAqIGltYWdlIHBvcHVwXG4vLyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgJ21hZ25pZmljLXBvcHVwJztcblxuY29uc3QgbWFnbmlmaWNQb3B1cCA9IHtcbiAgaW5pdChqc0Jsb2NrKSB7XG4gICAgdmFyICRpdGVtcyA9ICQoanNCbG9jayk7XG5cblxuICAgICRpdGVtcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyICRpdGVtID0gJCh0aGlzKSxcbiAgICAgICAgb3B0aW9ucyA9IC8qJGl0ZW0uZGF0YSgnbWZwLW9wdGlvbnMnKSove3R5cGU6ICdpbWFnZScsIHNyYzogJGl0ZW0uZGF0YSgncG9wdXBpbWFnZScpfSxcbiAgICAgICAgc2V0dGluZ3MgPSB7XG4gICAgICAgICAgJ2l0ZW1zJzogbnVsbFxuICAgICAgICB9LFxuICAgICAgICBpbmxpbmVPbkluaXQgPSAkaXRlbS5kYXRhKCdtZnAtaW5saW5lLW9uLWluaXQnKTtcblxuICAgICAgLy8gT3BlbiB0aGVzZSBpbW1lZGlhdGVseVxuICAgICAgaWYgKGlubGluZU9uSW5pdCkge1xuICAgICAgICAkLm1hZ25pZmljUG9wdXAub3Blbih7XG4gICAgICAgICAgJ2l0ZW1zJzoge1xuICAgICAgICAgICAgJ3NyYyc6ICRpdGVtLFxuICAgICAgICAgICAgLy8nc3JjJzogJzxkaXY+dGVzdDwvZGl2PicsXG4gICAgICAgICAgICAndHlwZSc6ICdpbmxpbmUnLFxuICAgICAgICAgICAgJ21pZENsaWNrJzogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgc2V0dGluZ3MuaXRlbXMgPSBvcHRpb25zO1xuICAgICAgICAkaXRlbS5tYWduaWZpY1BvcHVwKHNldHRpbmdzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBtYWduaWZpY1BvcHVwO1xuIiwiLy8gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vICogbWFjaGluZSBzZWFyY2hcbi8vICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmNvbnN0IE11c3RhY2hlID0gcmVxdWlyZSgnbXVzdGFjaGUnKTtcblxubGV0IGZpbHRlck1hY2hpbmVzID0gKGZ1bmN0aW9uKCkge1xuXG4gIGxldCByZXF1ZXN0ID0gKGRhdGEgPSB7fSwgdHlwZSA9ICdHRVQnKSA9PiB7XG4gICAgbGV0IGhhbmRsZXIgPSAkKCdib2R5JykuZGF0YSgnY20taGFuZGxlcicpO1xuXG4gICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgIHVybDogaGFuZGxlcixcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgY2FjaGU6IGZhbHNlXG4gICAgICAgIH0pLmRvbmUoKHJlcykgPT4ge1xuICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgbGV0IF9nZXRDYXJ0SXRlbXMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHJlcXVlc3QoeyBhY3Rpb246ICdsb2FkQ2FydCcgfSk7XG4gIH07XG5cbiAgbGV0IF91cGRhdGVDYXJ0SXRlbSA9ICgkaW5wdXQpID0+IHtcbiAgICBpZiAoJGlucHV0ICYmICRpbnB1dC52YWwoKSkge1xuICAgICAgbGV0IGFjdGlvbiA9ICRpbnB1dC5wcm9wKCdjaGVja2VkJykgPyAnYWRkJyA6ICdyZW1vdmUnO1xuICAgICAgbGV0IHVybHMgPSBbXTtcbiAgICAgIGxldCBiYXNrZXQgPSAnZGVmYXVsdC1iYXNrZXQnO1xuXG4gICAgICB1cmxzLnB1c2goJGlucHV0LnZhbCgpKTtcblxuICAgICAgcmVxdWVzdCh7IGFjdGlvbiwgdXJscywgYmFza2V0IH0sICdQT1NUJyk7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIGluaXQoKXtcbiAgICBpZigkKCcucHJvZHVjdHMnKS5sZW5ndGgpe1xuICAgICAgJCgnLmpzLWNvbnRlbnQtc2VhcmNoLXRleHQnKS5vbigna2V5dXAnLGZ1bmN0aW9uKCl7XG4gICAgICAgIGxldCBzZWFyY2hUZXJtID0gJCh0aGlzKS52YWwoKTtcblxuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICdkYXRhJzogJ3NlYXJjaD0nK3NlYXJjaFRlcm0rJyZzdGFnZS1sYW5ndWFnZT0nKyQoJ2JvZHknKS5kYXRhKCdsYW5ndWFnZScpLFxuICAgICAgICAgICd1cmwnOiAnL3N0YWdlLWFqYXgvbWFjaGluZS1zZWFyY2gnLFxuICAgICAgICAgICdzdWNjZXNzJzogZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgICAgICBsZXQgdGVtcGxhdGUgPSAkKCcjcHJvZHVjdC1saXN0JykuaHRtbCgpO1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgICAgICAgICAgcmVzdWx0ICs9IE11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSwge2l0ZW1zOiBkYXRhLm1hY2hpbmVzTGlzdCwgaGVhZGluZzogZGF0YS5tYWNoaW5lc0hlYWRpbmd9KTtcbiAgICAgICAgICAgIGlmKGRhdGEubG93SW1wb3J0YW5jZU1hY2hpbmVzTGlzdC5sZW5ndGgpe1xuICAgICAgICAgICAgICByZXN1bHQgKz0gTXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLCB7aXRlbXM6IGRhdGEubG93SW1wb3J0YW5jZU1hY2hpbmVzTGlzdCwgaGVhZGluZzogZGF0YS5sb3dJbXBvcnRhbmNlTWFjaGluZXNIZWFkaW5nLCBpc0xvd0ltcG9ydGFuY2U6IHRydWV9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCArPSBNdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsIHtpdGVtczogZGF0YS5hY2Nlc3Nvcmllc0xpc3QsIGhlYWRpbmc6IGRhdGEuYWNjZXNzb3JpZXNIZWFkaW5nfSk7XG5cbiAgICAgICAgICAgIC8vIFJlbmRlciBzZWFyY2ggcmVzdWx0c1xuICAgICAgICAgICAgJCgnLmxheW91dF9fbWFpbicpLmVtcHR5KCkuYXBwZW5kKHJlc3VsdCk7XG5cbiAgICAgICAgICAgIGxldCAkY2hlY2tCb3hFbGVtZW50ID0gJCgnLmpzLWNvbGxlY3Rpb24tbWFrZXJfX2NoZWNrYm94LWNhcnQtdG9nZ2xlJyk7XG5cbiAgICAgICAgICAgIC8vIFNldCBpdGVtcyBhcyBjaGVja2VkIGlmIGluIGNhcnRcbiAgICAgICAgICAgIF9nZXRDYXJ0SXRlbXMoKS50aGVuKChjYXJ0KSA9PiB7XG4gICAgICAgICAgICAgICQuZWFjaCgkY2hlY2tCb3hFbGVtZW50LCAoaSwgaW5wdXQpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgJGlucHV0ID0gJChpbnB1dCk7XG4gICAgICAgICAgICAgICAgbGV0IGlkID0gJGlucHV0LnZhbCgpO1xuXG4gICAgICAgICAgICAgICAgaWYoJC5pbkFycmF5KGlkLCBjYXJ0KSAhPT0gLTEpe1xuICAgICAgICAgICAgICAgICAgJGlucHV0LnByb3AoJ2NoZWNrZWQnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vVXBkYXRlIGNhcnQgd2hlbiBzdGF0ZSBjaGFuZ2VzXG4gICAgICAgICAgICAkY2hlY2tCb3hFbGVtZW50Lm9uKCdjaGFuZ2UnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgX3VwZGF0ZUNhcnRJdGVtKCQodGhpcykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpbml0OiBpbml0XG4gIH1cbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZmlsdGVyTWFjaGluZXM7XG4iLCIvLyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gKiBNb2JpbGUgbmF2aWdhdGlvbiBmdW5jdGlvbmFsaXR5XG4vLyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4ndXNlIHN0cmljdCc7XG5cbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbnZhciBpbml0TmF2ID0gKGZ1bmN0aW9uKCkge1xuXG4gIGZ1bmN0aW9uIGJpbmROYXZDbGlja3MoKXtcbiAgICAvL2FkZCBjbGljayBldmVudCBoYW5kbGVyIGZvciBtb2JpbGUgbmF2XG4gICAgJCgnLmpzLW5hdl9fbGkuaGFzLWNoaWxkcmVuOm5vdChcIi5ib3VuZFwiKScpLmFkZENsYXNzKCdib3VuZCcpLmNsaWNrKGZ1bmN0aW9uKCl7XG4gICAgICAkKHRoaXMpLmZpbmQoJ3VsJykudG9nZ2xlQ2xhc3MoJ29wZW4nKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXQoKXtcblxuICAgIHZhciAkZXh0cmFuZXROYXYgPSAkKCcuanMtbmF2LWV4dHJhbmV0Jyk7XG4gICAgdmFyICRtYWluTmF2ID0gJCgnLmpzLW5hdi1tYWluJyk7XG4gICAgdmFyICRleHRyYW5ldE5hdlRvZ2dsZSA9ICQoJy5qcy1uYXYtdG9nZ2xlLWV4dHJhbmV0Jyk7XG4gICAgdmFyICRtYWluTmF2VG9nZ2xlID0gJCgnLmpzLW5hdi10b2dnbGUtbWFpbicpO1xuXG4gICAgLy90b2dnbGUgbGFuZ3VhZ2UgbmF2XG4gICAgJCgnLmpzLW1pbmluYXZfX2l0ZW1fX2xhbmd1YWdlLW1lbnUtdG9nZ2xlJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICQodGhpcykuc2libGluZ3MoJ3NlbGVjdCcpLnRvZ2dsZUNsYXNzKCdhY3RpdmUnKTtcbiAgICB9KTtcblxuICAgIC8vdG9nZ2xlIGV4dHJhbmV0IG5hdlxuICAgICRleHRyYW5ldE5hdlRvZ2dsZS5jbGljayhmdW5jdGlvbigpe1xuICAgICAgJGV4dHJhbmV0TmF2LnRvZ2dsZSgpO1xuICAgICAgJG1haW5OYXYuaGlkZSgpO1xuXG4gICAgICAvL2ZvciB0aGUgY2xvc2VkL29wZW4gdG9nZ2xlIGljb24gYW5pbWF0aW9uXG4gICAgICAkKCcuanMtbW9iaWxlLW5hdi1jaGVja2JveCcpLnByb3AoJ2NoZWNrZWQnLGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vdG9nZ2xlIG1haW4gbmF2XG4gICAgJG1haW5OYXZUb2dnbGUuY2xpY2soZnVuY3Rpb24oKXtcbiAgICAgICRtYWluTmF2LnRvZ2dsZSgpO1xuICAgICAgJGV4dHJhbmV0TmF2LmhpZGUoKTtcbiAgICB9KTtcblxuXG4gICAgaWYoJCh3aW5kb3cpLndpZHRoKCkgPCAxMjAwKXtcbiAgICAgIGJpbmROYXZDbGlja3MoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBpbml0OiBpbml0XG4gIH1cbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gaW5pdE5hdjtcblxuIiwiLy8gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vICogRmlsdGVyIGRvd25sb2FkYWJsZSBtYXRlcmlhbCBieSBsYW5ndWFnZVxuLy8gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG52YXIgc2VsZWN0TWF0ZXJpYWxMYW5ndWFnZSA9IChmdW5jdGlvbigpIHtcblxuICBmdW5jdGlvbiBpbml0KCl7XG5cblxuICAgIHZhciBwYWdlTGFuZyA9ICQoJ2JvZHknKS5kYXRhKCdsYW5ndWFnZScpO1xuICAgIHZhciAkbWF0ZXJpYWxJdGVtID0gJCgnLmpzLWRvd25sb2FkYWJsZS1tYXRlcmlhbC1pdGVtJyk7XG4gICAgdmFyIHJlZ2V4ID0gJyc7XG4gICAgdmFyIGxhbmdzID0gJyc7XG4gICAgLy9ieSBkZWZhdWx0IHNob3cgb25seSBkb2N1bWVudHMgd2l0aCBjdXJyZW50IHBhZ2UgbGFuZ3VhZ2VcbiAgICAkbWF0ZXJpYWxJdGVtLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgIC8vZmlsdGVyIGZpbGVzIGZvciBjdXJyZW50IGxhbmd1YWdlXG4gICAgICAvL2RhdGFzZXQgZGF0YS1sYW5ndWFnZXNcbiAgICAgIC8vIGZvcm1hdCAnZmksZW4sc3YnXG4gICAgICBsYW5ncyA9IHRoaXMuZGF0YXNldC5sYW5ndWFnZXM7XG4gICAgICByZWdleCA9IG5ldyBSZWdFeHAoJ1xcXFxiJyArIHBhZ2VMYW5nICsgJ1xcXFxiJyk7XG4gICAgICBpZighbGFuZ3MubWF0Y2gocmVnZXgpKSAkKHRoaXMpLmhpZGUoKTtcbiAgICB9KTtcblxuICAgIC8vc2hvdyBkb2N1bWVudHMgYnkgc2VsZWN0ZWQgbGFuZ3VhZ2VcbiAgICAkKCcuanMtbGFuZy1zZWxlY3QnKS5jaGFuZ2UoZnVuY3Rpb24oKXtcbiAgICAgIHZhciBzZWxlY3RlZExhbmcgPSAkKHRoaXMpLnZhbCgpO1xuICAgICAgaWYoc2VsZWN0ZWRMYW5nICE9PSAnYWxsJyl7XG4gICAgICAgICRtYXRlcmlhbEl0ZW0uaGlkZSgpO1xuICAgICAgICAkbWF0ZXJpYWxJdGVtLmVhY2goZnVuY3Rpb24oKXtcbiAgICAgICAgICBsYW5ncyA9IHRoaXMuZGF0YXNldC5sYW5ndWFnZXM7IC8vZ2V0IGRhdGEtbGFuZ3VhZ2VzXG4gICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKCdcXFxcYicgKyBzZWxlY3RlZExhbmcgKyAnXFxcXGInKTtcbiAgICAgICAgICBpZihsYW5ncy5tYXRjaChyZWdleCkpICQodGhpcykuc2hvdygpOyAvL2lmIHNlbGVjdGVkIGZvdW5kLCBzaG93IGZpbGVzXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgICRtYXRlcmlhbEl0ZW0uc2hvdygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgaW5pdDogaW5pdFxuICB9XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNlbGVjdE1hdGVyaWFsTGFuZ3VhZ2U7XG4iLCJpbXBvcnQgZGF0YVNlcnZpY2UgZnJvbSAnLi9kYXRhLXNlcnZpY2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBUEkge1xuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgbG9naW5BZG1pbigpIHtcbiAgICByZXR1cm4gZGF0YVNlcnZpY2UucG9zdCgnL2xvZ2luLWFkbWluLycpO1xuICB9XG5cbiAgbG9naW4oZGF0YSkge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5wb3N0KCcvbG9naW4vJywgZGF0YSk7XG4gIH1cblxuICBsb2dvdXQoKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLnBvc3QoJy9sb2dvdXQvJyk7XG4gIH1cblxuICBnZXRMb2NhbGl6YXRpb24oKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLmdldCgnL2xvY2FsaXphdGlvbi8nKTtcbiAgfVxuXG4gIGdldFRva2VuKCkge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5nZXQoJy90b2tlbi8nKTtcbiAgfVxuXG4gIGdldENvdW50cmllcygpIHtcbiAgICByZXR1cm4gZGF0YVNlcnZpY2UuZ2V0KCcvY291bnRyaWVzLycpO1xuICB9XG5cbiAgY2hhbmdlUGFzc3dvcmQoZGF0YSkge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5wb3N0KCcvY2hhbmdlLXBhc3N3b3JkLycsIGRhdGEpO1xuICB9XG5cbiAgZm9yZ290UGFzc3dvcmQoZGF0YSkge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5wb3N0KCcvZm9yZ290LXBhc3N3b3JkLycsIGRhdGEpO1xuICB9XG5cbiAgcmVnaXN0ZXJQYXNzd29yZChkYXRhKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLnBvc3QoJy9yZWdpc3Rlci1wYXNzd29yZC8nLCBkYXRhKTtcbiAgfVxuXG4gIC8vIFVTRVIgLT5cbiAgYWRkVXNlcihkYXRhKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLnBvc3QoJy91c2Vycy8nLCBkYXRhKTtcbiAgfVxuXG4gIHVwZGF0ZVVzZXIoaWQsIGRhdGEpIHtcbiAgICByZXR1cm4gZGF0YVNlcnZpY2UucHV0KGAvdXNlcnMvJHtpZH0vYCwgZGF0YSk7XG4gIH1cblxuICBkZWxldGVVc2VyKGlkKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLmRlbGV0ZShgL3VzZXJzLyR7aWR9L2ApO1xuICB9XG5cbiAgZ2V0VXNlcihpZCkge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5nZXQoYC91c2Vycy8ke2lkfS9gKTtcbiAgfVxuXG4gIGdldEN1cnJlbnRVc2VyKCkge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5nZXQoJy91c2Vycy9jdXJyZW50LycpO1xuICB9XG5cbiAgZ2V0VXNlcnMocGFyYW1zKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLmdldCgnL3VzZXJzLycsIHBhcmFtcyk7XG4gIH1cblxuICAvLyA8LSBVU0VSXG5cbiAgLy8gQ09NUEFOWSAtLT5cblxuICBhZGRDb21wYW55KGRhdGEpIHtcbiAgICByZXR1cm4gZGF0YVNlcnZpY2UucG9zdCgnL2NvbXBhbmllcy8nLCBkYXRhKTtcbiAgfVxuXG4gIHVwZGF0ZUNvbXBhbnkoaWQsIGRhdGEpIHtcbiAgICByZXR1cm4gZGF0YVNlcnZpY2UucHV0KGAvY29tcGFuaWVzLyR7aWR9L2AsIGRhdGEpO1xuICB9XG5cbiAgZGVsZXRlQ29tcGFueShpZCkge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5kZWxldGUoYC9jb21wYW5pZXMvJHtpZH0vYCk7XG4gIH1cblxuICBnZXRDb21wYW55KGlkKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLmdldChgL2NvbXBhbmllcy8ke2lkfS9gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY29tcGFuaWVzIGJ5IHBhcmFtc1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gcGFyYW1zIG9iamVjdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLmNoaWxkcmVuT2YgLSB1dWlkIHN0cmluZ1xuICAgKiBAcmV0dXJuIHtQcm9taXNlfVxuICAgKi9cbiAgZ2V0Q29tcGFuaWVzKHBhcmFtcykge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5nZXQoJy9jb21wYW5pZXMvJywgcGFyYW1zKTtcbiAgfVxuXG4gIC8vIDwtIENPTVBBTllcblxuICAvLyBDVVNUT01FUiBNQUNISU5FUyAtPlxuXG4gIC8qKlxuICAgKiBHZXQgY3VzdG9tZXIgbWFjaGluZXMgYnkgcGFyYW1zXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBwYXJhbXMgb2JqZWN0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMuY29tcGFueSAtIGNvbXBhbnkgaWRcbiAgICogQHBhcmFtIHtib29sZWFufSBwYXJhbXMuaW5jbHVkZUNoaWxkQ29tcGFuaWVzIC0gaW5jbHVkZSBjdXN0b21lciBtYWNoaW5lcyBvZiBjaGlsZCBjb21wYW5pZXMgYWxzbyAob25seSBpbXBvcnRlcnMgaGF2ZSBjaGlsZCBjb21wYW5pZXMpXG4gICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAqL1xuICBnZXRDdXN0b21lck1hY2hpbmVzKHBhcmFtcykge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5nZXQoJy9jdXN0b21lci1tYWNoaW5lcy8nLCBwYXJhbXMpO1xuICB9XG5cbiAgZ2V0Q3VzdG9tZXJNYWNoaW5lKHNlcmlhbE51bWJlcikge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5nZXQoYC9jdXN0b21lci1tYWNoaW5lcy8ke3NlcmlhbE51bWJlcn0vYCk7XG4gIH1cblxuICB1cGRhdGVDdXN0b21lck1hY2hpbmVPd25lcihzZXJpYWxOdW1iZXIsIGRhdGEpIHtcbiAgICByZXR1cm4gZGF0YVNlcnZpY2UucHV0KGAvY3VzdG9tZXItbWFjaGluZXMvJHtzZXJpYWxOdW1iZXJ9L2AsIGRhdGEpO1xuICB9XG5cbiAgc2F2ZUN1c3RvbWVyTWFjaGluZUluZm9ybWF0aW9uKHNlcmlhbE51bWJlciwgZGF0YSkge1xuICAgIHJldHVybiBkYXRhU2VydmljZS5wdXQoYC9jdXN0b21lci1tYWNoaW5lcy8ke3NlcmlhbE51bWJlcn0vaW5mby9gLCBkYXRhKTtcbiAgfVxuXG4gIGdldEN1c3RvbWVyTWFjaGluZURldGFpbHMoc2VyaWFsTnVtYmVyKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLmdldChgL2N1c3RvbWVyLW1hY2hpbmVzLyR7c2VyaWFsTnVtYmVyfS9kZXRhaWxzL2ApO1xuICB9XG5cbiAgLy8gPC0gQ1VTVE9NRVIgTUFDSElORVNcblxuICAvLyBDT01QTEFJTlRTIC0+XG4gIGFkZENvbXBsYWludChkYXRhKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLnBvc3QoJy9jb21wbGFpbnRzLycsIGRhdGEpO1xuICB9XG5cbiAgYWRkQ29tcGxhaW50RmlsZShjb21wbGFpbnRVdWlkLCBkYXRhLCBjb25maWcpIHtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBmaWxlTmFtZTogZGF0YS5maWxlTmFtZVxuICAgIH1cblxuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZGF0YS5maWxlKTtcblxuICAgIGNvbnN0IGF4aW9zQ29uZiA9IHtcbiAgICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IGNvbmZpZyAmJiBjb25maWcub25Qcm9ncmVzcyB8fCBudWxsXG4gICAgfTtcblxuICAgIHJldHVybiBkYXRhU2VydmljZS5wb3N0KGAvY29tcGxhaW50LWZpbGUvJHtjb21wbGFpbnRVdWlkfS9gLCBmb3JtRGF0YSwgcGFyYW1zLCBheGlvc0NvbmYpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjdXN0b21lciBtYWNoaW5lcyBieSBwYXJhbXNcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIC0gcGFyYW1zIG9iamVjdCwgaWYgbGVmdCBvdXQgZ2V0IGFsbCBmb3IgdXNlciBjb21wYW55XG4gICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAqL1xuICBnZXRDb21wbGFpbnRzKHBhcmFtcyA9IG51bGwpIHtcbiAgICByZXR1cm4gZGF0YVNlcnZpY2UuZ2V0KCcvY29tcGxhaW50cy8nLCBwYXJhbXMpO1xuICB9XG5cbiAgZ2V0Q29tcGxhaW50KHV1aWQpIHtcbiAgICByZXR1cm4gZGF0YVNlcnZpY2UuZ2V0KGAvY29tcGxhaW50cy8ke3V1aWR9L2ApO1xuICB9XG5cbiAgLy8gPC0gQ09NUExBSU5UU1xuXG4gIC8vIFdBUlJBTlRZIFJFR0lTVFJBVElPTlMgLT5cblxuICBhZGRXYXJyYW50eVJlZ2lzdHJhdGlvbihkYXRhKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLnBvc3QoJy93YXJyYW50eS1yZWdpc3RyYXRpb25zLycsIGRhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB3YXJyYW50eSByZWdpc3RyYXRpb25zIGJ5IHBhcmFtc1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gLSBwYXJhbXMgb2JqZWN0LCBpZiBsZWZ0IG91dCBnZXQgYWxsIGZvciB1c2VyIGNvbXBhbnlcbiAgICogQHJldHVybiB7UHJvbWlzZX1cbiAgICovXG4gIGdldFdhcnJhbnR5UmVnaXN0cmF0aW9ucyhwYXJhbXMgPSBudWxsKSB7XG4gICAgcmV0dXJuIGRhdGFTZXJ2aWNlLmdldCgnL3dhcnJhbnR5LXJlZ2lzdHJhdGlvbnMvJywgcGFyYW1zKTtcbiAgfVxuXG4gIGdldFdhcnJhbnR5UmVnaXN0cmF0aW9uKHV1aWQpIHtcbiAgICByZXR1cm4gZGF0YVNlcnZpY2UuZ2V0KGAvd2FycmFudHktcmVnaXN0cmF0aW9ucy8ke3V1aWR9L2ApO1xuICB9XG4gIC8vIDwtIFdBUlJBTlRZIFJFR0lTVFJBVElPTlxufVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcblxudmFyIGdldEJhc2VVUkwgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBsYW5nID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2h0bWwnKVswXS5sYW5nO1xuICByZXR1cm4gJy8nICsgbGFuZyArICcvYXBpL3YxJztcbn1cblxuY29uc3QgYXggPSBheGlvcy5jcmVhdGUoe1xuICBiYXNlVVJMOiBnZXRCYXNlVVJMKCksXG4gIGhlYWRlcnM6IHtcbiAgICAnWC1SZXF1ZXN0ZWQtd2l0aCc6ICdYSFInXG4gIH0sXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiAoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA8IDUwMDsgLy8gUmVqZWN0IG9ubHkgaWYgdGhlIHN0YXR1cyBjb2RlIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byA1MDBcbiAgfVxufSk7XG5cblxuY2xhc3MgRGF0YVNlcnZpY2Uge1xuICByZXF1ZXN0KG1ldGhvZCwgb3B0aW9ucykge1xuICAgIHJldHVybiBheCh7XG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIHVybDogb3B0aW9ucy51cmwsXG4gICAgICBkYXRhOiBvcHRpb25zLmRhdGEsXG4gICAgICBwYXJhbXM6IG9wdGlvbnMucGFyYW1zLFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiB0cnVlXG4gICAgfSkudGhlbihyZXMgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHJlcy5kYXRhO1xuICAgICAgaWYoIXRoaXMudnVleFN0b3JlKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuXG4gICAgICBpZihkYXRhLmNvZGUgPT09IDQwMSkge1xuICAgICAgICB0aGlzLnZ1ZXhTdG9yZS5jb21taXQoJ3NldExvZ2luU3RhdHVzJywgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBpZihkYXRhLmNvZGUgPT09IDIwMCAmJiBkYXRhLm1lc3NhZ2VzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnZ1ZXhTdG9yZS5jb21taXQoJ2FkZE5vdGlmaWNhdGlvbicsIGRhdGEubWVzc2FnZXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YTtcblxuICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgaWYoZXJyb3IucmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGVycm9yLnJlc3BvbnNlLmRhdGE7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFNlcnZlciBlcnJvciBzdGF0dXM6ICR7ZGF0YS5jb2RlfVxcbiR7ZGF0YS5yZXN1bHQuZXJyb3Iuc3RhY2t9YCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSWYgeW91J3JlIHVzaW5nIGRhdGFTZXJ2aWNlIHRoaXMgd2l0aCB2dWV4LCB3ZSBjYW4gYXV0b21hdGljYWxseSBsb2dvdXQgdXNlciBhbmQgZG8gb3RoZXIgc3R1ZmYgYmFzZWQgb24gcmVzcG9uc2VzXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzdG9yZSAtIHZ1ZXggc3RvcmUgb2JqZWN0XG4gICAqL1xuICBzZXRWdWV4U3RvcmUoc3RvcmUpIHtcbiAgICB0aGlzLnZ1ZXhTdG9yZSA9IHN0b3JlO1xuICB9XG5cbiAgZ2V0KHBhdGgsIHBhcmFtcykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ2dldCcsIHtcbiAgICAgIHVybDogcGF0aCxcbiAgICAgIHBhcmFtczogcGFyYW1zXG4gICAgfSk7XG4gIH1cbiAgcG9zdChwYXRoLCBkYXRhLCBwYXJhbXMsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ3Bvc3QnLCB7XG4gICAgICB1cmw6IHBhdGgsXG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICBjb25maWc6IGNvbmZpZ1xuICAgIH0pO1xuICB9XG4gIHBhdGNoKHBhdGgsIGRhdGEsIHBhcmFtcykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ3BhdGNoJywge1xuICAgICAgdXJsOiBwYXRoLFxuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIHBhcmFtczogcGFyYW1zXG4gICAgfSk7XG4gIH1cbiAgcHV0KHBhdGgsIGRhdGEsIHBhcmFtcykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ3B1dCcsIHtcbiAgICAgIHVybDogcGF0aCxcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgICBwYXJhbXM6IHBhcmFtc1xuICAgIH0pO1xuICB9XG4gIGRlbGV0ZShwYXRoLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdkZWxldGUnLCB7XG4gICAgICB1cmw6IHBhdGgsXG4gICAgICBwYXJhbXM6IHBhcmFtc1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBEYXRhU2VydmljZSgpO1xuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgdXNlclJpZ2h0cyB7XG4gIGNvbnN0cnVjdG9yKCl7fVxuXG4gIC8qKlxuICAqIFRlc3QgaGFzIGEgdXNlciBhIHJpZ2h0XG4gICogQHBhcmFtIHtzdHJpbmd9IHJpZ2h0IC0gdXNlciByaWdodCBuYW1lIFxuICAqIEBwYXJhbSB7c3RyaW5nfSByb2xlIC0gdXNlciByb2xlIG5hbWVcbiAgKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHVzZXIncyBncm91cCBoYXMgYSByaWdodCwgZmFsc2UgaWYgbm90XG4gICovXG4gIGhhc1JpZ2h0KCByaWdodCwgcm9sZSApIHtcbiAgICBsZXQgZ3JvdXBBbmRSaWdodHMgPSB7IFJJR0hUUzogd2luZG93LlJJR0hUUywgR1JPVVBTOiB3aW5kb3cuVVNFUl9HUk9VUFMgfTtcblxuICAgIGlmKCAhT2JqZWN0LmtleXMoIGdyb3VwQW5kUmlnaHRzLlJJR0hUUyApLmluY2x1ZGVzKCByaWdodCApICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvcjogZ2l2ZW4gcmlnaHQgaXMgbm90IGNvbmZpZ3VyZWQgdG8gZ3JvdXAgJiByaWdodHMgbW9kdWxlLiBQYXNzZWQgcmlnaHQ6ICcke3JpZ2h0fScgYCk7XG4gICAgfVxuXG4gICAgaWYoIHJvbGUgKSB7XG4gICAgICBjb25zdCByaWdodHNBcnJheSA9IGdyb3VwQW5kUmlnaHRzLkdST1VQU1sgcm9sZSBdOyAgICAgIFxuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoIHJpZ2h0c0FycmF5ICkgJiYgcmlnaHRzQXJyYXkuaW5jbHVkZXMoIHJpZ2h0ICk7IFxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTsgICAgXG4gIH1cbiAgXG59XG4iLCIvLyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gKiBTaG93IG1vcmUgZmlsZSBpbnB1dHMgd2hlbiBmaWxlcyBhcmUgYWRkZWQgdG8gZmVlZGJhY2sgZm9ybVxuLy8gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG52YXIgc2hvd0lucHV0cyA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gaW5pdCgpe1xuICAgICQoJy5qcy1mZWVkYmFjay1maWxlLWlucHV0IGlucHV0Jykub24oJ2NoYW5nZScsZnVuY3Rpb24oKXtcbiAgICAgICQodGhpcykucGFyZW50cygnLmpzLWZlZWRiYWNrLWZpbGUtaW5wdXQnKS5uZXh0KCkucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgaW5pdDogaW5pdFxuICB9XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3dJbnB1dHM7XG4iLCIvLyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gKiB2aWRlbyBwb3B1cFxuLy8gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0ICdtYWduaWZpYy1wb3B1cCc7XG5cbmNvbnN0IG1hZ25pZmljUG9wdXBWaWRlbyA9IHtcblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgZWxlbWVudHMgb24gdGhlIHBhZ2VcbiAgICogQHBhcmFtIHtzdHJpbmd8alF1ZXJ5Lmh0bWxFbG1lbnR9IGVsZW1lbnQgc2VsZWN0b3Igb3IgSHRtbCBlbGVtZW50XG4gICAqL1xuICBpbml0KCBlbGVtZW50ICkge1xuICAgIGNvbnN0ICRpdGVtcyA9ICQoZWxlbWVudCk7XG5cbiAgICAkaXRlbXMuZWFjaCgoaW5kZXgsIGVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0ICRlbGVtZW50ID0gJChlbGVtZW50KTtcbiAgICAgIGNvbnN0IHNvdXJjZSA9ICRlbGVtZW50LmRhdGEoJ3lvdXR1YmUnKTtcbiAgICAgICRlbGVtZW50Lm1hZ25pZmljUG9wdXAoe1xuICAgICAgICBzcmM6IHNvdXJjZSxcbiAgICAgICAgZGlzYWJsZU9uOiA3MDAsXG4gICAgICAgIHR5cGU6ICdpZnJhbWUnLFxuICAgICAgICByZW1vdmFsRGVsYXk6IDE2MCxcbiAgICAgICAgcHJlbG9hZGVyOiBmYWxzZSxcbiAgICAgICAgZml4ZWRDb250ZW50UG9zOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxufVxuZXhwb3J0IGRlZmF1bHQgbWFnbmlmaWNQb3B1cFZpZGVvO1xuIiwiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwidnVlLWFwcCBmdWxsLWhlaWdodFwiPlxuICAgIDxkaXYgdi1pZj1cInByZWxvYWRpbmdcIiBjbGFzcz1cInYtcHJlbG9hZGluZyBmdWxsLWhlaWdodFwiPlxuXG4gICAgPC9kaXY+XG4gICAgPGRpdiB2LWVsc2UgY2xhc3M9XCJmdWxsLWhlaWdodFwiPlxuICAgICAgPHRoZS1zdWJoZWFkZXIgdi1pZj1cInN1YmhlYWRlck5lZWRlZFwiPjwvdGhlLXN1YmhlYWRlcj5cbiAgICAgIDxyb3V0ZXItdmlldyB2LWlmPVwiaXNMb2dnZWRJblwiPjwvcm91dGVyLXZpZXc+XG4gICAgICA8ZGl2IHYtZWxzZT48cD57e2xvYygnbG9nZ2VkT3V0Jyl9fTwvcD48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8bm90aWZpY2F0aW9ucyBncm91cD1cIm5vdGlmaWNhdGlvblwiIHBvc2l0aW9uPVwidG9wIGNlbnRlclwiIDptYXg9XCIzXCI+XG4gICAgICA8dGVtcGxhdGUgc2xvdD1cImJvZHlcIiBzbG90LXNjb3BlPVwicHJvcHNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInYtbm90aWZpY2F0aW9uXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInYtbm90aWZpY2F0aW9uX19jb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidi1ub3RpZmljYXRpb25fX3RpdGxlIGgzXCI+XG4gICAgICAgICAgICAgIHt7cHJvcHMuaXRlbS50aXRsZX19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2LW5vdGlmaWNhdGlvbl9fdGV4dFwiXG4gICAgICAgICAgICAgICAgIHYtaHRtbD1cInByb3BzLml0ZW0udGV4dFwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInYtbm90aWZpY2F0aW9uX19jbG9zZVwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwicHJvcHMuY2xvc2VcIj5cbiAgICAgICAgICAgICAgWFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC90ZW1wbGF0ZT5cbiAgICA8L25vdGlmaWNhdGlvbnM+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XG4gIH0sXG4gIGNyZWF0ZWQ6IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBhcHAgPSB0aGlzO1xuICAgIGNvbnN0IGpvYnMgPSBbXTtcblxuICAgIC8vIEdldCBsYW5ndWFnZSBmcm9tIDxodG1sPiB0YWdcbiAgICBjb25zdCBsYW5nID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnbGFuZycpO1xuICAgIGFwcC4kc3RvcmUuY29tbWl0KCdzZXRMYW5ndWFnZScsIGxhbmcpO1xuXG4gICAgLy8gSWYgc3ViaGVhZGVyIGlzIGZvdW5kLCB3ZSBuZWVkIHRvIHN0b3JlIHRoZSBpbmZvLCBzbyB3ZSBkb24ndCByZW5kZXIgaXQgYWdhaW5cbiAgICBjb25zdCAkc3ViaGVhZGVyID0gJCgnLmpzLXN1YmhlYWRlcicpO1xuICAgIGlmKCRzdWJoZWFkZXIubGVuZ3RoKSB7XG4gICAgICBhcHAuJHN0b3JlLmNvbW1pdCgnc2V0U3ViaGVhZGVyRm91bmQnLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBHZXQgbG9jYWxpemF0aW9uXG4gICAgam9icy5wdXNoKGFwcC4kc3RvcmUuZGlzcGF0Y2goJ2dldExvY2FsaXphdGlvbicpKTtcblxuICAgIC8vIEdldCB1c2VyIGluZm8gaWYgaXQgaXMgbmVlZGVkIGJ5IHRoaXMgcGFydGljdWxhciBhcHBcbiAgICBpZih0aGlzLiRzdG9yZS5zdGF0ZS5uZWVkc0xvZ2dpbmdJbikge1xuICAgICAgam9icy5wdXNoKGFwcC4kc3RvcmUuZGlzcGF0Y2goJ2dldEN1cnJlbnRVc2VyJykpO1xuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGpvYnMpO1xuXG4gICAgYXBwLiRzdG9yZS5jb21taXQoJ3NldFByZWxvYWRpbmdTdGF0dXMnLCBmYWxzZSk7XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgc3ViaGVhZGVyTmVlZGVkKCkge1xuICAgICAgcmV0dXJuICF0aGlzLiRzdG9yZS5zdGF0ZS5zdWJoZWFkZXJGb3VuZDtcbiAgICB9LFxuICAgIGlzTG9nZ2VkSW4oKSB7XG4gICAgICByZXR1cm4gIXRoaXMuJHN0b3JlLnN0YXRlLm5lZWRzTG9nZ2luZ0luIHx8wqB0aGlzLiRzdG9yZS5zdGF0ZS5sb2dnZWRJbjtcbiAgICB9LFxuICAgIHByZWxvYWRpbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc3RvcmUuc3RhdGUucHJlbG9hZGluZztcbiAgICB9LFxuICAgIG5vdGlmaWNhdGlvbnNRdWV1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5zdGF0ZS5ub3RpZmljYXRpb25zUXVldWU7XG4gICAgfVxuICB9LFxuICB3YXRjaDoge1xuICAgIG5vdGlmaWNhdGlvbnNRdWV1ZToge1xuICAgICAgaGFuZGxlcjogZnVuY3Rpb24gKHF1ZXVlKSB7XG4gICAgICAgIGxldCBxdWV1ZVRvcCA9IHF1ZXVlW3F1ZXVlLmxlbmd0aCAtIDFdXG5cbiAgICAgICAgaWYodHlwZW9mIHF1ZXVlVG9wID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuJG5vdGlmeSh7XG4gICAgICAgICAgdGl0bGU6IHF1ZXVlVG9wLFxuICAgICAgICAgIGdyb3VwOiAnbm90aWZpY2F0aW9uJyxcbiAgICAgICAgICBkdXJhdGlvbjogMzAwMFxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGRlZXA6IHRydWVcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xuaW1wb3J0IHN0b3JlIGZyb20gJy4uL3N0b3JlJztcbmltcG9ydCBBUEkgZnJvbSAnLi4vLi4vc2VydmljZXMvYXBpJztcbmltcG9ydCB1c2VyUmlnaHRzIGZyb20gJy4uLy4uL3NlcnZpY2VzL3VzZXItcmlnaHRzJztcblxuaW1wb3J0IFZ1ZVRhYmxlcyBmcm9tICd2dWUtdGFibGVzLTInO1xuaW1wb3J0IFBvcnRhbFZ1ZSBmcm9tICdwb3J0YWwtdnVlJztcbmltcG9ydCBWTW9kYWwgZnJvbSAndnVlLWpzLW1vZGFsJ1xuaW1wb3J0IE5vdGlmaWNhdGlvbnMgZnJvbSAndnVlLW5vdGlmaWNhdGlvbic7XG5cbi8vIEdsb2JhbCBjb21wb25lbnRzXG5pbXBvcnQgJy4uL2NvbXBvbmVudHMvdGhlLXN1YmhlYWRlcic7XG5pbXBvcnQgJy4uL2NvbXBvbmVudHMvdGhlLXNpZGViYXItbGF5b3V0JztcbmltcG9ydCAnLi4vY29tcG9uZW50cy90aGUtMS1jb2x1bW4tbGF5b3V0JztcblxuVnVlLnVzZShOb3RpZmljYXRpb25zKTtcblZ1ZS51c2UoUG9ydGFsVnVlKTtcblxuVnVlLnVzZShWdWVUYWJsZXMuQ2xpZW50VGFibGUsIHtcbiAgc29ydEljb246IHtcbiAgICBpczogJ2ljb24tLWNoZXZyb24tdXAtZG93bi0tYmxhY2snLFxuICAgIGJhc2U6ICdpY29uJyxcbiAgICB1cDogJ2ljb24tLWNoZXZyb24tdXAtLWJsYWNrJyxcbiAgICBkb3duOiAnaWNvbi0tY2hldnJvbi1kb3duLS1ibGFjaydcbiAgfVxufSwgZmFsc2UsICgpID0+IHsgcmV0dXJuIHtcbiAgZnJhbWV3b3JrOiAnJyxcbiAgdGFibGU6ICd0YWJsZSB2LWRhdGEtdGFibGUnLFxuICByb3c6ICd2LWRhdGEtdGFibGVfX3JvdycsXG4gIGNvbHVtbjogJ3YtZGF0YS10YWJsZV9fY29sJyxcbiAgbGFiZWw6ICcnLFxuICBpbnB1dDogJ3YtZGF0YS10YWJsZV9faW5wdXQnLFxuICBzZWxlY3Q6ICd2LWRhdGEtdGFibGVfX3NlbGVjdCcsXG4gIGZpZWxkOiAndi1kYXRhLXRhYmxlX19maWVsZCcsXG4gIGlubGluZTogJ2lzLWlubGluZScsXG4gIHJpZ2h0OiAnaXMtcHVsbC1yaWdodCcsXG4gIGxlZnQ6ICdpcy1wdWxsLWxlZnQnLFxuICBjZW50ZXI6ICd0ZXh0LWNlbnRlcicsXG4gIGNvbnRlbnRDZW50ZXI6ICcnLFxuICBzbWFsbDogJycsXG4gIG5vbWFyZ2luOiAnJyxcbiAgZ3JvdXBUcjogJ3YtZGF0YS10YWJsZV9faW5mbycsXG4gIGJ1dHRvbjogJ2J0biBidG4tc2Vjb25kYXJ5JyxcbiAgZHJvcGRvd246IHtcbiAgICBjb250YWluZXI6ICdkcm9wZG93bicsXG4gICAgdHJpZ2dlcjogJ2Ryb3Bkb3duLXRvZ2dsZScsXG4gICAgbWVudTogJ2Ryb3Bkb3duLW1lbnUnLFxuICAgIGNvbnRlbnQ6ICcnLFxuICAgIGl0ZW06ICcnLFxuICAgIGNhcmV0OiAnY2FyZXQnXG4gIH0sXG4gIHBhZ2luYXRpb246IHtcbiAgICBuYXY6ICcnLFxuICAgIGNvdW50OiAnJyxcbiAgICB3cmFwcGVyOiAnJyxcbiAgICBsaXN0OiAncGFnaW5hdGlvbicsXG4gICAgaXRlbTogJ3BhZ2UtaXRlbScsXG4gICAgbGluazogJ3BhZ2UtbGluaycsXG4gICAgbmV4dDogJycsXG4gICAgcHJldjogJycsXG4gICAgYWN0aXZlOiAnYWN0aXZlJ1xuICB9XG59fSk7XG5WdWUudXNlKFZNb2RhbCwge1xuICBkaWFsb2c6IHRydWVcbn0pO1xuXG5WdWUucHJvdG90eXBlLiRhcGkgPSBuZXcgQVBJKCk7XG5WdWUucHJvdG90eXBlLiR1c2VyUmlnaHRzID0gbmV3IHVzZXJSaWdodHMoKTtcblxuXG4vLyBHbG9iYWwgbG9jYWxpemF0aW9uIGZ1bmN0aW9uIHt7bG9jKCd1c2VyLmZpcnN0TmFtZScpfX1cblZ1ZS5taXhpbih7XG4gIGRhdGE6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBsb2Moa2V5cykge1xuICAgICAgICBpZighc3RvcmUuc3RhdGUubG9jYWxpemF0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qga2V5c09yaWdpbmFsID0ga2V5cztcblxuICAgICAgICBpZighQXJyYXkuaXNBcnJheShrZXlzKSkge1xuICAgICAgICAgIGtleXMgPSBrZXlzLnNwbGl0KCcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdmFsdWU7XG5cbiAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlID8gdmFsdWVba2V5XSA6IHN0b3JlLnN0YXRlLmxvY2FsaXphdGlvbltrZXldO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZih0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuICdtaXNzaW5nOiBcIicgKyBrZXlzT3JpZ2luYWwgKyAnXCInO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSc7XG5pbXBvcnQgQXBwIGZyb20gJy4uL2FwcC52dWUnO1xuaW1wb3J0IFJvdXRlciBmcm9tICcuL3JvdXRlcic7XG5pbXBvcnQgc3RvcmUgZnJvbSAnLi4vLi4vc3RvcmUnO1xuXG5pbXBvcnQgJy4uL2NvbW1vbi1zZXR0aW5ncyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdChlbGVtZW50SWQpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTtcblxuICAgIGlmKGVsZW1lbnQpIHtcblxuICAgICAgY29uc3Qgcm91dGVyID0gbmV3IFJvdXRlcih7XG4gICAgICAgIGJhc2U6IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJhc2UtdXJsJyksXG4gICAgICAgIHBhZ2VzOiBKU09OLnBhcnNlKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXBhZ2VzJykpXG4gICAgICB9KTtcblxuICAgICAgbmV3IFZ1ZSh7XG4gICAgICAgIGVsOiAnIycgKyBlbGVtZW50SWQsXG4gICAgICAgIHJvdXRlcixcbiAgICAgICAgc3RvcmUsXG4gICAgICAgIG1vdW50ZWQgKCkge1xuICAgICAgICAgIC8vIFN0dWZmIHRvIGRvIHdoZW4gbW91bnRlZFxuICAgICAgICB9LFxuICAgICAgICByZW5kZXI6IGNyZWF0ZUVsZW1lbnQgPT4ge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KEFwcClcbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlZDogKCkgPT4ge1xuXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBWdWVSb3V0ZXIgZnJvbSAndnVlLXJvdXRlcidcblxuLy8gVmlld3NcbmltcG9ydCBDb21wbGFpbnRzIGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvdmlldy1jb21wbGFpbnRzLnZ1ZSc7XG5pbXBvcnQgQ29tcGxhaW50IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvdmlldy1jb21wbGFpbnQudnVlJztcbmltcG9ydCBDdXN0b21lck1hY2hpbmUgZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy92aWV3LWN1c3RvbWVyLW1hY2hpbmUudnVlJztcblxuVnVlLnVzZShWdWVSb3V0ZXIpXG5cbmNvbnN0IFJvdXRlciA9IChvcHRpb25zKSA9PiB7XG4gIGNvbnN0IHJvdXRlcyA9IFtcbiAgICB7IHBhdGg6ICcvJywgbmFtZTogJ2NvbXBsYWludHMnLCBjb21wb25lbnQ6IENvbXBsYWludHMgfSxcbiAgICB7IHBhdGg6ICcvOmlkJywgbmFtZTogJ2NvbXBsYWludCcsIGNvbXBvbmVudDogQ29tcGxhaW50IH0sXG4gICAgeyBwYXRoOiAnL2N1c3RvbWVyLW1hY2hpbmVzLzpzZXJpYWxOdW1iZXInLCBuYW1lOiAnY3VzdG9tZXItbWFjaGluZScsIGNvbXBvbmVudDogQ3VzdG9tZXJNYWNoaW5lLCBiZWZvcmVFbnRlcih0bywgZnJvbSwgbmV4dCkge1xuICAgICAgY29uc3QgZXh0ZXJuYWxQYWdlID0gb3B0aW9ucy5wYWdlcyAmJiBvcHRpb25zLnBhZ2VzW3RvLm5hbWVdO1xuICAgICAgaWYoZXh0ZXJuYWxQYWdlKSB7XG4gICAgICAgIGxvY2F0aW9uLmhyZWYgPSBleHRlcm5hbFBhZ2UudXJsICsgdG8ucGFyYW1zLnNlcmlhbE51bWJlcjtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbmV4dCgpO1xuICAgIH19XG4gIF07XG5cbiAgY29uc3Qgcm91dGVyID0gIG5ldyBWdWVSb3V0ZXIoe1xuICAgIG1vZGU6ICdoaXN0b3J5JyxcbiAgICBiYXNlOiBvcHRpb25zLmJhc2UsXG4gICAgbGlua0FjdGl2ZUNsYXNzOiAndi1yb3V0ZXItbGlua19fYWN0aXZlJyxcbiAgICBsaW5rRXhhY3RBY3RpdmVDbGFzczogJ3Ytcm91dGVyLWxpbmtfX2N1cnJlbnQnLFxuICAgIHJvdXRlczogcm91dGVzXG4gIH0pO1xuXG4gIHJldHVybiByb3V0ZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJvdXRlcjtcbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IFZ1ZVJvdXRlciBmcm9tICd2dWUtcm91dGVyJ1xuXG4vLyBWaWV3c1xuaW1wb3J0IEN1c3RvbWVyTWFjaGluZXMgZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy92aWV3LWN1c3RvbWVyLW1hY2hpbmVzLnZ1ZSc7XG5pbXBvcnQgQ3VzdG9tZXJNYWNoaW5lIGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvdmlldy1jdXN0b21lci1tYWNoaW5lLnZ1ZSc7XG5pbXBvcnQgQ29tcGxhaW50IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvdmlldy1jb21wbGFpbnQudnVlJztcblxuVnVlLnVzZShWdWVSb3V0ZXIpXG5cbmNvbnN0IFJvdXRlciA9IChvcHRpb25zKSA9PiB7XG4gIHJldHVybiBuZXcgVnVlUm91dGVyKHtcbiAgICBtb2RlOiAnaGlzdG9yeScsXG4gICAgYmFzZTogb3B0aW9ucy5iYXNlLFxuICAgIGxpbmtBY3RpdmVDbGFzczogJ3Ytcm91dGVyLWxpbmtfX2FjdGl2ZScsXG4gICAgbGlua0V4YWN0QWN0aXZlQ2xhc3M6ICd2LXJvdXRlci1saW5rX19jdXJyZW50JyxcbiAgICByb3V0ZXM6IFtcbiAgICAgIHsgcGF0aDogJy8nLCBuYW1lOiAnY3VzdG9tZXItbWFjaGluZXMnLCBjb21wb25lbnQ6IEN1c3RvbWVyTWFjaGluZXMgfSxcbiAgICAgIHsgcGF0aDogJy86c2VyaWFsTnVtYmVyJywgbmFtZTogJ2N1c3RvbWVyLW1hY2hpbmUnLCBjb21wb25lbnQ6IEN1c3RvbWVyTWFjaGluZSB9LFxuICAgICAgeyBwYXRoOiAnL2NvbXBsYWludHMvOmlkJywgbmFtZTogJ2NvbXBsYWludCcsIGNvbXBvbmVudDogQ29tcGxhaW50LCBiZWZvcmVFbnRlcih0bywgZnJvbSwgbmV4dCkge1xuICAgICAgICBjb25zdCBleHRlcm5hbFBhZ2UgPSBvcHRpb25zLnBhZ2VzICYmIG9wdGlvbnMucGFnZXNbdG8ubmFtZV07XG4gICAgICAgIGlmKGV4dGVybmFsUGFnZSkge1xuICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSBleHRlcm5hbFBhZ2UudXJsICsgdG8ucGFyYW1zLmlkO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgICB9fVxuICAgIF1cbiAgfSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgUm91dGVyO1xuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xuaW1wb3J0IEFwcCBmcm9tICcuLi9hcHAudnVlJztcbmltcG9ydCBSb3V0ZXIgZnJvbSAnLi9yb3V0ZXInO1xuaW1wb3J0IHN0b3JlIGZyb20gJy4uLy4uL3N0b3JlJztcblxuaW1wb3J0ICcuLi9jb21tb24tc2V0dGluZ3MnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQoZWxlbWVudElkKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7XG5cbiAgICBpZihlbGVtZW50KSB7XG5cbiAgICAgIGNvbnN0IHJvdXRlciA9IG5ldyBSb3V0ZXIoe1xuICAgICAgICBiYXNlOiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1iYXNlLXVybCcpXG4gICAgICB9KTtcblxuICAgICAgbmV3IFZ1ZSh7XG4gICAgICAgIGVsOiAnIycgKyBlbGVtZW50SWQsXG4gICAgICAgIHJvdXRlcixcbiAgICAgICAgc3RvcmUsXG4gICAgICAgIG1vdW50ZWQgKCkge1xuICAgICAgICAgIC8vIFN0dWZmIHRvIGRvIHdoZW4gbW91bnRlZFxuICAgICAgICB9LFxuICAgICAgICByZW5kZXI6IGNyZWF0ZUVsZW1lbnQgPT4ge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KEFwcClcbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlZDogKCkgPT4ge1xuXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBWdWVSb3V0ZXIgZnJvbSAndnVlLXJvdXRlcidcblxuLy8gVmlld3NcbmltcG9ydCBIb21lIGZyb20gJy4uL3ZpZXctaG9tZS52dWUnO1xuaW1wb3J0IENvbXBhbmllcyBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3ZpZXctY29tcGFuaWVzLnZ1ZSc7XG5pbXBvcnQgQ29tcGFueSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3ZpZXctY29tcGFueS52dWUnO1xuXG5WdWUudXNlKFZ1ZVJvdXRlcilcblxuY29uc3QgUm91dGVyID0gKG9wdGlvbnMpID0+IHtcbiAgcmV0dXJuIG5ldyBWdWVSb3V0ZXIoe1xuICAgIG1vZGU6ICdoaXN0b3J5JyxcbiAgICBiYXNlOiBvcHRpb25zLmJhc2UsXG4gICAgbGlua0FjdGl2ZUNsYXNzOiAndi1yb3V0ZXItbGlua19fYWN0aXZlJyxcbiAgICBsaW5rRXhhY3RBY3RpdmVDbGFzczogJ3Ytcm91dGVyLWxpbmtfX2N1cnJlbnQnLFxuICAgIHJvdXRlczogW1xuICAgICAgeyBwYXRoOiAnLycsIG5hbWU6ICdob21lJywgY29tcG9uZW50OiBIb21lIH0sXG4gICAgICB7IHBhdGg6ICcvY29tcGFuaWVzLzpwYXJlbnQnLCBuYW1lOiAnY29tcGFuaWVzJywgY29tcG9uZW50OiBDb21wYW5pZXN9LFxuICAgICAgeyBwYXRoOiAnL2NvbXBhbnkvOmlkJywgbmFtZTogJ2NvbXBhbnknLCBjb21wb25lbnQ6IENvbXBhbnl9XG4gICAgXVxuICB9KVxufVxuXG5leHBvcnQgZGVmYXVsdCBSb3V0ZXI7XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXY+PC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuXG4vLyBIb21lIHZpZXcgaXMgb25seSB1c2VkIGZvciByZWRpcmVjdGluZy4gQXQgbGVhc3QgZm9yIG5vdy5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnSG9tZScsXG4gIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgYXBwID0gdGhpcztcblxuICAgIC8vIFJlZGlyZWN0IHRvIGNvcnJlY3QgcGFnZVxuICAgIGlmKGFwcC4kc3RvcmUuc3RhdGUudXNlci5yb2xlID09PSAnaW1wb3J0ZXItYWRtaW4nIHx8IGFwcC4kc3RvcmUuc3RhdGUudXNlci5yb2xlID09PSAnc2l0ZS1hZG1pbicpIHtcbiAgICAgIGFwcC4kcm91dGVyLnJlcGxhY2Uoe1xuICAgICAgICBuYW1lOiAnY29tcGFuaWVzJyxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgcGFyZW50OiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmNvbXBhbnkuaWRcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy4kc3RvcmUuY29tbWl0KCdzZXRTdWJoZWFkZXInLCB7XG4gICAgICBzdWJ0aXRsZTogJycsXG4gICAgICB0aXRsZTogdGhpcy5sb2MoJ2NvbXBvbmVudHMuaG9tZS5zdWJoZWFkZXJUaXRsZScpLFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMubG9jKCdjb21wb25lbnRzLmhvbWUuc3ViaGVhZGVyRGVzY3JpcHRpb24nKVxuICAgIH0pO1xuICB9XG59XG48L3NjcmlwdD5cbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJztcbmltcG9ydCBBcHAgZnJvbSAnLi4vYXBwLnZ1ZSc7XG5pbXBvcnQgUm91dGVyIGZyb20gJy4vcm91dGVyJztcbmltcG9ydCBzdG9yZSBmcm9tICcuLi8uLi9zdG9yZSc7XG5cbmltcG9ydCAnLi4vY29tbW9uLXNldHRpbmdzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0KGVsZW1lbnRJZCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpO1xuXG4gICAgaWYoZWxlbWVudCkge1xuXG4gICAgICBjb25zdCByb3V0ZXIgPSBuZXcgUm91dGVyKHtcbiAgICAgICAgYmFzZTogZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYmFzZS11cmwnKVxuICAgICAgfSk7XG5cbiAgICAgIG5ldyBWdWUoe1xuICAgICAgICBlbDogJyMnICsgZWxlbWVudElkLFxuICAgICAgICByb3V0ZXIsXG4gICAgICAgIHN0b3JlLFxuICAgICAgICBtb3VudGVkICgpIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMpO1xuICAgICAgICAgIC8vIFN0dWZmIHRvIGRvIHdoZW4gbW91bnRlZFxuICAgICAgICB9LFxuICAgICAgICByZW5kZXI6IGNyZWF0ZUVsZW1lbnQgPT4ge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KEFwcClcbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlZDogKCkgPT4ge1xuICAgICAgICAgIC8vIFdlIGRvbid0IGFjdHVhbGx5IGhhdmUgc3ViaGVhZGVyIGJ1dCB3ZSBkb24ndCBuZWVkIGl0IGVpdGhlclxuICAgICAgICAgIHN0b3JlLmNvbW1pdCgnc2V0U3ViaGVhZGVyRm91bmQnLCB0cnVlKTtcbiAgICAgICAgICBzdG9yZS5jb21taXQoJ3NldE5lZWRzTG9nZ2luSW4nLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBWdWVSb3V0ZXIgZnJvbSAndnVlLXJvdXRlcidcblxuLy8gVmlld3NcbmltcG9ydCBGb3Jnb3R0ZW5QYXNzd29yZCBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3ZpZXctZm9yZ290dGVuLXBhc3N3b3JkLnZ1ZSc7XG5cblZ1ZS51c2UoVnVlUm91dGVyKVxuXG5jb25zdCBSb3V0ZXIgPSAob3B0aW9ucykgPT4ge1xuICByZXR1cm4gbmV3IFZ1ZVJvdXRlcih7XG4gICAgbW9kZTogJ2hpc3RvcnknLFxuICAgIGJhc2U6IG9wdGlvbnMuYmFzZSxcbiAgICBsaW5rQWN0aXZlQ2xhc3M6ICd2LXJvdXRlci1saW5rX19hY3RpdmUnLFxuICAgIGxpbmtFeGFjdEFjdGl2ZUNsYXNzOiAndi1yb3V0ZXItbGlua19fY3VycmVudCcsXG4gICAgcm91dGVzOiBbXG4gICAgICB7XG4gICAgICAgIHBhdGg6ICcvJywgbmFtZTogJ2ZvcmdvdHRlbi1wYXNzd29yZCcsIGNvbXBvbmVudDogRm9yZ290dGVuUGFzc3dvcmRcbiAgICAgIH1cbiAgICBdXG4gIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IFJvdXRlcjtcbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IFZ1ZVJvdXRlciBmcm9tICd2dWUtcm91dGVyJ1xuXG4vLyBWaWV3c1xuaW1wb3J0IENvbXBhbnkgZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy92aWV3LWNvbXBhbnkudnVlJztcblxuVnVlLnVzZShWdWVSb3V0ZXIpXG5cbmNvbnN0IFJvdXRlciA9IChvcHRpb25zKSA9PiB7XG4gIHJldHVybiBuZXcgVnVlUm91dGVyKHtcbiAgICBtb2RlOiAnaGlzdG9yeScsXG4gICAgYmFzZTogb3B0aW9ucy5iYXNlLFxuICAgIGxpbmtBY3RpdmVDbGFzczogJ3Ytcm91dGVyLWxpbmtfX2FjdGl2ZScsXG4gICAgbGlua0V4YWN0QWN0aXZlQ2xhc3M6ICd2LXJvdXRlci1saW5rX19jdXJyZW50JyxcbiAgICByb3V0ZXM6IFtcbiAgICAgIHsgcGF0aDogJy8nLCBuYW1lOiAnY29tcGFueScsIGNvbXBvbmVudDogQ29tcGFueSB9LFxuICAgIF1cbiAgfSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgUm91dGVyO1xuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xuaW1wb3J0IEFwcCBmcm9tICcuLi9hcHAudnVlJztcbmltcG9ydCBSb3V0ZXIgZnJvbSAnLi9yb3V0ZXInO1xuaW1wb3J0IHN0b3JlIGZyb20gJy4uLy4uL3N0b3JlJztcblxuaW1wb3J0ICcuLi9jb21tb24tc2V0dGluZ3MnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQoZWxlbWVudElkKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7XG5cbiAgICBpZihlbGVtZW50KSB7XG5cbiAgICAgIGNvbnN0IHJvdXRlciA9IG5ldyBSb3V0ZXIoe1xuICAgICAgICBiYXNlOiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1iYXNlLXVybCcpXG4gICAgICB9KTtcblxuICAgICAgbmV3IFZ1ZSh7XG4gICAgICAgIGVsOiAnIycgKyBlbGVtZW50SWQsXG4gICAgICAgIHJvdXRlcixcbiAgICAgICAgc3RvcmUsXG4gICAgICAgIG1vdW50ZWQgKCkge1xuICAgICAgICAgIC8vIFN0dWZmIHRvIGRvIHdoZW4gbW91bnRlZFxuICAgICAgICB9LFxuICAgICAgICByZW5kZXI6IGNyZWF0ZUVsZW1lbnQgPT4ge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KEFwcClcbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlZDogKCkgPT4ge1xuICAgICAgICAgIC8vIFdlIGRvbid0IGFjdHVhbGx5IGhhdmUgc3ViaGVhZGVyIGJ1dCB3ZSBkb24ndCBuZWVkIGl0IGVpdGhlclxuICAgICAgICAgIHN0b3JlLmNvbW1pdCgnc2V0U3ViaGVhZGVyRm91bmQnLCB0cnVlKTtcbiAgICAgICAgICBzdG9yZS5jb21taXQoJ3NldE5lZWRzTG9nZ2luSW4nLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBWdWVSb3V0ZXIgZnJvbSAndnVlLXJvdXRlcidcblxuLy8gVmlld3NcbmltcG9ydCBVcGRhdGVQYXNzd29yZCBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3ZpZXctdXBkYXRlLXBhc3N3b3JkLnZ1ZSc7XG5cblZ1ZS51c2UoVnVlUm91dGVyKVxuXG5jb25zdCBSb3V0ZXIgPSAob3B0aW9ucykgPT4ge1xuICByZXR1cm4gbmV3IFZ1ZVJvdXRlcih7XG4gICAgbW9kZTogJ2hpc3RvcnknLFxuICAgIGJhc2U6IG9wdGlvbnMuYmFzZSxcbiAgICBsaW5rQWN0aXZlQ2xhc3M6ICd2LXJvdXRlci1saW5rX19hY3RpdmUnLFxuICAgIGxpbmtFeGFjdEFjdGl2ZUNsYXNzOiAndi1yb3V0ZXItbGlua19fY3VycmVudCcsXG4gICAgcm91dGVzOiBbXG4gICAgICB7XG4gICAgICAgIHBhdGg6ICcvJywgbmFtZTogJ3VwZGF0ZS1wYXNzd29yZCcsIGNvbXBvbmVudDogVXBkYXRlUGFzc3dvcmRcbiAgICAgIH1cbiAgICBdXG4gIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IFJvdXRlcjtcbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IFZ1ZVJvdXRlciBmcm9tICd2dWUtcm91dGVyJ1xuXG4vLyBWaWV3c1xuaW1wb3J0IFVzZXJTZXR0aW5ncyBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3ZpZXctdXNlci1zZXR0aW5ncy52dWUnO1xuaW1wb3J0IENoYW5nZVBhc3N3b3JkIGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvdmlldy1jaGFuZ2UtcGFzc3dvcmQudnVlJztcbmltcG9ydCBFZGl0QWNjb3VudCBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3ZpZXctZWRpdC1hY2NvdW50LnZ1ZSc7XG5cblZ1ZS51c2UoVnVlUm91dGVyKVxuXG5jb25zdCBSb3V0ZXIgPSAob3B0aW9ucykgPT4ge1xuICByZXR1cm4gbmV3IFZ1ZVJvdXRlcih7XG4gICAgbW9kZTogJ2hpc3RvcnknLFxuICAgIGJhc2U6IG9wdGlvbnMuYmFzZSxcbiAgICBsaW5rQWN0aXZlQ2xhc3M6ICd2LXJvdXRlci1saW5rX19hY3RpdmUnLFxuICAgIGxpbmtFeGFjdEFjdGl2ZUNsYXNzOiAndi1yb3V0ZXItbGlua19fY3VycmVudCcsXG4gICAgcm91dGVzOiBbXG4gICAgICB7XG4gICAgICAgIHBhdGg6ICcvJywgbmFtZTogJ3VzZXItc2V0dGluZ3MnLCBjb21wb25lbnQ6IFVzZXJTZXR0aW5ncyxcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBVc2VyUHJvZmlsZSB3aWxsIGJlIHJlbmRlcmVkIGluc2lkZSBVc2VyJ3MgPHJvdXRlci12aWV3PlxuICAgICAgICAgICAgLy8gd2hlbiAvdXNlci86aWQvcHJvZmlsZSBpcyBtYXRjaGVkXG4gICAgICAgICAgICBuYW1lOiAnY2hhbmdlLXBhc3N3b3JkJyxcbiAgICAgICAgICAgIHBhdGg6ICdjaGFuZ2UtcGFzc3dvcmQnLFxuICAgICAgICAgICAgY29tcG9uZW50OiBDaGFuZ2VQYXNzd29yZFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gVXNlclBvc3RzIHdpbGwgYmUgcmVuZGVyZWQgaW5zaWRlIFVzZXIncyA8cm91dGVyLXZpZXc+XG4gICAgICAgICAgICAvLyB3aGVuIC91c2VyLzppZC9wb3N0cyBpcyBtYXRjaGVkXG4gICAgICAgICAgICBuYW1lOiAnZWRpdC1hY2NvdW50JyxcbiAgICAgICAgICAgIHBhdGg6ICdlZGl0LWFjY291bnQnLFxuICAgICAgICAgICAgY29tcG9uZW50OiBFZGl0QWNjb3VudFxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgfSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgUm91dGVyO1xuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgVnVlUm91dGVyIGZyb20gJ3Z1ZS1yb3V0ZXInXG5cbi8vIFZpZXdzXG5pbXBvcnQgV2FycmFudHlSZWdpc3RyYXRpb25zIGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvdmlldy13YXJyYW50eS1yZWdpc3RyYXRpb25zLnZ1ZSc7XG5pbXBvcnQgV2FycmFudHlSZWdpc3RyYXRpb24gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy92aWV3LXdhcnJhbnR5LXJlZ2lzdHJhdGlvbi52dWUnO1xuXG5WdWUudXNlKFZ1ZVJvdXRlcilcblxuY29uc3QgUm91dGVyID0gKG9wdGlvbnMpID0+IHtcbiAgY29uc3Qgcm91dGVzID0gW1xuICAgIHsgcGF0aDogJy8nLCBuYW1lOiAnd2FycmFudHktcmVnaXN0cmF0aW9ucycsIGNvbXBvbmVudDogV2FycmFudHlSZWdpc3RyYXRpb25zIH0sXG4gICAgeyBwYXRoOiAnLzppZCcsIG5hbWU6ICd3YXJyYW50eS1yZWdpc3RyYXRpb24nLCBjb21wb25lbnQ6IFdhcnJhbnR5UmVnaXN0cmF0aW9uIH1cbiAgXTtcblxuICBjb25zdCByb3V0ZXIgPSAgbmV3IFZ1ZVJvdXRlcih7XG4gICAgbW9kZTogJ2hpc3RvcnknLFxuICAgIGJhc2U6IG9wdGlvbnMuYmFzZSxcbiAgICBsaW5rQWN0aXZlQ2xhc3M6ICd2LXJvdXRlci1saW5rX19hY3RpdmUnLFxuICAgIGxpbmtFeGFjdEFjdGl2ZUNsYXNzOiAndi1yb3V0ZXItbGlua19fY3VycmVudCcsXG4gICAgcm91dGVzOiByb3V0ZXNcbiAgfSk7XG5cbiAgcmV0dXJuIHJvdXRlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgUm91dGVyO1xuIiwiPHRlbXBsYXRlPlxuICA8ZGl2PlxuICAgIDxtb2RhbCA6bmFtZT1cIm1vZGFsTmFtZVwiIDpjbGljay10by1jbG9zZT1cImZhbHNlXCIgOmhlaWdodD1cIidhdXRvJ1wiIDpzY3JvbGxhYmxlPVwidHJ1ZVwiPlxuICAgICAgPHYtbW9kYWwtY29udGVudCB2LW9uOmNsb3NlPVwiY2xvc2VcIiA6dGl0bGU9XCJtb2RhbE1vZGUgPT09ICdhZGQnID8gbG9jKCdhZGRDb21wYW55JykgOiBsb2MoJ2VkaXRDb21wYW55JykgXCI+XG4gICAgICAgIDx2LWZvcm0gOmZpZWxkcz1cImZpZWxkc1wiIDpmb3JtLWRhdGE9XCJmb3JtRGF0YVwiIDpmb3JtLWVycm9ycz1cImZvcm1FcnJvcnNcIj5cbiAgICAgICAgICA8ZGl2IHNsb3Q9XCJidXR0b25zXCIgY2xhc3M9XCJ2LWZvcm0tYnV0dG9uLWRpdlwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tLWNhbmNlbFwiIHR5cGU9XCJidXR0b25cIiB2LW9uOmNsaWNrPVwiY2xvc2VcIj57e2xvYygnY2FuY2VsJyl9fTwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiB2LWlmPVwibW9kYWxNb2RlID09PSAnYWRkJ1wiIHR5cGU9XCJzdWJtaXRcIiB2LW9uOmNsaWNrPVwiYWRkQ29tcGFueVwiIGNsYXNzPVwiYnRuIGJ0bi0td2hpdGVcIj57e2xvYygnYWRkQ29tcGFueScpfX08L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gdi1pZj1cIm1vZGFsTW9kZSA9PT0gJ2VkaXQnXCIgdHlwZT1cInN1Ym1pdFwiIHYtb246Y2xpY2s9XCJ1cGRhdGVDb21wYW55XCIgY2xhc3M9XCJidG4gYnRuLS13aGl0ZVwiPnt7bG9jKCd1cGRhdGVDb21wYW55Jyl9fTwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3YtZm9ybT5cbiAgICAgIDwvdi1tb2RhbC1jb250ZW50PlxuICAgIDwvbW9kYWw+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuaW1wb3J0IFZNb2RhbENvbnRlbnQgZnJvbSAnLi92LW1vZGFsLWNvbnRlbnQudnVlJztcbmltcG9ydCBWRm9ybSBmcm9tICcuL3YtZm9ybS52dWUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHtcbiAgICAndi1tb2RhbC1jb250ZW50JzogVk1vZGFsQ29udGVudCxcbiAgICAndi1mb3JtJzogVkZvcm1cbiAgfSxcbiAgbmFtZTogJ01vZGFsQ29tcGFueScsXG4gIHByb3BzOiBbJ29uLWNsb3NlJywgJ21vZGFsLW1vZGUnLCAnbW9kYWwtZGF0YSddLFxuICBkYXRhOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9ybUVycm9yczoge30sXG4gICAgICBmb3JtRGF0YToge30sXG4gICAgICBkYXRhOiB7fSxcbiAgICAgIG5hbWU6ICdjb21wYW55J1xuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBmaWVsZHMoKSB7XG4gICAgICAvLyBSZWZyZXNoIHdoZW4gY291bnRyaWVzIGxvYWRcbiAgICAgIGlmKHRoaXMuJHN0b3JlLmdldHRlcnMuY291bnRyeVNlbGVjdE9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRzKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBjYW5FZGl0Q3VzdG9tZXJOdW1iZXIoKSB7XG4gICAgICBzd2l0Y2godGhpcy5kYXRhLnR5cGUpIHtcbiAgICAgICAgY2FzZSAncmV0YWlsZXInOlxuICAgICAgICAgIHJldHVybiB0aGlzLiR1c2VyUmlnaHRzLmhhc1JpZ2h0KCB3aW5kb3cuUklHSFRTLkVESVRfQ1VTVE9NRVJfTlVNQkVSLCB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLnJvbGUgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaW1wb3J0ZXInOlxuICAgICAgICAgIHJldHVybiB0aGlzLiR1c2VyUmlnaHRzLmhhc1JpZ2h0KCB3aW5kb3cuUklHSFRTLkVESVRfQU5ZX0NVU1RPTUVSX05VTUJFUiwgdGhpcy4kc3RvcmUuc3RhdGUudXNlci5yb2xlICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICB9LFxuICAgIG1vZGFsTmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hbWUgKyAnLScgKyB0aGlzLm1vZGFsTW9kZTtcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBpbmNyZWFzZVNob3dDb3VudCgpIHtcbiAgICAgIHRoaXMuc2hvd0NvdW50Kys7XG4gICAgfSxcbiAgICBhcHBseU1vZGFsRGF0YSgpIHtcbiAgICAgIHRoaXMuZm9ybUVycm9ycyA9IHt9O1xuICAgICAgdGhpcy5mb3JtRGF0YSA9IHt9O1xuICAgICAgdGhpcy5kYXRhID0ge307XG5cbiAgICAgIGlmKHRoaXMuJHByb3BzLm1vZGFsRGF0YSkge1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLiRwcm9wcy5tb2RhbERhdGEpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICB0aGlzLmRhdGFba2V5XSA9IHRoaXMuJHByb3BzLm1vZGFsRGF0YVtrZXldO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pbmNyZWFzZVNob3dDb3VudCgpO1xuICAgIH0sXG4gICAgZ2V0RmllbGRzKCkge1xuICAgICAgLy8gUmVmcmVzaCBkYXRhIHdoZW4gc2hvd0NvdW50IGlzIGluY3JlYXNlZFxuICAgICAgdGhpcy5zaG93Q291bnQ7XG5cbiAgICAgIC8vIEluaXRpYWxpemUgZm9ybSBkZXBlbmRpbmcgb24gbW9kYWwgbW9kZVxuICAgICAgaWYodGhpcy4kcHJvcHMubW9kYWxNb2RlID09PSAnYWRkJykge1xuXG4gICAgICAgIHJldHVybiBbe1xuICAgICAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCduYW1lJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAndHlwZScsXG4gICAgICAgICAgdmFsdWU6ICdyZXRhaWxlcicsXG4gICAgICAgICAgdHlwZTogJ2hpZGRlbidcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdjdXN0b21lck51bWJlcicsXG4gICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY3VzdG9tZXJOdW1iZXInKSxcbiAgICAgICAgICB0eXBlOiB0aGlzLmNhbkVkaXRDdXN0b21lck51bWJlciA/ICd0ZXh0JyA6ICdoaWRkZW4nXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAnYnVzaW5lc3NJZCcsXG4gICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnYnVzaW5lc3NJZCcpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbmFtZTogJ2FkZHJlc3MnLFxuICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2FkZHJlc3MnKSxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdwb3N0YWxDb2RlJyxcbiAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdwb3N0YWxDb2RlJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAncG9zdE9mZmljZScsXG4gICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygncG9zdE9mZmljZScpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbmFtZTogJ21hcmtldGluZ0VtYWlsJyxcbiAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdtYXJrZXRpbmdFbWFpbCcpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LHtcbiAgICAgICAgICBuYW1lOiAnbWFya2V0aW5nUGhvbmUnLFxuICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ21hcmtldGluZ1Bob25lJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0se1xuICAgICAgICAgIG5hbWU6ICd3ZWJzaXRlJyxcbiAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCd3ZWJzaXRlJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0se1xuICAgICAgICAgIG5hbWU6ICdjb3VudHJ5JyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy4kc3RvcmUuc3RhdGUudXNlci5pbmZvLmNvdW50cnkgJiYgdGhpcy4kc3RvcmUuc3RhdGUudXNlci5pbmZvLmNvdW50cnkuY291bnRyeUNvZGUgfHwgJycsIC8vIFVzZXIgY3VycmVudCB1c2VyIGNvdW50cnkgYXMgYSBkZWZhdWx0XG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdjb3VudHJ5JyksXG4gICAgICAgICAgb3B0aW9uczogdGhpcy4kc3RvcmUuZ2V0dGVycy5jb3VudHJ5U2VsZWN0T3B0aW9ucyxcbiAgICAgICAgICB0eXBlOiAnc2VsZWN0J1xuICAgICAgICB9XVxuICAgICAgfSBlbHNlIGlmKHRoaXMuJHByb3BzLm1vZGFsTW9kZSA9PT0gJ2VkaXQnKSB7XG4gICAgICAgIHRoaXMuc2hvd0NvdW50XG4gICAgICAgIHJldHVybiBbe1xuICAgICAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLm5hbWUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCduYW1lJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAndHlwZScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS50eXBlLFxuICAgICAgICAgIHR5cGU6ICdoaWRkZW4nXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAnaWQnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEuaWQsXG4gICAgICAgICAgdHlwZTogJ2hpZGRlbidcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdjdXN0b21lck51bWJlcicsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5jdXN0b21lck51bWJlcixcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2N1c3RvbWVyTnVtYmVyJyksXG4gICAgICAgICAgdHlwZTogdGhpcy5jYW5FZGl0Q3VzdG9tZXJOdW1iZXIgPyAndGV4dCcgOiAnaGlkZGVuJ1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbmFtZTogJ2J1c2luZXNzSWQnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEuYnVzaW5lc3NJZCxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2J1c2luZXNzSWQnKSxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdhZGRyZXNzJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLmFkZHJlc3MsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdhZGRyZXNzJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAncG9zdGFsQ29kZScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5wb3N0YWxDb2RlLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygncG9zdGFsQ29kZScpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbmFtZTogJ3Bvc3RPZmZpY2UnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEucG9zdE9mZmljZSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ3Bvc3RPZmZpY2UnKSxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdtYXJrZXRpbmdFbWFpbCcsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5tYXJrZXRpbmdFbWFpbCxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ21hcmtldGluZ0VtYWlsJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0se1xuICAgICAgICAgIG5hbWU6ICdtYXJrZXRpbmdQaG9uZScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5tYXJrZXRpbmdQaG9uZSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ21hcmtldGluZ1Bob25lJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0se1xuICAgICAgICAgIG5hbWU6ICd3ZWJzaXRlJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLndlYnNpdGUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCd3ZWJzaXRlJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0se1xuICAgICAgICAgIG5hbWU6ICdjb3VudHJ5JyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLmNvdW50cnkgJiYgdGhpcy5kYXRhLmNvdW50cnkuY291bnRyeUNvZGUgfHwgJycsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdjb3VudHJ5JyksXG4gICAgICAgICAgb3B0aW9uczogdGhpcy4kc3RvcmUuZ2V0dGVycy5jb3VudHJ5U2VsZWN0T3B0aW9ucyxcbiAgICAgICAgICB0eXBlOiAnc2VsZWN0J1xuICAgICAgICB9XTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNob3coKSB7XG4gICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZ2V0Q291bnRyaWVzJyk7XG4gICAgICB0aGlzLmFwcGx5TW9kYWxEYXRhKCk7XG4gICAgICB0aGlzLiRtb2RhbC5zaG93KHRoaXMubW9kYWxOYW1lKTtcbiAgICB9LFxuICAgIGNsb3NlKGRhdGEpIHtcbiAgICAgIGlmKHRoaXMub25DbG9zZSkge1xuICAgICAgICBpZighZGF0YSkge1xuICAgICAgICAgIGRhdGEgPSB7XG4gICAgICAgICAgICBzdGF0dXM6ICdjYW5jZWwnXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2xvc2UoZGF0YSk7XG4gICAgICB9XG4gICAgICB0aGlzLiRtb2RhbC5oaWRlKHRoaXMubW9kYWxOYW1lKTtcbiAgICB9LFxuICAgIGFkZENvbXBhbnkoKSB7XG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgIHJldHVybiB0aGlzLiRhcGkuYWRkQ29tcGFueSh0aGlzLmZvcm1EYXRhKS50aGVuKHJlcyA9PiB7XG5cbiAgICAgICAgLy8gRXJyb3JzIGluIGZvcm1cbiAgICAgICAgaWYocmVzLmNvZGUgPT09IDQwMCkge1xuICAgICAgICAgIHRoaXMuZm9ybUVycm9ycyA9IHJlcy5yZXN1bHQuZmllbGRzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYocmVzLmNvZGUgPT09IDIwMCkge1xuICAgICAgICAgIHNlbGYuJHN0b3JlLmNvbW1pdCgnYWRkQ29tcGFueScsIHJlcy5yZXN1bHQuY29tcGFueSk7XG4gICAgICAgICAgc2VsZi5jbG9zZSh7c3RhdHVzOiAnc3VjY2Vzcyd9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICB1cGRhdGVDb21wYW55KCkge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICAgIHJldHVybiB0aGlzLiRhcGkudXBkYXRlQ29tcGFueSh0aGlzLmZvcm1EYXRhLmlkLCB0aGlzLmZvcm1EYXRhKS50aGVuKHJlcyA9PiB7XG5cbiAgICAgICAgLy8gRXJyb3JzIGluIGZvcm1cbiAgICAgICAgaWYocmVzLmNvZGUgPT09IDQwMCkge1xuICAgICAgICAgIHRoaXMuZm9ybUVycm9ycyA9IHJlcy5yZXN1bHQuZmllbGRzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYocmVzLmNvZGUgPT09IDIwMCkge1xuICAgICAgICAgIHNlbGYuJHN0b3JlLmNvbW1pdCgndXBkYXRlQ29tcGFueScsIHJlcy5yZXN1bHQuY29tcGFueSk7XG4gICAgICAgICAgc2VsZi5jbG9zZSh7c3RhdHVzOiAnc3VjY2Vzcyd9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LFxuICB3YXRjaDoge1xuICAgIG1vZGFsRGF0YSgpIHtcbiAgICAgIHRoaXMuYXBwbHlNb2RhbERhdGEoKTtcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8bW9kYWwgOm5hbWU9XCJtb2RhbE5hbWVcIiA6Y2xpY2stdG8tY2xvc2U9XCJmYWxzZVwiIDpoZWlnaHQ9XCInYXV0bydcIiA6c2Nyb2xsYWJsZT1cInRydWVcIj5cbiAgICA8di1tb2RhbC1jb250ZW50IHYtb246Y2xvc2U9XCJjbG9zZVwiIDp0aXRsZT1cIm1vZGFsTW9kZSA9PT0gJ2FkZCcgPyBsb2MoJ2FkZENvbXBsYWludCcpIDogbG9jKCdlZGl0Q29tcGxhaW50JykgXCI+XG4gICAgICA8IS0tIDxwIGNsYXNzPVwiaW5ncmVzc1wiPnt7bG9jKCdmb3Jtcy5tZXNzYWdlcy53YXJyYW50eVJlcXVpcmVkJyl9fTwvcD4gLS0+XG4gICAgICA8di1jb21wbGFpbnQtdXNlci1pbmZvIDp1c2VyLWRhdGE9XCJ1c2VyXCIgOmNvbXBhbnktZGF0YT1cImNvbXBhbnlcIiA+PC92LWNvbXBsYWludC11c2VyLWluZm8+XG4gICAgICA8di1mb3JtIDpmaWVsZHM9XCJmaWVsZHNcIiA6Zm9ybS1kYXRhPVwiZm9ybURhdGFcIiA6Zm9ybS1lcnJvcnM9XCJmb3JtRXJyb3JzXCIgOm9uLWJsdXI9XCJvbkZpZWxkQmx1clwiPlxuICAgICAgICA8ZGl2IHNsb3Q9XCJidXR0b25zXCI+XG4gICAgICAgICAgPHAgdi1pZj1cInVwbG9hZGluZ0ZpbGVcIj57e2xvYygndXBsb2FkaW5nRmlsZScpfX06IHt7dXBsb2FkaW5nRmlsZX19IC8ge3t0b3RhbEZpbGVzfX08L3A+XG4gICAgICAgICAgPHAgdi1lbHNlPiZuYnNwOzwvcD5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi0tY2FuY2VsXCIgdHlwZT1cImJ1dHRvblwiIHYtb246Y2xpY2s9XCJjbG9zZVwiPnt7bG9jKCdjYW5jZWwnKX19PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiA6ZGlzYWJsZWQ9XCJwcm9jZXNzaW5nXCIgdi1pZj1cIm1vZGFsTW9kZSA9PT0gJ2FkZCdcIiB0eXBlPVwic3VibWl0XCIgdi1vbjpjbGljaz1cImFkZENvbXBsYWludFwiIGNsYXNzPVwiYnRuIGJ0bi0td2hpdGVcIj57e2xvYygnYWRkQ29tcGxhaW50Jyl9fTwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdi1mb3JtPlxuICAgIDwvdi1tb2RhbC1jb250ZW50PlxuICA8L21vZGFsPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuaW1wb3J0IFZNb2RhbENvbnRlbnQgZnJvbSAnLi92LW1vZGFsLWNvbnRlbnQudnVlJztcbmltcG9ydCBWQ29tcGxhaW50VXNlckluZm8gZnJvbSAnLi92LWNvbXBsYWludC11c2VyLWluZm8udnVlJztcbmltcG9ydCBWRm9ybSBmcm9tICcuL3YtZm9ybS52dWUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHtcbiAgICAndi1tb2RhbC1jb250ZW50JzogVk1vZGFsQ29udGVudCxcbiAgICAndi1jb21wbGFpbnQtdXNlci1pbmZvJzogVkNvbXBsYWludFVzZXJJbmZvLFxuICAgICd2LWZvcm0nOiBWRm9ybVxuICB9LFxuICBuYW1lOiAnTW9kYWxDb21wbGFpbnQnLFxuICBwcm9wczogWydvbi1jbG9zZScsICdtb2RhbC1tb2RlJywgJ21vZGFsLWRhdGEnXSxcbiAgZGF0YTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvcm1FcnJvcnM6IHt9LFxuICAgICAgZm9ybURhdGE6IHt9LFxuICAgICAgZGF0YToge30sXG4gICAgICBuYW1lOiAnY29tcGxhaW50JyxcbiAgICAgIHRvdGFsRmlsZXM6IDAsXG4gICAgICB1cGxvYWRpbmdGaWxlOiAwLFxuICAgICAgcHJvY2Vzc2luZzogZmFsc2UsXG4gICAgICBmZXRjaGVkTWFjaGluZU5hbWU6ICcnLFxuICAgICAgZmV0Y2hlZERlc2NyaXB0aW9uOiAnJyxcbiAgICAgIGZldGNoZWRQcm9jZWR1cmU6ICcnXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIHVzZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc3RvcmUuc3RhdGUudXNlci5pbmZvO1xuICAgIH0sXG4gICAgY29tcGFueSgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmNvbXBhbnk7XG4gICAgfSxcbiAgICBmaWVsZHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRGaWVsZHMoKTtcbiAgICB9LFxuICAgIG1vZGFsTmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hbWUgKyAnLScgKyB0aGlzLm1vZGFsTW9kZTtcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBvbkZpZWxkQmx1cihkYXRhKSB7XG4gICAgICBpZihkYXRhLm5hbWUgPT0gJ3NlcmlhbE51bWJlcicpIHtcbiAgICAgICAgaWYodGhpcy5mb3JtRGF0YS5zZXJpYWxOdW1iZXIpIHtcbiAgICAgICAgICAvLyB0aGlzLmNoZWNrV2FycmFudHlSZWdpc3RyYXRpb24odGhpcy5mb3JtRGF0YS5zZXJpYWxOdW1iZXIpXG4gICAgICAgICAgdGhpcy5nZXRNYWNoaW5lTmFtZSh0aGlzLmZvcm1EYXRhLnNlcmlhbE51bWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGNoZWNrV2FycmFudHlSZWdpc3RyYXRpb24oc2VyaWFsTnVtYmVyKSB7XG4gICAgICB0aGlzLmZvcm1FcnJvcnMgPSB7fTtcbiAgICAgIGNvbnN0IGFsbG93ZWRTZXJpYWxOdW1iZXJzID0gdGhpcy4kc3RvcmUuc3RhdGUud2FycmFudGVkU2VyaWFsTnVtYmVycztcbiAgICAgIGlmICghYWxsb3dlZFNlcmlhbE51bWJlcnMuaW5jbHVkZXMoc2VyaWFsTnVtYmVyKSkge1xuICAgICAgICB0aGlzLmZvcm1FcnJvcnMgPSB7XG4gICAgICAgICAgZmllbGRFcnJvcjogdHJ1ZSxcbiAgICAgICAgICBzZXJpYWxOdW1iZXI6ICB7XG4gICAgICAgICAgICBmaWVsZDogJ3NlcmlhbE51bWJlcicsXG4gICAgICAgICAgICBtZXNzYWdlczogW3RoaXMubG9jKCdmb3Jtcy5tZXNzYWdlcy5ub3RXYXJyYW50ZWRTZXJpYWxOdW1iZXInKV1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGluY3JlYXNlU2hvd0NvdW50KCkge1xuICAgICAgdGhpcy5zaG93Q291bnQrKztcbiAgICB9LFxuICAgIGFwcGx5TW9kYWxEYXRhKCkge1xuICAgICAgdGhpcy5mb3JtRXJyb3JzID0ge307XG4gICAgICB0aGlzLmZvcm1EYXRhID0ge307XG4gICAgICB0aGlzLmRhdGEgPSB7fTtcbiAgICAgIHRoaXMuZmV0Y2hlZE1hY2hpbmVOYW1lID0gJyc7XG4gICAgICB0aGlzLmZldGNoZWRQcm9jZWR1cmUgPSAnJztcblxuICAgICAgaWYodGhpcy4kcHJvcHMubW9kYWxEYXRhKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuJHByb3BzLm1vZGFsRGF0YSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIHRoaXMuZGF0YVtrZXldID0gdGhpcy4kcHJvcHMubW9kYWxEYXRhW2tleV07XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmluY3JlYXNlU2hvd0NvdW50KCk7XG4gICAgfSxcbiAgICBnZXRGaWVsZHMoKSB7XG4gICAgICAvLyBJbml0aWFsaXplIGZvcm0gZGVwZW5kaW5nIG9uIG1vZGFsIG1vZGVcbiAgICAgIGlmKHRoaXMuJHByb3BzLm1vZGFsTW9kZSA9PT0gJ2FkZCcpIHtcbiAgICAgICAgcmV0dXJuIFt7XG4gICAgICAgICAgbmFtZTogJ3NlcmlhbE51bWJlcicsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5zZXJpYWxOdW1iZXIsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdzZXJpYWxOdW1iZXInKSxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLm5hbWUgfHwgdGhpcy5mZXRjaGVkTWFjaGluZU5hbWUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCduYW1lJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAncmVmZXJlbmNlSWQnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEucmVmZXJlbmNlSWQsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdmb3Jtcy5sYWJlbHMuY29tcGxhaW50UmVmZXJlbmNlJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0se1xuICAgICAgICAgIG5hbWU6ICdkZXNjcmlwdGlvbicsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5kZXNjcmlwdGlvbiB8fCB0aGlzLmZldGNoZWREZXNjcmlwdGlvbixcbiAgICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy5sb2MoJ2Zvcm1zLnBsYWNlaG9sZGVycy5jb21wbGFpbnREZXNjcmlwdGlvbicpLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnZm9ybXMubGFiZWxzLmNvbXBsYWludERlc2NyaXB0aW9uJyksXG4gICAgICAgICAgdHlwZTogJ3RleHRhcmVhJ1xuICAgICAgICB9LHtcbiAgICAgICAgICBuYW1lOiAnZGVzY3JpcHRpb25EYXRlJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLmRlc2NyaXB0aW9uRGF0ZSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2Zvcm1zLmxhYmVscy5jb21wbGFpbnREZXNjcmlwdGlvbkRhdGUnKSxcbiAgICAgICAgICB0eXBlOiAnZGF0ZSdcbiAgICAgICAgfSx7XG4gICAgICAgICAgbmFtZTogJ3Byb2NlZHVyZScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5wcm9jZWR1cmUgfHwgdGhpcy5mZXRjaGVkUHJvY2VkdXJlLFxuICAgICAgICAgIC8vcGxhY2Vob2xkZXI6IHRoaXMubG9jKCdmb3Jtcy5wbGFjZWhvbGRlcnMuY29tcGxhaW50UHJvY2VkdXJlJyksXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdmb3Jtcy5sYWJlbHMuY29tcGxhaW50UHJvY2VkdXJlJyksXG4gICAgICAgICAgdHlwZTogJ3RleHRhcmVhJ1xuICAgICAgICB9LHtcbiAgICAgICAgICBuYW1lOiAncHJvY2VkdXJlRGF0ZScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5wcm9jZWR1cmVEYXRlLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnZm9ybXMubGFiZWxzLmNvbXBsYWludFByb2NlZHVyZURhdGUnKSxcbiAgICAgICAgICB0eXBlOiAnZGF0ZSdcbiAgICAgICAgfSx7XG4gICAgICAgICAgbmFtZTogJ2FjY2Vzc29yaWVzJyxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2Zvcm1zLmxhYmVscy5jb21wbGFpbnRBY2Nlc3NvcmllcycpLFxuICAgICAgICAgIHR5cGU6ICdkYXRhLWl0ZW1zJyxcbiAgICAgICAgICBzdW1GaWVsZDogJ3ByaWNlJyxcbiAgICAgICAgICBtdWx0aXBseUZpZWxkOiAnYW1vdW50JyxcbiAgICAgICAgICBoaWRlRW1wdHk6IHRydWUsXG4gICAgICAgICAgdmFsdWU6IFtdLFxuICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY29tcGxhaW50QWNjZXNzb3JpZXMubmFtZScpLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMubG9jKCdjb21wbGFpbnRBY2Nlc3Nvcmllcy5uYW1lJyksXG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBuYW1lOiAnbmFtZSdcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2NvbXBsYWludEFjY2Vzc29yaWVzLmlkJyksXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy5sb2MoJ2NvbXBsYWludEFjY2Vzc29yaWVzLmlkJyksXG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBuYW1lOiAnaWQnXG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdjb21wbGFpbnRBY2Nlc3Nvcmllcy5hbW91bnQnKSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLmxvYygnY29tcGxhaW50QWNjZXNzb3JpZXMuYW1vdW50JyksXG4gICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgIG5hbWU6ICdhbW91bnQnXG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdjb21wbGFpbnRBY2Nlc3Nvcmllcy5wcmljZScpLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMubG9jKCdjb21wbGFpbnRBY2Nlc3Nvcmllcy5wcmljZScpLFxuICAgICAgICAgICAgdHlwZTogJ2N1cnJlbmN5JyxcbiAgICAgICAgICAgIG5hbWU6ICdwcmljZSdcbiAgICAgICAgICB9XVxuICAgICAgICB9LCB7XG4gICAgICAgICAgbmFtZTogJ3NlcnZpY2VzJyxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2Zvcm1zLmxhYmVscy5jb21wbGFpbnRKb2JzJyksXG4gICAgICAgICAgdHlwZTogJ2RhdGEtaXRlbXMnLFxuICAgICAgICAgIHN1bUZpZWxkOiAncHJpY2UnLFxuICAgICAgICAgIG11bHRpcGx5RmllbGQ6ICdob3VycycsXG4gICAgICAgICAgaGlkZUVtcHR5OiB0cnVlLFxuICAgICAgICAgIHZhbHVlOiBbXSxcbiAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAvKntcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY29tcGxhaW50U2VydmljZXMubmFtZScpLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMubG9jKCdjb21wbGFpbnRTZXJ2aWNlcy5uYW1lJyksXG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBuYW1lOiAnbmFtZSdcbiAgICAgICAgICB9LCovXG4gICAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdjb21wbGFpbnRTZXJ2aWNlcy5ob3VycycpLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMubG9jKCdjb21wbGFpbnRTZXJ2aWNlcy5ob3VycycpLFxuICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICBuYW1lOiAnaG91cnMnXG4gICAgICAgICAgfSx7XG4gICAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2NvbXBsYWludFNlcnZpY2VzLnByaWNlJyksXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy5sb2MoJ2NvbXBsYWludFNlcnZpY2VzLnByaWNlJyksXG4gICAgICAgICAgICB0eXBlOiAnY3VycmVuY3knLFxuICAgICAgICAgICAgbmFtZTogJ3ByaWNlJ1xuICAgICAgICAgIH1dXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAnZmlsZXMnLFxuICAgICAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgICAgIHZhbHVlOiBbXSxcbiAgICAgICAgICB0eXBlOiAnZmlsZSdcbiAgICAgICAgfV1cbiAgICAgIH0gZWxzZSBpZih0aGlzLiRwcm9wcy5tb2RhbE1vZGUgPT09ICdlZGl0Jykge1xuICAgICAgICAvLyBOb3QgeWV0IGltcGxlbWVudGVkXG4gICAgICB9XG4gICAgfSxcbiAgICBzaG93KCkge1xuICAgICAgdGhpcy5hcHBseU1vZGFsRGF0YSgpO1xuICAgICAgdGhpcy4kbW9kYWwuc2hvdyh0aGlzLm1vZGFsTmFtZSk7XG4gICAgfSxcbiAgICBjbG9zZShkYXRhKSB7XG4gICAgICBpZih0aGlzLm9uQ2xvc2UpIHtcbiAgICAgICAgaWYoIWRhdGEpIHtcbiAgICAgICAgICBkYXRhID0ge1xuICAgICAgICAgICAgc3RhdHVzOiAnY2FuY2VsJ1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNsb3NlKGRhdGEpO1xuICAgICAgfVxuICAgICAgdGhpcy4kbW9kYWwuaGlkZSh0aGlzLm1vZGFsTmFtZSk7XG4gICAgfSxcbiAgICBhc3luYyBnZXRNYWNoaW5lTmFtZShzZXJpYWxOdW1iZXIpIHtcblxuICAgICAgbGV0IGZvcm1EYXRhQmFja3VwID0gdGhpcy5mb3JtRGF0YTtcblxuICAgICAgbGV0IHJlcyA9IGF3YWl0IHRoaXMuJGFwaS5nZXRDdXN0b21lck1hY2hpbmUoc2VyaWFsTnVtYmVyKTtcblxuICAgICAgaWYocmVzLmNvZGUgPT0gMjAwKSB7XG4gICAgICAgIGlmKHJlcy5yZXN1bHQuaGFzT3duUHJvcGVydHkoJ2N1c3RvbWVyTWFjaGluZScpKSB7XG4gICAgICAgICAgdGhpcy5mb3JtRGF0YS5uYW1lID0gcmVzLnJlc3VsdC5jdXN0b21lck1hY2hpbmUubWFjaGluZVR5cGU7XG4gICAgICAgICAgdGhpcy5mZXRjaGVkTWFjaGluZU5hbWUgPSByZXMucmVzdWx0LmN1c3RvbWVyTWFjaGluZS5tYWNoaW5lVHlwZTtcbiAgICAgICAgICB0aGlzLmZvcm1EYXRhLmRlc2NyaXB0aW9uID0gZm9ybURhdGFCYWNrdXAuZGVzY3JpcHRpb247XG4gICAgICAgICAgdGhpcy5kYXRhLmRlc2NyaXB0aW9uID0gdGhpcy5mb3JtRGF0YS5kZXNjcmlwdGlvbjtcbiAgICAgICAgICB0aGlzLmZvcm1EYXRhLmRlc2NyaXB0aW9uRGF0ZSA9IGZvcm1EYXRhQmFja3VwLmRlc2NyaXB0aW9uRGF0ZTtcbiAgICAgICAgICB0aGlzLmRhdGEuZGVzY3JpcHRpb25EYXRlID0gdGhpcy5mb3JtRGF0YS5kZXNjcmlwdGlvbkRhdGU7XG4gICAgICAgICAgdGhpcy5mb3JtRGF0YS5wcm9jZWR1cmUgPSBmb3JtRGF0YUJhY2t1cC5wcm9jZWR1cmU7XG4gICAgICAgICAgdGhpcy5kYXRhLnByb2NlZHVyZSA9IHRoaXMuZm9ybURhdGEucHJvY2VkdXJlO1xuICAgICAgICAgIHRoaXMuZm9ybURhdGEucHJvY2VkdXJlRGF0ZSA9IGZvcm1EYXRhQmFja3VwLnByb2NlZHVyZURhdGU7XG4gICAgICAgICAgdGhpcy5kYXRhLnByb2NlZHVyZURhdGUgPSB0aGlzLmZvcm1EYXRhLnByb2NlZHVyZURhdGU7XG4gICAgICAgICAgdGhpcy5kYXRhLnNlcmlhbE51bWJlciA9IHNlcmlhbE51bWJlclxuICAgICAgICAgIHRoaXMuZm9ybURhdGEuc2VyaWFsTnVtYmVyID0gc2VyaWFsTnVtYmVyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmKHJlcy5jb2RlID09PSA0MDApIHtcbiAgICAgICAgdGhpcy5mZXRjaGVkTWFjaGluZU5hbWUgPSAnJztcbiAgICAgICAgdGhpcy5mb3JtRGF0YS5uYW1lID0gJyc7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYocmVzLmNvZGUgIT09IDIwMCkge1xuICAgICAgICB0aGlzLmZvcm1EYXRhLm5hbWUgPSAnJztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0sXG4gICAgYXN5bmMgYWRkQ29tcGxhaW50KCkge1xuICAgICAgdGhpcy5wcm9jZXNzaW5nID0gdHJ1ZTtcblxuICAgICAgbGV0IHJlcyA9IGF3YWl0IHRoaXMuJGFwaS5hZGRDb21wbGFpbnQoe1xuICAgICAgICBzZXJpYWxOdW1iZXI6IHRoaXMuZm9ybURhdGEuc2VyaWFsTnVtYmVyLFxuICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5mb3JtRGF0YS5kZXNjcmlwdGlvbixcbiAgICAgICAgZGVzY3JpcHRpb25EYXRlOiB0aGlzLmZvcm1EYXRhLmRlc2NyaXB0aW9uRGF0ZSxcbiAgICAgICAgcHJvY2VkdXJlOiB0aGlzLmZvcm1EYXRhLnByb2NlZHVyZSxcbiAgICAgICAgcHJvY2VkdXJlRGF0ZTogdGhpcy5mb3JtRGF0YS5wcm9jZWR1cmVEYXRlLFxuICAgICAgICByZWZlcmVuY2VJZDogdGhpcy5mb3JtRGF0YS5yZWZlcmVuY2VJZCxcbiAgICAgICAgYWNjZXNzb3JpZXM6IHRoaXMuZm9ybURhdGEuYWNjZXNzb3JpZXMsXG4gICAgICAgIHNlcnZpY2VzOiB0aGlzLmZvcm1EYXRhLnNlcnZpY2VzXG4gICAgICAgIC8vYWNjZXNzb3JpZXNUZXh0OiB0aGlzLmZvcm1EYXRhLmFjY2Vzc29yaWVzVGV4dCxcbiAgICAgICAgLy9qb2JzVGV4dDogdGhpcy5mb3JtRGF0YS5qb2JzVGV4dFxuICAgICAgfSlcblxuICAgICAgaWYocmVzLmNvZGUgPT09IDQwMCkge1xuICAgICAgICB0aGlzLmZvcm1FcnJvcnMgPSByZXMucmVzdWx0LmZpZWxkcztcbiAgICAgICAgdGhpcy5wcm9jZXNzaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYocmVzLmNvZGUgIT09IDIwMCkge1xuICAgICAgICB0aGlzLnByb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gVXBsb2FkIGZpbGVzIHRvIHRoYXQgY29tcGxhaW50XG4gICAgICAvLyBXZSB3YW50IHRvIHVwbG9hZCB0aGVtIGluIHNlcmllcywgc28gdGhhdCB3ZSBkb24ndCBnZXQgY29uZmxpY3RzIHdoZW4gdXBkYXRpbmcgdGhlIHJlc3VsdHMgdG8gZGF0YWJhc2VcbiAgICAgIGNvbnN0IGNvbXBsYWludCA9IHJlcy5yZXN1bHQuY29tcGxhaW50O1xuICAgICAgY29uc3QgY29tcGxhaW50SWQgPSByZXMucmVzdWx0LmNvbXBsYWludC51dWlkO1xuXG4gICAgICAvL3NlbmQgZm9ybSBldmVudCBzdHVmZiB0byBHb29nbGUgVGFnIE1hbmFnZXIgZGF0YUxheWVyXG4gICAgICB2YXIgZ2FFdmVudCA9IHtcbiAgICAgICAgZXZlbnQ6ICdyZWNsYW1hdGlvbkZvcm1TdWJtaXQnLFxuICAgICAgICByZWNsYW1hdGlvbklkOiBjb21wbGFpbnRJZCxcbiAgICAgICAgcmVjbGFtYXRpb25TZXJpYWw6IHRoaXMuZm9ybURhdGEuc2VyaWFsTnVtYmVyXG4gICAgICB9O1xuICAgICAgaWYodHlwZW9mIGRhdGFMYXllciAhPSAndW5kZWZpbmVkJyl7XG4gICAgICAgIGRhdGFMYXllci5wdXNoKGdhRXZlbnQpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnRvdGFsRmlsZXMgPSB0aGlzLmZvcm1EYXRhLmZpbGVzLmxlbmd0aDtcbiAgICAgIHRoaXMudXBsb2FkaW5nRmlsZSA9IDA7XG5cbiAgICAgIGZvcihsZXQgaSA9IDAsIGwgPSB0aGlzLmZvcm1EYXRhLmZpbGVzLmxlbmd0aDsgaTxsOyBpKyspIHtcbiAgICAgICAgY29uc3QgZmlsZSA9IHRoaXMuZm9ybURhdGEuZmlsZXNbaV07XG5cbiAgICAgICAgdGhpcy51cGxvYWRpbmdGaWxlKys7XG5cbiAgICAgICAgcmVzID0gYXdhaXQgdGhpcy4kYXBpLmFkZENvbXBsYWludEZpbGUoY29tcGxhaW50SWQsIHtcbiAgICAgICAgICBmaWxlOiBmaWxlLmZpbGVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYocmVzLmNvZGUgIT09IDIwMCkge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc2luZyA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTYXZlIHN0YXRlIG9mIGEgY29tcGxhaW50IHdpdGhvdXQgcG9zc2libGUgZmlsZXNcbiAgICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnYWRkQ29tcGxhaW50JywgY29tcGxhaW50KTtcblxuICAgICAgLy8gQW5kIHRyaWdnZXIgZmV0Y2hpbmcgb2YgZnVsbCBjb21wbGFpbnQgd2l0aCBmaWxlcyBpbmNsdWRlZFxuICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldENvbXBsYWludCcsIGNvbXBsYWludElkKTtcblxuICAgICAgdGhpcy5wcm9jZXNzaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmNsb3NlKHtzdGF0dXM6ICdzdWNjZXNzJ30pO1xuICAgIH1cbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICBtb2RhbERhdGEoKSB7XG4gICAgICB0aGlzLmFwcGx5TW9kYWxEYXRhKCk7XG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdj5cbiAgICA8bW9kYWwgOm5hbWU9XCJtb2RhbE5hbWVcIiA6Y2xpY2stdG8tY2xvc2U9XCJmYWxzZVwiIDpoZWlnaHQ9XCInYXV0bydcIiA6c2Nyb2xsYWJsZT1cInRydWVcIj5cbiAgICAgIDx2LW1vZGFsLWNvbnRlbnQgdi1vbjpjbG9zZT1cImNsb3NlXCIgOnRpdGxlPVwibW9kYWxNb2RlID09PSAnYWRkJyA/IGxvYygnYWRkVXNlcicpIDogbG9jKCdlZGl0VXNlcicpIFwiPlxuICAgICAgICA8di1mb3JtIDpmaWVsZHM9XCJmaWVsZHNcIiA6Zm9ybS1kYXRhPVwiZm9ybURhdGFcIiA6Zm9ybS1lcnJvcnM9XCJmb3JtRXJyb3JzXCI+XG4gICAgICAgICAgPGRpdiBzbG90PVwiYnV0dG9uc1wiIGNsYXNzPVwidi1mb3JtLWJ1dHRvbi1kaXZcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLS1jYW5jZWxcIiB0eXBlPVwiYnV0dG9uXCIgdi1vbjpjbGljaz1cImNsb3NlXCI+e3tsb2MoJ2NhbmNlbCcpfX08L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gdi1pZj1cIm1vZGFsTW9kZSA9PT0gJ2FkZCdcIiB0eXBlPVwic3VibWl0XCIgdi1vbjpjbGljaz1cImFkZFVzZXJcIiBjbGFzcz1cImJ0biBidG4tLXdoaXRlXCI+e3tsb2MoJ2FkZFVzZXInKX19PC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIHYtaWY9XCJtb2RhbE1vZGUgPT09ICdlZGl0J1wiIHR5cGU9XCJzdWJtaXRcIiB2LW9uOmNsaWNrPVwidXBkYXRlVXNlclwiIGNsYXNzPVwiYnRuIGJ0bi0td2hpdGVcIj57e2xvYygndXBkYXRlVXNlcicpfX08L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC92LWZvcm0+XG4gICAgICA8L3YtbW9kYWwtY29udGVudD5cbiAgICA8L21vZGFsPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmltcG9ydCBWTW9kYWxDb250ZW50IGZyb20gJy4vdi1tb2RhbC1jb250ZW50LnZ1ZSc7XG5pbXBvcnQgVkZvcm0gZnJvbSAnLi92LWZvcm0udnVlJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7XG4gICAgJ3YtbW9kYWwtY29udGVudCc6IFZNb2RhbENvbnRlbnQsXG4gICAgJ3YtZm9ybSc6IFZGb3JtXG4gIH0sXG4gIG5hbWU6ICdNb2RhbFVzZXInLFxuICBwcm9wczogWydvbi1jbG9zZScsICdtb2RhbC1tb2RlJywgJ21vZGFsLWRhdGEnXSxcbiAgZGF0YTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvcm1FcnJvcnM6IHt9LFxuICAgICAgZm9ybURhdGE6IHt9LFxuICAgICAgbmFtZTogJ3VzZXInLFxuICAgICAgc2hvd0NvdW50OiAwLFxuICAgICAgZGF0YToge31cbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgZmllbGRzKCkge1xuICAgICAgLy8gUmVmcmVzaCB3aGVuIGNvdW50cmllcyBsb2FkXG4gICAgICBpZih0aGlzLiRzdG9yZS5nZXR0ZXJzLmNvdW50cnlTZWxlY3RPcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEZpZWxkcygpO1xuICAgICAgfVxuICAgIH0sXG4gICAgbW9kYWxOYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmFtZSArICcgJyArIHRoaXMubW9kYWxNb2RlO1xuICAgIH0sXG4gICAgY2FuRWRpdFJvbGUoKSB7XG4gICAgICAvLyBDYW4gbm90IGNoYW5nZSBvd24gcm9sZVxuICAgICAgcmV0dXJuIHRoaXMuZGF0YS5pZCAhPT0gdGhpcy4kc3RvcmUuc3RhdGUudXNlci5pbmZvLmlkO1xuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGFwcGx5TW9kYWxEYXRhKCkge1xuICAgICAgdGhpcy5mb3JtRXJyb3JzID0ge307XG4gICAgICB0aGlzLmZvcm1EYXRhID0ge307XG4gICAgICB0aGlzLmRhdGEgPSB7fTtcblxuICAgICAgaWYodGhpcy4kcHJvcHMubW9kYWxEYXRhKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuJHByb3BzLm1vZGFsRGF0YSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIHRoaXMuZGF0YVtrZXldID0gdGhpcy4kcHJvcHMubW9kYWxEYXRhW2tleV07XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmluY3JlYXNlU2hvd0NvdW50KCk7XG4gICAgfSxcbiAgICBpbmNyZWFzZVNob3dDb3VudCgpIHtcbiAgICAgIHRoaXMuc2hvd0NvdW50Kys7XG4gICAgfSxcbiAgICBnZXRGaWVsZHMoKSB7XG4gICAgICAvLyBSZWZyZXNoIGRhdGEgd2hlbiBzaG93Q291bnQgaXMgaW5jcmVhc2VkXG4gICAgICB0aGlzLnNob3dDb3VudDtcblxuICAgICAgLy8gSW5pdGlhbGl6ZSBmb3JtIGRlcGVuZGluZyBvbiBtb2RhbCBtb2RlXG4gICAgICBpZih0aGlzLiRwcm9wcy5tb2RhbE1vZGUgPT09ICdhZGQnKSB7XG4gICAgICAgIHJldHVybiBbe1xuICAgICAgICAgIG5hbWU6ICdmaXJzdE5hbWUnLFxuICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2ZpcnN0TmFtZScpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbmFtZTogJ2xhc3ROYW1lJyxcbiAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdsYXN0TmFtZScpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbmFtZTogJ3VzZXJuYW1lJyxcbiAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdmb3Jtcy5sYWJlbHMudXNlcm5hbWUnKSxcbiAgICAgICAgICB0eXBlOiAnZW1haWwnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAnY29tcGFueScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5jb21wYW55SWQsXG4gICAgICAgICAgbGFiZWw6ICcnLFxuICAgICAgICAgIHR5cGU6ICdoaWRkZW4nXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAncGhvbmUnLFxuICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ3Bob25lJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAncm9sZScsXG4gICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnZm9ybXMubGFiZWxzLnJvbGUnKSxcbiAgICAgICAgICBvcHRpb25zOiBbe1xuICAgICAgICAgICAgdmFsdWU6ICdyZXRhaWxlcicsXG4gICAgICAgICAgICB0ZXh0OiB0aGlzLmxvYygncm9sZXMucmV0YWlsZXInKVxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIHZhbHVlOiAncmV0YWlsZXItYWRtaW4nLFxuICAgICAgICAgICAgdGV4dDogdGhpcy5sb2MoJ3JvbGVzLnJldGFpbGVyQWRtaW4nKVxuICAgICAgICAgIH1dLFxuICAgICAgICAgIHR5cGU6ICdzZWxlY3QnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAnY291bnRyeScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5jb3VudHJ5Q29kZSB8fCAnJyxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2NvdW50cnknKSxcbiAgICAgICAgICBvcHRpb25zOiB0aGlzLiRzdG9yZS5nZXR0ZXJzLmNvdW50cnlTZWxlY3RPcHRpb25zLFxuICAgICAgICAgIHR5cGU6ICdzZWxlY3QnXG4gICAgICAgIH1dO1xuICAgICAgfSBlbHNlIGlmKHRoaXMuJHByb3BzLm1vZGFsTW9kZSA9PT0gJ2VkaXQnKSB7XG4gICAgICAgIHJldHVybiBbe1xuICAgICAgICAgIG5hbWU6ICdpZCcsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5pZCxcbiAgICAgICAgICB0eXBlOiAnaGlkZGVuJ1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbmFtZTogJ2ZpcnN0TmFtZScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5maXJzdE5hbWUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdmaXJzdE5hbWUnKSxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdsYXN0TmFtZScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5sYXN0TmFtZSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2xhc3ROYW1lJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAncGhvbmUnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEucGhvbmUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdwaG9uZScpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbmFtZTogJ3JvbGUnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEucm9sZSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2Zvcm1zLmxhYmVscy5yb2xlJyksXG4gICAgICAgICAgb3B0aW9uczogW3tcbiAgICAgICAgICAgIHZhbHVlOiAncmV0YWlsZXInLFxuICAgICAgICAgICAgdGV4dDogdGhpcy5sb2MoJ3JvbGVzLnJldGFpbGVyJylcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICB2YWx1ZTogJ3JldGFpbGVyLWFkbWluJyxcbiAgICAgICAgICAgIHRleHQ6IHRoaXMubG9jKCdyb2xlcy5yZXRhaWxlckFkbWluJylcbiAgICAgICAgICB9XSxcbiAgICAgICAgICB0eXBlOiB0aGlzLmNhbkVkaXRSb2xlID8gJ3NlbGVjdCcgOiAnaGlkZGVuJ1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbmFtZTogJ2NvdW50cnknLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEuY291bnRyeSAmJiB0aGlzLmRhdGEuY291bnRyeS5jb3VudHJ5Q29kZSB8fCAnJyxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2NvdW50cnknKSxcbiAgICAgICAgICBvcHRpb25zOiB0aGlzLiRzdG9yZS5nZXR0ZXJzLmNvdW50cnlTZWxlY3RPcHRpb25zLFxuICAgICAgICAgIHR5cGU6ICdzZWxlY3QnXG4gICAgICAgIH1dO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2hvdygpIHtcbiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdnZXRDb3VudHJpZXMnKTtcbiAgICAgIHRoaXMuYXBwbHlNb2RhbERhdGEoKTtcbiAgICAgIHRoaXMuJG1vZGFsLnNob3codGhpcy5tb2RhbE5hbWUpO1xuICAgIH0sXG4gICAgY2xvc2UoZGF0YSkge1xuICAgICAgaWYodGhpcy5vbkNsb3NlKSB7XG4gICAgICAgIGlmKCFkYXRhKSB7XG4gICAgICAgICAgZGF0YSA9IHtcbiAgICAgICAgICAgIHN0YXR1czogJ2NhbmNlbCdcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DbG9zZShkYXRhKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuJG1vZGFsLmhpZGUodGhpcy5tb2RhbE5hbWUpO1xuICAgIH0sXG4gICAgYWRkVXNlcigpIHtcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgcmV0dXJuIHRoaXMuJGFwaS5hZGRVc2VyKHRoaXMuZm9ybURhdGEpLnRoZW4ocmVzID0+IHtcblxuICAgICAgICAvLyBFcnJvcnMgaW4gZm9ybVxuICAgICAgICBpZihyZXMuY29kZSA9PT0gNDAwKSB7XG4gICAgICAgICAgdGhpcy5mb3JtRXJyb3JzID0gcmVzLnJlc3VsdC5maWVsZHM7XG4gICAgICAgIH1cblxuICAgICAgICBpZihyZXMuY29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgc2VsZi4kc3RvcmUuY29tbWl0KCdhZGRVc2VyJywgcmVzLnJlc3VsdC51c2VyKTtcbiAgICAgICAgICBzZWxmLmNsb3NlKHtzdGF0dXM6ICdzdWNjZXNzJ30pO1xuICAgICAgICAgIHRoaXMuc2VuZE5ld1VzZXJNYWlsKHJlcy5yZXN1bHQudXNlcilcblxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGFzeW5jIHNlbmROZXdVc2VyTWFpbChkYXRhKSB7XG4gICAgICBpZighdGhpcy50b2tlbikge1xuICAgICAgICBjb25zdCB0b2tlblJlcyA9IGF3YWl0IHRoaXMuJGFwaS5nZXRUb2tlbigpO1xuICAgICAgICBpZih0b2tlblJlcy5jb2RlID09PSAyMDApIHtcbiAgICAgICAgICB0aGlzLnRva2VuID0gdG9rZW5SZXMucmVzdWx0LnRva2VuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLiRhcGkucmVnaXN0ZXJQYXNzd29yZCh7XG4gICAgICAgIHRva2VuOiB0aGlzLnRva2VuLFxuICAgICAgICB1c2VybmFtZTogZGF0YS51c2VybmFtZVxuICAgICAgfSlcbiAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgIHRoaXMudG9rZW4gPSAnJztcblxuICAgICAgICAvLyBFcnJvcnMgaW4gZm9ybVxuICAgICAgICBpZihyZXMuY29kZSA9PT0gNDAwKSB7XG4gICAgICAgICAgdGhpcy5mb3JtRXJyb3JzID0gcmVzLnJlc3VsdC5maWVsZHM7XG4gICAgICAgIH1cblxuICAgICAgICBpZihyZXMuY29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgdGhpcy5wYXNzd29yZFNlbnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHVwZGF0ZVVzZXIoKSB7XG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgIHJldHVybiB0aGlzLiRhcGkudXBkYXRlVXNlcih0aGlzLmZvcm1EYXRhLmlkLCB0aGlzLmZvcm1EYXRhKS50aGVuKHJlcyA9PiB7XG5cbiAgICAgICAgLy8gRXJyb3JzIGluIGZvcm1cbiAgICAgICAgaWYocmVzLmNvZGUgPT09IDQwMCkge1xuICAgICAgICAgIHRoaXMuZm9ybUVycm9ycyA9IHJlcy5yZXN1bHQuZmllbGRzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYocmVzLmNvZGUgPT09IDIwMCkge1xuICAgICAgICAgIHNlbGYuJHN0b3JlLmNvbW1pdCgndXBkYXRlVXNlcicsIHJlcy5yZXN1bHQudXNlcik7XG4gICAgICAgICAgc2VsZi5jbG9zZSh7c3RhdHVzOiAnc3VjY2Vzcyd9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LFxuICB3YXRjaDoge1xuICAgIG1vZGFsRGF0YSgpIHtcbiAgICAgIHRoaXMuYXBwbHlNb2RhbERhdGEoKTtcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8bW9kYWwgOm5hbWU9XCJtb2RhbE5hbWVcIiA6Y2xpY2stdG8tY2xvc2U9XCJmYWxzZVwiIDpoZWlnaHQ9XCInYXV0bydcIiA6c2Nyb2xsYWJsZT1cInRydWVcIj5cbiAgICA8di1tb2RhbC1jb250ZW50IHYtb246Y2xvc2U9XCJjbG9zZVwiIDp0aXRsZT1cIm1vZGFsTW9kZSA9PT0gJ2FkZCcgPyBsb2MoJ2FkZFdhcnJhbnR5UmVnaXN0cmF0aW9uJykgOiBsb2MoJ2VkaXRXYXJyYW50eVJlZ2lzdHJhdGlvbicpIFwiPlxuICAgICAgPHYtZm9ybSA6ZmllbGRzPVwiZmllbGRzXCIgOmZvcm0tZGF0YT1cImZvcm1EYXRhXCIgOmZvcm0tZXJyb3JzPVwiZm9ybUVycm9yc1wiPlxuICAgICAgICA8ZGl2IHNsb3Q9XCJidXR0b25zXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tLWNhbmNlbFwiIHR5cGU9XCJidXR0b25cIiB2LW9uOmNsaWNrPVwiY2xvc2VcIj57e2xvYygnY2FuY2VsJyl9fTwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gOmRpc2FibGVkPVwicHJvY2Vzc2luZ1wiIHYtaWY9XCJtb2RhbE1vZGUgPT09ICdhZGQnXCIgdHlwZT1cInN1Ym1pdFwiIHYtb246Y2xpY2s9XCJhZGRXYXJyYW50eVJlZ2lzdHJhdGlvblwiIGNsYXNzPVwiYnRuIGJ0bi0td2hpdGVcIj57e2xvYygnYWRkV2FycmFudHlSZWdpc3RyYXRpb24nKX19PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC92LWZvcm0+XG4gICAgPC92LW1vZGFsLWNvbnRlbnQ+XG4gIDwvbW9kYWw+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuXG5pbXBvcnQgVk1vZGFsQ29udGVudCBmcm9tICcuL3YtbW9kYWwtY29udGVudC52dWUnO1xuaW1wb3J0IFZGb3JtIGZyb20gJy4vdi1mb3JtLnZ1ZSc7XG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHtcbiAgICAndi1tb2RhbC1jb250ZW50JzogVk1vZGFsQ29udGVudCxcbiAgICAndi1mb3JtJzogVkZvcm1cbiAgfSxcbiAgbmFtZTogJ01vZGFsV2FycmFudHlSZWdpc3RyYXRpb24nLFxuICBwcm9wczogWydvbi1jbG9zZScsICdtb2RhbC1tb2RlJywgJ21vZGFsLWRhdGEnXSxcbiAgZGF0YTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvcm1FcnJvcnM6IHt9LFxuICAgICAgZm9ybURhdGE6IHt9LFxuICAgICAgZGF0YToge30sXG4gICAgICBuYW1lOiAnd2FycmFudHktcmVnaXN0cmF0aW9uJyxcbiAgICAgIHByb2Nlc3Npbmc6IGZhbHNlXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIGZpZWxkcygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEZpZWxkcygpO1xuICAgIH0sXG4gICAgbW9kYWxOYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmFtZSArICctJyArIHRoaXMubW9kYWxNb2RlO1xuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGluY3JlYXNlU2hvd0NvdW50KCkge1xuICAgICAgdGhpcy5zaG93Q291bnQrKztcbiAgICB9LFxuICAgIGFwcGx5TW9kYWxEYXRhKCkge1xuICAgICAgdGhpcy5mb3JtRXJyb3JzID0ge307XG4gICAgICB0aGlzLmZvcm1EYXRhID0ge307XG4gICAgICB0aGlzLmRhdGEgPSB7fTtcblxuICAgICAgaWYodGhpcy4kcHJvcHMubW9kYWxEYXRhKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuJHByb3BzLm1vZGFsRGF0YSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIHRoaXMuZGF0YVtrZXldID0gdGhpcy4kcHJvcHMubW9kYWxEYXRhW2tleV07XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmluY3JlYXNlU2hvd0NvdW50KCk7XG4gICAgfSxcbiAgICBnZXRGaWVsZHMoKSB7XG4gICAgICAvLyBJbml0aWFsaXplIGZvcm0gZGVwZW5kaW5nIG9uIG1vZGFsIG1vZGVcbiAgICAgIGlmKHRoaXMuJHByb3BzLm1vZGFsTW9kZSA9PT0gJ2FkZCcpIHtcbiAgICAgICAgcmV0dXJuIFt7XG4gICAgICAgICAgICBuYW1lOiAnbWFjaGluZUluZm9IZWFkaW5nJyxcbiAgICAgICAgICAgIGhlYWRpbmc6IHRoaXMubG9jKCdtYWNoaW5lSW5mb3JtYXRpb24nKSxcbiAgICAgICAgICAgIHR5cGU6ICdoZWFkaW5nJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdzZXJpYWxOdW1iZXInLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEuc2VyaWFsTnVtYmVyLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnc2VyaWFsTnVtYmVyJykrJyAqJyxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdtYWNoaW5lJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLm1hY2hpbmUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdtYWNoaW5lTW9kZWwnKSsnIConLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ21vcmVNYWNoaW5lcycsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdmb3Jtcy5sYWJlbHMuYWRkTW9yZU1hY2hpbmVzJyksXG4gICAgICAgICAgdHlwZTogJ2RhdGEtaXRlbXMnLFxuICAgICAgICAgIGhpZGVFbXB0eTogdHJ1ZSxcbiAgICAgICAgICBhZGRCdG5UZXh0OiB0aGlzLmxvYygnYWRkTmV3JyksXG4gICAgICAgICAgdmFsdWU6IFtdLFxuICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdzZXJpYWxOdW1iZXInLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5zZXJpYWxOdW1iZXIsXG4gICAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ3NlcmlhbE51bWJlcicpKycgKicsXG4gICAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdtYWNoaW5lJyxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEubWFjaGluZSxcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnbWFjaGluZU1vZGVsJykrJyAqJyxcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICAgIH1dXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnY3VzdG9tZXJJbmZvcm1hdGlvbkhlYWRpbmcnLFxuICAgICAgICAgIGhlYWRpbmc6IHRoaXMubG9jKCdjdXN0b21lckluZm9ybWF0aW9uJyksXG4gICAgICAgICAgdHlwZTogJ2hlYWRpbmcnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnY3VzdG9tZXJGaXJzdG5hbWUnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEuY3VzdG9tZXJGaXJzdG5hbWUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdmaXJzdE5hbWUnKSsnIConLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2N1c3RvbWVyTGFzdG5hbWUnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEuY3VzdG9tZXJMYXN0bmFtZSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2xhc3ROYW1lJykrJyAqJyxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdjdXN0b21lckNvbXBhbnknLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEuY3VzdG9tZXJDb21wYW55LFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY3VzdG9tZXJDb21wYW55JyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnY3VzdG9tZXJFbWFpbCcsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5jdXN0b21lckVtYWlsLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnZW1haWwnKSsnIConLFxuICAgICAgICAgIHR5cGU6ICdlbWFpbCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdjdXN0b21lclBob25lJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLmN1c3RvbWVyUGhvbmUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdwaG9uZScpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2RlbGl2ZXJ5RGF0ZScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5kZWxpdmVyeURhdGUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdkZWxpdmVyeURhdGUnKSsnIConLFxuICAgICAgICAgIHR5cGU6ICdkYXRlJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2N1c3RvbWVyQWRkcmVzcycsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5jdXN0b21lckFkZHJlc3MsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdhZGRyZXNzJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnY3VzdG9tZXJQb3N0YWxDb2RlJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLmN1c3RvbWVyUG9zdGFsQ29kZSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ3Bvc3RhbENvZGUnKSArICcgKicsXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0se1xuICAgICAgICAgIG5hbWU6ICdjdXN0b21lclBvc3RhbEFyZWEnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEuY3VzdG9tZXJQb3N0YWxBcmVhLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygncG9zdGFsQXJlYScpICsgJyAqJyxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdzZWxsZXJJbmZvcm1hdGlvbkhlYWRpbmcnLFxuICAgICAgICAgIGhlYWRpbmc6IHRoaXMubG9jKCdzZWxsZXJJbmZvcm1hdGlvbicpLFxuICAgICAgICAgIHR5cGU6ICdoZWFkaW5nJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3NlbGxlckZpcnN0bmFtZScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuJHN0b3JlLnN0YXRlLnVzZXIuaW5mby5maXJzdE5hbWUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdmaXJzdE5hbWUnKSsnIConLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3NlbGxlckxhc3RuYW1lJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy4kc3RvcmUuc3RhdGUudXNlci5pbmZvLmxhc3ROYW1lLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnbGFzdE5hbWUnKSsnIConLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3NlbGxlckVtYWlsJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy4kc3RvcmUuc3RhdGUudXNlci5pbmZvLnVzZXJuYW1lLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnZW1haWwnKSsnIConLFxuICAgICAgICAgIHR5cGU6ICdlbWFpbCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdzZWxsZXJTdG9yZScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuJHN0b3JlLnN0YXRlLnVzZXIuY29tcGFueS5uYW1lLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnc3RvcmUnKSsnIConLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3NlbGxlckJ1c2luZXNzSWQnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmNvbXBhbnkuYnVzaW5lc3NJZCxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2J1c2luZXNzSWQnKSxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdzZWxsZXJTdHJlZXRBZGRyZXNzJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy4kc3RvcmUuc3RhdGUudXNlci5jb21wYW55LmFkZHJlc3MsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdhZGRyZXNzJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnc2VsbGVyUG9zdGFsQ29kZScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuJHN0b3JlLnN0YXRlLnVzZXIuY29tcGFueS5wb3N0YWxDb2RlLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygncG9zdGFsQ29kZScpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3NlbGxlclBvc3RhbEFyZWEnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmNvbXBhbnkucG9zdE9mZmljZSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ3Bvc3RPZmZpY2UnKSxcbiAgICAgICAgICB0eXBlOiAndGV4dCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdyZWNlaXZlZFdhcnJhbnR5RG9jdW1lbnRzSGVhZGluZycsXG4gICAgICAgICAgaGVhZGluZzogdGhpcy5sb2MoJ3JlY2VpdmVkV2FycmFudHlEb2N1bWVudHMnKSxcbiAgICAgICAgICB0eXBlOiAnaGVhZGluZydcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdtYW51YWxSZWNlaXZlZCcsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5tYW51YWxSZWNlaXZlZCxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2NvbXBvbmVudHMud2FycmFudHlSZWdpc3RyYXRpb25zLndhcnJhbnR5TWFudWFsJykrJyAqJyxcbiAgICAgICAgICB0eXBlOiAnYm9vbCdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdjZUVEZWNsYXJhdGlvblJlY2VpdmVkJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLmNlRURlY2xhcmF0aW9uUmVjZWl2ZWQsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdjb21wb25lbnRzLndhcnJhbnR5UmVnaXN0cmF0aW9ucy5jZUVEZWNsYXJhdGlvbicpKycgKicsXG4gICAgICAgICAgdHlwZTogJ2Jvb2wnXG4gICAgICAgIH0sLypcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdzcGFyZVBhcnRzTGlzdFJlY2VpdmVkJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLnNwYXJlUGFydHNMaXN0UmVjZWl2ZWQsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdjb21wb25lbnRzLndhcnJhbnR5UmVnaXN0cmF0aW9ucy5zcGFyZVBhcnRzTGlzdCcpKycgKicsXG4gICAgICAgICAgdHlwZTogJ2Jvb2wnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnbWFpbnRlbmFuY2VCb29rbGV0UmVjZWl2ZWQnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGEubWFpbnRlbmFuY2VCb29rbGV0UmVjZWl2ZWQsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdjb21wb25lbnRzLndhcnJhbnR5UmVnaXN0cmF0aW9ucy5tYWludGVuYW5jZUJvb2tsZXQnKSsnIConLFxuICAgICAgICAgIHR5cGU6ICdib29sJ1xuICAgICAgICB9LCovXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnZW1wdHlIZWFkaW5nMScsXG4gICAgICAgICAgaGVhZGluZzogJyAnLFxuICAgICAgICAgIHR5cGU6ICdoZWFkaW5nJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2NvbnRhY3RBbGxvd2VkJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLmNvbnRhY3RBbGxvd2VkLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY29tcG9uZW50cy53YXJyYW50eVJlZ2lzdHJhdGlvbnMuY29udGFjdEFsbG93ZWQnKSsnIConLFxuICAgICAgICAgIHR5cGU6ICdib29sJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2dkcHJDb25zZW50JyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLmdkcHJDb25zZW50LFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnZ2RwckNvbnNlbnQnKSArICcgKicsXG4gICAgICAgICAgaGVscDogdGhpcy5sb2MoJ3ByaXZhY3lQYWdlTGluaycpLFxuICAgICAgICAgIHR5cGU6ICdib29sJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2NvbGxlY3REYXRhRnJvbUZhY3RvcnlDb25uZWN0aW9uJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLmNvbGxlY3REYXRhRnJvbUZhY3RvcnlDb25uZWN0aW9uLFxuICAgICAgICAgIGxhYmVsOiBgJHt0aGlzLmxvYygnY29sbGVjdERhdGFGcm9tRmFjdG9yeUNvbm5lY3Rpb24nKX0gICogYCxcbiAgICAgICAgICBoZWxwOiB0aGlzLmxvYygncHJpdmFjeVBhZ2VMaW5rJyksXG4gICAgICAgICAgdHlwZTogJ2Jvb2wnXG4gICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSBlbHNlIGlmKHRoaXMuJHByb3BzLm1vZGFsTW9kZSA9PT0gJ2VkaXQnKSB7XG4gICAgICAgIC8vIE5vdCB5ZXQgaW1wbGVtZW50ZWRcbiAgICAgIH1cbiAgICB9LFxuICAgIHNob3coKSB7XG4gICAgICB0aGlzLmFwcGx5TW9kYWxEYXRhKCk7XG4gICAgICB0aGlzLiRtb2RhbC5zaG93KHRoaXMubW9kYWxOYW1lKTtcbiAgICB9LFxuICAgIGNsb3NlKGRhdGEpIHtcbiAgICAgIGlmKHRoaXMub25DbG9zZSkge1xuICAgICAgICBpZighZGF0YSkge1xuICAgICAgICAgIGRhdGEgPSB7XG4gICAgICAgICAgICBzdGF0dXM6ICdjYW5jZWwnXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2xvc2UoZGF0YSk7XG4gICAgICB9XG4gICAgICB0aGlzLiRtb2RhbC5oaWRlKHRoaXMubW9kYWxOYW1lKTtcbiAgICB9LFxuICAgIGFzeW5jIGFkZFdhcnJhbnR5UmVnaXN0cmF0aW9uKCkge1xuICAgICAgdGhpcy5wcm9jZXNzaW5nID0gdHJ1ZTtcblxuICAgICAgbGV0IHJlcyA9IGF3YWl0IHRoaXMuJGFwaS5hZGRXYXJyYW50eVJlZ2lzdHJhdGlvbih7XG4gICAgICAgIHNlcmlhbE51bWJlcjogdGhpcy5mb3JtRGF0YS5zZXJpYWxOdW1iZXIsXG4gICAgICAgIG1hY2hpbmU6IHRoaXMuZm9ybURhdGEubWFjaGluZSxcbiAgICAgICAgbW9yZU1hY2hpbmVzOiB0aGlzLmZvcm1EYXRhLm1vcmVNYWNoaW5lcyxcbiAgICAgICAgY3VzdG9tZXJGaXJzdG5hbWU6IHRoaXMuZm9ybURhdGEuY3VzdG9tZXJGaXJzdG5hbWUsXG4gICAgICAgIGN1c3RvbWVyTGFzdG5hbWU6IHRoaXMuZm9ybURhdGEuY3VzdG9tZXJMYXN0bmFtZSxcbiAgICAgICAgY3VzdG9tZXJDb21wYW55OiB0aGlzLmZvcm1EYXRhLmN1c3RvbWVyQ29tcGFueSxcbiAgICAgICAgY3VzdG9tZXJFbWFpbDogdGhpcy5mb3JtRGF0YS5jdXN0b21lckVtYWlsLFxuICAgICAgICBjdXN0b21lclBob25lOiB0aGlzLmZvcm1EYXRhLmN1c3RvbWVyUGhvbmUsXG4gICAgICAgIGRlbGl2ZXJ5RGF0ZTogdGhpcy5mb3JtRGF0YS5kZWxpdmVyeURhdGUsXG4gICAgICAgIGN1c3RvbWVyQWRkcmVzczogdGhpcy5mb3JtRGF0YS5jdXN0b21lckFkZHJlc3MsXG4gICAgICAgIGN1c3RvbWVyUG9zdGFsQXJlYTogdGhpcy5mb3JtRGF0YS5jdXN0b21lclBvc3RhbEFyZWEsXG4gICAgICAgIGN1c3RvbWVyUG9zdGFsQ29kZTogdGhpcy5mb3JtRGF0YS5jdXN0b21lclBvc3RhbENvZGUsXG4gICAgICAgIC8vY3VzdG9tZXJOdW1iZXI6IHRoaXMuZm9ybURhdGEuY3VzdG9tZXJOdW1iZXIsXG4gICAgICAgIC8vY3VzdG9tZXJDb21wYW55TnVtYmVyOiB0aGlzLmZvcm1EYXRhLmN1c3RvbWVyQ29tcGFueU51bWJlcixcbiAgICAgICAgc2VsbGVyRmlyc3RuYW1lOiB0aGlzLmZvcm1EYXRhLnNlbGxlckZpcnN0bmFtZSxcbiAgICAgICAgc2VsbGVyTGFzdG5hbWU6IHRoaXMuZm9ybURhdGEuc2VsbGVyTGFzdG5hbWUsXG4gICAgICAgIHNlbGxlckVtYWlsOiB0aGlzLmZvcm1EYXRhLnNlbGxlckVtYWlsLFxuICAgICAgICBzZWxsZXJTdG9yZTogdGhpcy5mb3JtRGF0YS5zZWxsZXJTdG9yZSxcbiAgICAgICAgc2VsbGVyQnVzaW5lc3NJZDogdGhpcy5mb3JtRGF0YS5zZWxsZXJCdXNpbmVzc0lkLFxuICAgICAgICBzZWxsZXJTdHJlZXRBZGRyZXNzOiB0aGlzLmZvcm1EYXRhLnNlbGxlclN0cmVldEFkZHJlc3MsXG4gICAgICAgIHNlbGxlclBvc3RhbENvZGU6IHRoaXMuZm9ybURhdGEuc2VsbGVyUG9zdGFsQ29kZSxcbiAgICAgICAgc2VsbGVyUG9zdGFsQXJlYTogdGhpcy5mb3JtRGF0YS5zZWxsZXJQb3N0YWxBcmVhLFxuICAgICAgICBtYW51YWxSZWNlaXZlZDogdGhpcy5mb3JtRGF0YS5tYW51YWxSZWNlaXZlZCxcbiAgICAgICAgY2VFRGVjbGFyYXRpb25SZWNlaXZlZDogdGhpcy5mb3JtRGF0YS5jZUVEZWNsYXJhdGlvblJlY2VpdmVkLFxuICAgICAgICAvL3NwYXJlUGFydHNMaXN0UmVjZWl2ZWQ6IHRoaXMuZm9ybURhdGEuc3BhcmVQYXJ0c0xpc3RSZWNlaXZlZCxcbiAgICAgICAgLy9tYWludGVuYW5jZUJvb2tsZXRSZWNlaXZlZDogdGhpcy5mb3JtRGF0YS5tYWludGVuYW5jZUJvb2tsZXRSZWNlaXZlZCxcbiAgICAgICAgY29udGFjdEFsbG93ZWQ6IHRoaXMuZm9ybURhdGEuY29udGFjdEFsbG93ZWQsXG4gICAgICAgIGdkcHJDb25zZW50OiB0aGlzLmZvcm1EYXRhLmdkcHJDb25zZW50LFxuICAgICAgICBjb2xsZWN0RGF0YUZyb21GYWN0b3J5Q29ubmVjdGlvbjogdGhpcy5mb3JtRGF0YS5jb2xsZWN0RGF0YUZyb21GYWN0b3J5Q29ubmVjdGlvblxuICAgICAgfSlcblxuICAgICAgaWYocmVzLmNvZGUgPT09IDQwMCkge1xuICAgICAgICB0aGlzLmZvcm1FcnJvcnMgPSByZXMucmVzdWx0LmZpZWxkcztcbiAgICAgICAgdGhpcy5wcm9jZXNzaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYocmVzLmNvZGUgIT09IDIwMCkge1xuICAgICAgICB0aGlzLnByb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3YXJyYW50eVJlZ2lzdHJhdGlvbiA9IHJlcy5yZXN1bHQud2FycmFudHlSZWdpc3RyYXRpb247XG4gICAgICBjb25zdCB3YXJyYW50eVJlZ2lzdHJhdGlvbklkID0gcmVzLnJlc3VsdC53YXJyYW50eVJlZ2lzdHJhdGlvbi51dWlkO1xuXG4gICAgICAvLyBTYXZlIHN0YXRlIG9mIGEgd2FycmFudHkgcmVnaXN0cmF0aW9uXG4gICAgICB0aGlzLiRzdG9yZS5jb21taXQoJ2FkZFdhcnJhbnR5UmVnaXN0cmF0aW9uJywgd2FycmFudHlSZWdpc3RyYXRpb24pO1xuXG4gICAgICAvLyBBbmQgdHJpZ2dlciBmZXRjaGluZyBvZiBmdWxsIHdhcnJhbnR5IHJlZ2lzdHJhdGlvblxuICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldFdhcnJhbnR5UmVnaXN0cmF0aW9uJywgd2FycmFudHlSZWdpc3RyYXRpb25JZCk7XG5cbiAgICAgIHRoaXMucHJvY2Vzc2luZyA9IGZhbHNlO1xuICAgICAgdGhpcy5jbG9zZSh7c3RhdHVzOiAnc3VjY2Vzcyd9KTtcbiAgICB9XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgbW9kYWxEYXRhKCkge1xuICAgICAgdGhpcy5hcHBseU1vZGFsRGF0YSgpO1xuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSc7XG5cbi8qKlxuICogVGhpcyB1c2VzIHRlbXBsYXRlIHRoYXQgaXMgaW5jbHVkZWQgaW4gc2NyaXB0IHRhZ1xuICoqL1xuXG5WdWUuY29tcG9uZW50KCd0aGUtMS1jb2x1bW4tbGF5b3V0Jywge1xuICB0ZW1wbGF0ZTogJyNqcy1sYXlvdXQtMS1jb2x1bW4tdGVtcGxhdGUnXG59KTtcbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJztcblxuLyoqXG4gKiBUaGlzIHVzZXMgdGVtcGxhdGUgdGhhdCBpcyBpbmNsdWRlZCBpbiBzY3JpcHQgdGFnXG4gKiovXG5cblZ1ZS5jb21wb25lbnQoJ3RoZS1zaWRlYmFyLWxheW91dCcsIHtcbiAgdGVtcGxhdGU6ICcjanMtbGF5b3V0LXNpZGViYXItdGVtcGxhdGUnLFxuICBwcm9wczogWydzaWRlYmFyLXRpdGxlJ10sXG4gIGNvbXB1dGVkOiB7XG4gICAgaGFzU2lkZWJhclRpdGxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHNsb3RzWydzaWRlYmFyLXRpdGxlJ107XG4gICAgfVxuICB9XG59KTtcbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJztcblxuLyoqXG4gKiBTdWJoZWFkZXIgdXNlcyBTdGFnZSB0ZW1wbGF0ZSB0aGF0IGlzIGluY2x1ZGVkIGluIHNjcmlwdCB0YWdcbiAqKi9cblxuVnVlLmNvbXBvbmVudCgndGhlLXN1YmhlYWRlcicsIHtcbiAgdGVtcGxhdGU6ICcjanMtc3ViaGVhZGVyLXRlbXBsYXRlJyxcbiAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZWFyY2hUZXh0OiAnJyxcbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VhcmNoRW5hYmxlZCAoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc3RvcmUuc3RhdGUuc3ViaGVhZGVyLnNlYXJjaEVuYWJsZWQ7XG4gICAgfSxcbiAgICB0aXRsZSAoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc3RvcmUuc3RhdGUuc3ViaGVhZGVyLnRpdGxlO1xuICAgIH0sXG4gICAgZGVzY3JpcHRpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLnN0YXRlLnN1YmhlYWRlci5kZXNjcmlwdGlvbjtcbiAgICB9LFxuICAgIHN1YnRpdGxlICgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5zdGF0ZS5zdWJoZWFkZXIuc3VidGl0bGU7XG4gICAgfVxuICB9LFxuICB3YXRjaDoge1xuICAgIHNlYXJjaFRleHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdGhpcy4kc3RvcmUuY29tbWl0KCdzZXRTdWJoZWFkZXJTZWFyY2hUZXh0JywgdGhpcy5zZWFyY2hUZXh0KTtcbiAgICB9XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBSZW1vdmUgdGhlIG9yaWdpbmFsIGhlYWRlciBvbmNlIHdlJ3JlIGRvbmUgbG9hZGluZ1xuICAgIGNvbnN0IHN1YmhlYWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdqcy1zdWJoZWFkZXInKTtcbiAgICBpZihzdWJoZWFkZXIpIHtcbiAgICAgIHN1YmhlYWRlci5yZW1vdmUoKTtcbiAgICB9XG4gIH1cbn0pO1xuIiwiXG48dGVtcGxhdGU+XG4gIDxkaXY+XG4gICAgPHA+XG4gICAgICA8c3Ryb25nPnt7bG9jKCdzZW5kZXInKX19PC9zdHJvbmc+OiB7e3VzZXIuZmlyc3ROYW1lfX0ge3t1c2VyLmxhc3ROYW1lfX08YnI+XG4gICAgICA8c3Ryb25nPnt7bG9jKCdvcmdhbml6YXRpb24nKX19PC9zdHJvbmc+OiB7e2NvbXBhbnkubmFtZX19PGJyPlxuICAgICAgPHN0cm9uZz57e2xvYygnYWRkcmVzcycpfX08L3N0cm9uZz46IHt7Y29tcGFueS5hZGRyZXNzfX0sIHt7Y29tcGFueS5wb3N0YWxDb2RlfX0ge3tjb21wYW55LnBvc3RPZmZpY2V9fSwge3tjb21wYW55LmNvdW50cnkgJiYgY29tcGFueS5jb3VudHJ5Lm5hbWV9fTxicj5cbiAgICAgIDxzdHJvbmc+e3tsb2MoJ3Bob25lJyl9fTwvc3Ryb25nPjoge3t1c2VyLnBob25lfX08YnI+XG4gICAgICA8c3Ryb25nPnt7bG9jKCdlbWFpbCcpfX08L3N0cm9uZz46IHt7dXNlci51c2VybmFtZX19XG4gICAgPC9wPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdWQ29tcGxhaW50VXNlckluZm8nLFxuICBwcm9wczogWyd1c2VyLWlkJywgJ3VzZXItZGF0YScsICdjb21wYW55LWRhdGEnXSxcbiAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb21wYW55SWQ6IG51bGxcbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgdXNlcigpIHtcbiAgICAgIC8vIElmIHVzZXJEYXRhIGlzIHBhc3NlZCwgdXNlIHRoYXRcbiAgICAgIGlmKHRoaXMuJHByb3BzLnVzZXJEYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRwcm9wcy51c2VyRGF0YTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdXNlciA9IHRoaXMuJHN0b3JlLnN0YXRlLnVzZXJzLmZpbHRlcih1c2VyID0+IHVzZXIuaWQgPT09IHRoaXMuJHByb3BzLnVzZXJJZClbMF07XG5cbiAgICAgIGlmKHVzZXIpIHtcbiAgICAgICAgdGhpcy5jb21wYW55SWQgPSB1c2VyLmNvbXBhbnk7XG4gICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdnZXRDb21wYW55JywgdGhpcy5jb21wYW55SWQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdXNlciB8fMKge307XG4gICAgfSxcbiAgICBjb21wYW55KCkge1xuICAgICAgLy8gSWYgY29tcGFueURhdGEgaXMgcGFzc2VkLCB1c2UgdGhhdFxuICAgICAgaWYodGhpcy4kcHJvcHMuY29tcGFueURhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHByb3BzLmNvbXBhbnlEYXRhO1xuICAgICAgfVxuICAgICAgY29uc3QgY29tcGFueSA9IHRoaXMuJHN0b3JlLnN0YXRlLmNvbXBhbmllcy5maWx0ZXIoY29tcGFueSA9PiBjb21wYW55LmlkID09PSB0aGlzLmNvbXBhbnlJZClbMF07XG5cbiAgICAgIHJldHVybiBjb21wYW55IHx8wqB7fTtcbiAgICB9XG4gIH0sXG4gIG1vdW50ZWQoKSB7XG5cbiAgICAvLyBJZiB1c2VyRGF0YSBpcyBwYXNzZWQsIHVzZSB0aGF0XG4gICAgaWYodGhpcy4kcHJvcHMudXNlckRhdGEpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwcm9wcy51c2VyRGF0YTtcbiAgICB9XG5cbiAgICBpZih0aGlzLiRwcm9wcy51c2VySWQpIHtcbiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdnZXRVc2VyJywgdGhpcy4kcHJvcHMudXNlcklkKTtcbiAgICB9XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgdXNlcklkKHZhbCkge1xuICAgICAgaWYodmFsKSB7XG4gICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdnZXRVc2VyJywgdmFsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuICA8c3Bhbj5cbiAgICA8c3BhbiB2LWlmPVwiZGlzcGxheU9ubHlcIj57e2Rpc3BsYXlWYWx1ZX19PC9zcGFuPlxuICAgIDxpbnB1dCB2LWVsc2UgOmNsYXNzPVwiaW5wdXRDbGFzc1wiIHR5cGU9XCJ0ZXh0XCIgdi1tb2RlbD1cImRpc3BsYXlWYWx1ZVwiIEBibHVyPVwiaXNJbnB1dEFjdGl2ZSA9IGZhbHNlXCIgQGZvY3VzPVwiaXNJbnB1dEFjdGl2ZSA9IHRydWVcIiB2LW9uOmtleWRvd24uZW50ZXIucHJldmVudC8+XG4gIDwvc3Bhbj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdWQ3VycmVuY3lJbnB1dCcsXG4gIHByb3BzOiBbJ3ZhbHVlJywgJ2RlY2ltYWwtY2hhcicsICdkaXNwbGF5LW9ubHknLCAnaW5wdXQtY2xhc3MnXSxcbiAgZGF0YTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzSW5wdXRBY3RpdmU6IGZhbHNlLFxuICAgICAgZGVjaW1hbDogJy4nLFxuICAgICAgcmVwbGFjZURlY2ltYWw6ICcsJyxcbiAgICAgIGN1cnJlbmN5OiAn4oKsJ1xuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBkaXNwbGF5VmFsdWU6IHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgIC8vIGNoYW5nZSB2YWx1ZSB0byB6ZXJvIGlmIG5vIG51bWJlciBpcyBwYXNzZWRcbiAgICAgICAgaWYodGhpcy52YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgMClcbiAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0lucHV0QWN0aXZlKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybWF0dGVkRm9ySW5wdXQodmFsdWUsIGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBVc2VyIGlzIG5vdCBtb2RpZnlpbmcgbm93LiBGb3JtYXQgZGlzcGxheSB2YWx1ZSBmb3IgdXNlciBpbnRlcmZhY2VcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUucmVwbGFjZSgvLC9nLCAnLicpKS50b0ZpeGVkKDIpO1xuXG4gICAgICAgICAgLy8gRW5zdXJlIHRoYXQgaXQgaXMgbm90IE5hTlxuICAgICAgICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHBhcnNlRmxvYXQodmFsdWUpKTtcblxuICAgICAgICAgIHJldHVybiB0aGlzLmdldEZvcm1hdHRlZEZvcklucHV0KHZhbHVlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24obW9kaWZpZWRWYWx1ZSkge1xuICAgICAgICAvLyBSZWNhbGN1bGF0ZSB2YWx1ZSBhZnRlciBpZ25vcmluZyBcIiRcIiwgXCIsXCIgYW5kIFwiLlwiIGluIHVzZXIgaW5wdXRcbiAgICAgICAgY29uc3QgcmVnRXhwID0gbmV3IFJlZ0V4cCgnW15cXFxcZFxcXFwuLF0nLCAnZycpO1xuICAgICAgICBsZXQgbmV3VmFsdWUgPSBtb2RpZmllZFZhbHVlLnJlcGxhY2UocmVnRXhwLCBcIlwiKVxuXG4gICAgICAgIC8vIE5vdGU6IHdlIGNhbm5vdCBzZXQgdGhpcy52YWx1ZSBhcyBpdCBpcyBhIFwicHJvcFwiLiBJdCBuZWVkcyB0byBiZSBwYXNzZWQgdG8gcGFyZW50IGNvbXBvbmVudFxuICAgICAgICAvLyAkZW1pdCB0aGUgZXZlbnQgc28gdGhhdCBwYXJlbnQgY29tcG9uZW50IGdldHMgaXRcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBuZXdWYWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRGb3JtYXR0ZWRGb3JJbnB1dCh2YWx1ZSwgc2hvd0N1cnJlbmN5KSB7XG4gICAgICBsZXQgZGlzcGxheVZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcblxuICAgICAgY29uc3QgcmVnRXhwID0gbmV3IFJlZ0V4cCgnW15cXFxcZFxcXFwuLF0nLCAnZycpO1xuICAgICAgZGlzcGxheVZhbHVlID0gZGlzcGxheVZhbHVlLnJlcGxhY2UocmVnRXhwLCBcIlwiKVxuXG4gICAgICBpZih0aGlzLmRlY2ltYWwgPT09ICcsJykge1xuICAgICAgICBkaXNwbGF5VmFsdWUgPSBkaXNwbGF5VmFsdWUucmVwbGFjZSgvXFwuLywgJywnKTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgd2UgaGF2ZSB0aGUgZGVmYXVsdCB6ZXJvLCBjbGVhciBpbnB1dCB3aGVuIHN0YXJpbmcgdHlwaW5nXG4gICAgICBpZighc2hvd0N1cnJlbmN5ICYmIHZhbHVlID09PSAwKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICAgIHJldHVybiBkaXNwbGF5VmFsdWUgKyAoc2hvd0N1cnJlbmN5ID8gJyAnICsgdGhpcy5jdXJyZW5jeSA6ICcnKTtcbiAgICB9XG4gIH0sXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5kZWNpbWFsID0gdGhpcy5kZWNpbWFsQ2hhciB8fCB0aGlzLmRlY2ltYWw7XG4gICAgdGhpcy5yZXBsYWNlRGVjaW1hbCA9IHRoaXMuZGVjaW1hbCA9PT0gJy4nID8gJywnIDogJy4nOyAvLyBSZXBsYWNlIGNvbW1hcyBpZiBkb3QgaXMgdXNlIGFuZCB2aWNlIHZlcnNhXG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGU+XG5cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJ2LWRhdGEtaXRlbXNcIj5cbiAgICA8dGFibGUgdi1pZj1cInNob3dUYWJsZVwiIGNsYXNzPVwidi1kYXRhLWl0ZW1zX190YWJsZSB0YWJsZVwiPlxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dGggdi1mb3I9XCJmaWVsZCBpbiBmaWVsZHNcIiB2LWJpbmQ6a2V5PVwiZmllbGQubmFtZVwiPlxuICAgICAgICAgIHt7ZmllbGQubGFiZWx9fVxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggdi1pZj1cImVkaXRNb2RlXCI+Jm5ic3A7PC90aD5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dHIgdi1mb3I9XCIoaXRlbSwgaXRlbUluZGV4KSBpbiBpdGVtc1wiIHYtYmluZDprZXk9XCJpdGVtSW5kZXhcIj5cbiAgICAgICAgPHRkIGNsYXNzPVwidi1kYXRhLWl0ZW1zX190ZFwiIHYtZm9yPVwiZmllbGQgaW4gZmllbGRzXCIgdi1iaW5kOmtleT1cImZpZWxkLm5hbWVcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInYtZGF0YS1pdGVtc19fZXJyb3JcIiB2LWZvcj1cIihtZXNzYWdlLCBpbmRleCkgaW4gaXRlbUVycm9yTWVzc2FnZXMoaXRlbUluZGV4LCBmaWVsZC5uYW1lKVwiIHYtYmluZDprZXk9XCJpbmRleFwiPlxuICAgICAgICAgICAge3ttZXNzYWdlfX08YnI+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxkaXYgdi1pZj1cImVkaXRNb2RlXCI+XG4gICAgICAgICAgICA8di1udW1iZXItaW5wdXQgdi1pZj1cImZpZWxkLnR5cGUgPT09ICdudW1iZXInXCIgOmlucHV0LWNsYXNzPVwiJ3YtZGF0YS1pdGVtc19faW5wdXQnXCIgdi1tb2RlbD1cIml0ZW1bZmllbGQubmFtZV1cIiA6ZGVjaW1hbC1jaGFyPVwiJywnXCI+PC92LW51bWJlci1pbnB1dD5cbiAgICAgICAgICAgIDx2LWN1cnJlbmN5LWlucHV0IHYtaWY9XCJmaWVsZC50eXBlID09PSAnY3VycmVuY3knXCIgOmlucHV0LWNsYXNzPVwiJ3YtZGF0YS1pdGVtc19faW5wdXQnXCIgdi1tb2RlbD1cIml0ZW1bZmllbGQubmFtZV1cIiA6ZGVjaW1hbC1jaGFyPVwiJywnXCI+PC92LWN1cnJlbmN5LWlucHV0PlxuICAgICAgICAgICAgPGlucHV0IHYtaWY9XCJmaWVsZC50eXBlID09PSAndGV4dCdcIiBjbGFzcz1cInYtZGF0YS1pdGVtc19faW5wdXRcIiA6cGxhY2Vob2xkZXI9XCJmaWVsZC5wbGFjZWhvbGRlclwiIHYtbW9kZWw9XCJpdGVtW2ZpZWxkLm5hbWVdXCIgdi1vbjprZXlkb3duLmVudGVyLnByZXZlbnQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiB2LWlmPVwiIWVkaXRNb2RlXCI+XG4gICAgICAgICAgICA8di1udW1iZXItaW5wdXQgdi1pZj1cImZpZWxkLnR5cGUgPT09ICdudW1iZXInXCIgOmRpc3BsYXktb25seT1cInRydWVcIiA6aW5wdXQtY2xhc3M9XCIndi1kYXRhLWl0ZW1zX19pbnB1dCdcIiB2LW1vZGVsPVwiaXRlbVtmaWVsZC5uYW1lXVwiIDpkZWNpbWFsLWNoYXI9XCInLCdcIj48L3YtbnVtYmVyLWlucHV0PlxuICAgICAgICAgICAgPHYtY3VycmVuY3ktaW5wdXQgdi1pZj1cImZpZWxkLnR5cGUgPT09ICdjdXJyZW5jeSdcIiA6ZGlzcGxheS1vbmx5PVwidHJ1ZVwiIDppbnB1dC1jbGFzcz1cIid2LWRhdGEtaXRlbXNfX2lucHV0J1wiIHYtbW9kZWw9XCJpdGVtW2ZpZWxkLm5hbWVdXCIgOmRlY2ltYWwtY2hhcj1cIicsJ1wiPjwvdi1jdXJyZW5jeS1pbnB1dD5cbiAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJmaWVsZC50eXBlID09PSAndGV4dCdcIj57e2l0ZW1bZmllbGQubmFtZV19fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkIHYtaWY9XCJlZGl0TW9kZVwiIGNsYXNzPVwidi1kYXRhLWl0ZW1zX19yZW1vdmUtdGQgdGFibGVfX3RkIGlzLWFsaWduLXJpZ2h0IGlzLXZhbGlnbi1taWRkbGVcIj48YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi0td2hpdGUgdi1qb2ItaXRlbXNfX3JlbW92ZS1idXR0b25cIiBAY2xpY2s9XCJyZW1vdmVJdGVtKGl0ZW1JbmRleClcIj57e2xvYygncmVtb3ZlJyl9fTwvYnV0dG9uPjwvdGQ+XG4gICAgICA8L3RyPlxuICAgICAgPHRyIHYtaWY9XCJzdW1GaWVsZFwiPlxuICAgICAgICA8dGQgdi1mb3I9XCJmaWVsZCBpbiBmaWVsZHNcIiB2LWJpbmQ6a2V5PVwiZmllbGQubmFtZVwiPlxuICAgICAgICAgIDxkaXYgdi1pZj1cInN1bUZpZWxkID09PSBmaWVsZC5uYW1lXCI+e3tsb2MoJ3RvdGFsJyl9fTogPHYtY3VycmVuY3ktaW5wdXQgOmRpc3BsYXktb25seT1cInRydWVcIiA6dmFsdWU9XCJ0b3RhbFN1bVwiIDpkZWNpbWFsLWNoYXI9XCInLCdcIiA+PC92LWN1cnJlbmN5LWlucHV0PjwvZGl2PlxuICAgICAgICAgIDxkaXYgdi1lbHNlPiZuYnNwOzwvZGl2PlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgdi1pZj1cImVkaXRNb2RlXCI+Jm5ic3A7PC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC90YWJsZT5cbiAgICA8YnV0dG9uIHYtaWY9XCJlZGl0TW9kZVwiIGNsYXNzPVwidi1kYXRhLWl0ZW1zX19hZGQtYnV0dG9uIGJ0biBidG4tLXdoaXRlXCIgQGNsaWNrPVwiYWRkSXRlbSgpXCI+e3thZGRCdG5UZXh0IHx8IGxvYygnYWRkUm93Jyl9fTwvYnV0dG9uPlxuICA8L2Rpdj5cblxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBWQ3VycmVuY3lJbnB1dCBmcm9tICcuL3YtY3VycmVuY3ktaW5wdXQudnVlJztcbmltcG9ydCBWTnVtYmVySW5wdXQgZnJvbSAnLi92LW51bWJlci1pbnB1dC52dWUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHtcbiAgICAndi1jdXJyZW5jeS1pbnB1dCc6IFZDdXJyZW5jeUlucHV0LFxuICAgICd2LW51bWJlci1pbnB1dCc6IFZOdW1iZXJJbnB1dFxuICB9LFxuICBuYW1lOiAnVkRhdGFJdGVtcycsXG4gIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IFtdLFxuICAgICAgZXJyb3JEYXRhOiB7fSxcbiAgICAgIHBhdHRlcm5zOiB7XG4gICAgICAgIHRleHQ6ICcnLFxuICAgICAgICBudW1iZXI6ICctP1swLTldK1tcXCwuXSpbMC05XSsnXG4gICAgICB9XG4gICAgfVxuICB9LFxuICBwcm9wczoge1xuICAgIHN1bUZpZWxkOiBTdHJpbmcsXG4gICAgbXVsdGlwbHlGaWVsZDogU3RyaW5nLFxuICAgIG9uQ2hhbmdlOiBGdW5jdGlvbixcbiAgICBmaWVsZHM6IEFycmF5LFxuICAgIGRhdGE6IEFycmF5LFxuICAgIGhpZGVFbXB0eTogQm9vbGVhbixcbiAgICBhZGRCdG5UZXh0OiBTdHJpbmcsXG4gICAgZXJyb3JzOiBPYmplY3QsXG4gICAgZWRpdE1vZGU6IHtcbiAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICB0eXBlOiBCb29sZWFuXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIHNob3dUYWJsZSgpIHtcbiAgICAgIGlmKCF0aGlzLmhpZGVFbXB0eSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuaXRlbXMubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH0sXG4gICAgdG90YWxTdW0gKCkge1xuICAgICAgbGV0IHN1bSA9IDA7XG4gICAgICB0aGlzLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IG11bHRpcGx5RmllbGRWYWx1ZSA9IGl0ZW1bdGhpcy5tdWx0aXBseUZpZWxkXSB8fMKgMTtcbiAgICAgICAgY29uc3Qgc3VtRmllbGRWYWx1ZSA9IChpdGVtW3RoaXMuc3VtRmllbGRdIHx8wqAwKSAqIG11bHRpcGx5RmllbGRWYWx1ZTtcbiAgICAgICAgaWYodHlwZW9mIHN1bUZpZWxkVmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgc3VtICs9IHN1bUZpZWxkVmFsdWVcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBzdW07XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgaXRlbUVycm9yTWVzc2FnZXMoaXRlbUluZGV4LCBmaWVsZE5hbWUpIHtcbiAgICAgIGNvbnN0IGl0ZW1EYXRhID0gdGhpcy5lcnJvckRhdGFbaXRlbUluZGV4XTtcblxuICAgICAgcmV0dXJuIGl0ZW1EYXRhICYmIGl0ZW1EYXRhW2ZpZWxkTmFtZV0gJiYgaXRlbURhdGFbZmllbGROYW1lXS5tZXNzYWdlcyB8fCBbXTtcbiAgICB9LFxuICAgIGFkZEl0ZW0oKSB7XG4gICAgICBjb25zdCBpdGVtID0ge307XG4gICAgICB0aGlzLmZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgaXRlbVtmaWVsZC5uYW1lXSA9IG51bGw7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5pdGVtcy5wdXNoKGl0ZW0pO1xuICAgIH0sXG4gICAgcmVtb3ZlSXRlbShpbmRleCkge1xuICAgICAgdGhpcy5pdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgaWYodHlwZW9mIHRoaXMub25DaGFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLml0ZW1zKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVwZGF0ZShlKSB7XG4gICAgICBpZih0eXBlb2YgdGhpcy5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuaXRlbXMpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLml0ZW1zID0gdGhpcy5kYXRhIHx8wqBbXTtcbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICBkYXRhKCkge1xuICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuZGF0YSB8fMKgW107XG4gICAgfSxcbiAgICBlcnJvcnMoKSB7XG4gICAgICB0aGlzLmVycm9yRGF0YSA9IHRoaXMuZXJyb3JzIHx8wqB7fTtcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGU+XG5cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJ2LWZpbGVcIj5cbiAgICA8YnV0dG9uIEBjbGljaz1cImNsaWNrRmlsZUlucHV0XCIgY2xhc3M9XCJ2LWZpbGVfX2J1dHRvbiBidG4gYnRuLS13aGl0ZVwiIDpkaXNhYmxlZD1cImxpbWl0UmVhY2hlZFwiPnt7bG9jKCdhZGRGaWxlcycpfX08L2J1dHRvbj5cbiAgICA8aW5wdXQgcmVmPVwiZmlsZUlucHV0XCIgOmRpc2FibGVkPVwibGltaXRSZWFjaGVkXCIgY2xhc3M9XCJ2LWZpbGVfX2ZpbGUtaW5wdXRcIiB0eXBlPVwiZmlsZVwiIDptdWx0aXBsZT1cIiEhbXVsdGlwbGVcIiB2LW9uOmNoYW5nZT1cIm9uRmlsZUNoYW5nZVwiPlxuICAgIDxkaXYgdi1pZj1cInJlYWRGaWxlcy5sZW5ndGhcIiBjbGFzcz1cInYtZmlsZV9fZmlsZXNcIj5cbiAgICAgIDxoNCBjbGFzcz1cInYtZmlsZV9fZmlsZXMtdGl0bGVcIj57e2xvYygnYWRkZWRGaWxlcycpfX08L2g0PlxuICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGVcIj5cbiAgICAgICAgPHRyIHYtZm9yPVwiKGZpbGUsIGluZGV4KSBpbiByZWFkRmlsZXNcIiB2LWJpbmQ6a2V5PVwiaW5kZXhcIj5cbiAgICAgICAgICA8dGQ+e3tmaWxlLm5hbWV9fTwvdGQ+XG4gICAgICAgICAgPHRkIGNsYXNzPVwidGFibGVfX3RkIGlzLWFsaWduLXJpZ2h0XCI+PGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tLXdoaXRlIHYtZmlsZV9fcmVtb3ZlLWJ1dHRvblwiIEBjbGljaz1cInJlbW92ZUZpbGUoaW5kZXgpXCI+e3tsb2MoJ3JlbW92ZUZpbGUnKX19PC9idXR0b24+PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnVkZpbGUnLFxuICBkYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlYWRGaWxlczogW11cbiAgICB9XG4gIH0sXG4gIHByb3BzOiBbJ211bHRpcGxlJywgJ29uLWNoYW5nZScsICdmaWxlLWNvdW50LWxpbWl0J10sXG4gIGNvbXB1dGVkOiB7XG4gICAgbGltaXRSZWFjaGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsZUNvdW50TGltaXQgPyB0aGlzLmZpbGVDb3VudExpbWl0IDw9IHRoaXMucmVhZEZpbGVzLmxlbmd0aCA6IGZhbHNlO1xuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIHJlbW92ZUZpbGUoaW5kZXgpIHtcbiAgICAgIHRoaXMucmVhZEZpbGVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMucmVhZEZpbGVzKTtcbiAgICB9LFxuICAgIGNsaWNrRmlsZUlucHV0KCkge1xuICAgICAgdGhpcy4kcmVmcy5maWxlSW5wdXQuY2xpY2soKTtcbiAgICB9LFxuICAgIC8vIElmIHlvdSB1cGRhdGUgdGhpcyBmdW5jdGlvbiwgcmVtZW1iZXIgdG8gdXBkYXRlIGl0IHRvIFN0YWdlIGFwcC1jb3JlIHJ1bGVzIHRvb1xuICAgIGlzRGF0YVVybChkYXRhVXJsKSB7XG4gICAgICBjb25zdCByZWdleCA9IC9eZGF0YTooW2Etel0rXFwvW2EtejAtOS0rLl0rKDtbYS16LV0rPVthLXowLTktXSspPyk/KDtiYXNlNjQpPywoW2EtejAtOSEkJicsKCkqKzs9XFwtLl9+OkBcXC8/JVxcc10qKSokL2k7XG4gICAgICByZXR1cm4gISFkYXRhVXJsLnRyaW0oKS5tYXRjaChyZWdleCk7XG4gICAgfSxcbiAgICBvbkZpbGVDaGFuZ2UoZSkge1xuICAgICAgY29uc3QgZmlsZXMgPSBlLnRhcmdldC5maWxlcyB8fCBlLmRhdGFUcmFuc2Zlci5maWxlcyB8fCBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBmaWxlID0gZmlsZXNbaV07XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cbiAgICAgICAgcmVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCAoKSA9PiB7XG4gICAgICAgICAgaWYoIXRoaXMubGltaXRSZWFjaGVkICYmIHRoaXMuaXNEYXRhVXJsKHJlYWRlci5yZXN1bHQpKSB7XG4gICAgICAgICAgICB0aGlzLnJlYWRGaWxlcy5wdXNoKHtcbiAgICAgICAgICAgICAgZGF0YTogcmVhZGVyLnJlc3VsdCxcbiAgICAgICAgICAgICAgZmlsZTogZmlsZSxcbiAgICAgICAgICAgICAgbmFtZTogZmlsZS5uYW1lLFxuICAgICAgICAgICAgICBzaXplOiBmaWxlLnNpemUsXG4gICAgICAgICAgICAgIHR5cGU6IGZpbGUudHlwZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmKHR5cGVvZiB0aGlzLm9uQ2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5yZWFkRmlsZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSwgZmFsc2UpO1xuXG4gICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cblxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cInYtZm9ybS1maWVsZFwiPlxuICAgIDwhLS0gbGFiZWwgLS0+XG4gICAgPGxhYmVsIHYtaWY9XCIoZmllbGREYXRhLnR5cGUgIT09ICdoaWRkZW4nICYmIGZpZWxkRGF0YS50eXBlICE9PSAnaGVhZGluZycgJiYgZmllbGREYXRhLnR5cGUgIT09ICdib29sJylcIiA6Zm9yPVwiZ2VuZXJhdGVkSWRcIiBjbGFzcz1cInYtZm9ybS1maWVsZF9fbGFiZWxcIj57e2ZpZWxkRGF0YS5sYWJlbH19PC9sYWJlbD5cbiAgICA8bGFiZWwgdi1pZj1cImZpZWxkRGF0YS50eXBlID09ICdib29sJ1wiIGNsYXNzPVwidi1mb3JtLWZpZWxkX19sYWJlbFwiPnt7ZmllbGREYXRhLmxhYmVsfX08L2xhYmVsPlxuICAgIDxkaXYgdi1pZj1cImZpZWxkRGF0YS5oZWxwXCIgdi1odG1sPVwic3BhbihmaWVsZERhdGEuaGVscClcIiAvPlxuXG4gICAgPCEtLSBlcnJvcnMgLS0+XG4gICAgPHAgY2xhc3M9XCJ2LWZvcm0tZmllbGRfX2Vycm9yc1wiIHYtaWY9XCJlcnJvck1lc3NhZ2VzLmxlbmd0aFwiPlxuICAgICAgPHNwYW4gdi1mb3I9XCIobWVzc2FnZSwgaW5kZXgpIGluIGVycm9yTWVzc2FnZXNcIiB2LWJpbmQ6a2V5PVwiaW5kZXhcIj57e21lc3NhZ2V9fTxicj48L3NwYW4+XG4gICAgPC9wPlxuXG4gICAgPCEtLSBpbnB1dCB0eXBlIHRleHQgLS0+XG4gICAgPGlucHV0IHYtaWY9XCJmaWVsZERhdGEudHlwZSA9PT0gJ3RleHQnXCIgY2xhc3M9XCJ2LWZvcm0tZmllbGRfX3RleHRcIiA6aWQ9XCJnZW5lcmF0ZWRJZFwiIHYtbW9kZWw9XCJmaWVsZERhdGEudmFsdWVcIiB0eXBlPVwidGV4dFwiIDpwbGFjZWhvbGRlcj1cImZpZWxkRGF0YS5wbGFjZWhvbGRlclwiIHYtb246Ymx1cj1cIm9uRmllbGRCbHVyXCIgdi1vbjppbnB1dD1cInVwZGF0ZUZvcm1EYXRhXCIgdi1vbjprZXlkb3duLmVudGVyLnByZXZlbnQ+XG4gICAgPCEtLSBpbnB1dCB0eXBlIHRleHRhcmVhIC0tPlxuICAgIDx0ZXh0YXJlYSB2LWlmPVwiZmllbGREYXRhLnR5cGUgPT09ICd0ZXh0YXJlYSdcIiBjbGFzcz1cInYtZm9ybS1maWVsZF9fdGV4dFwiIDppZD1cImdlbmVyYXRlZElkXCIgdi1tb2RlbD1cImZpZWxkRGF0YS52YWx1ZVwiIHYtb246aW5wdXQ9XCJ1cGRhdGVGb3JtRGF0YVwiIDpwbGFjZWhvbGRlcj1cImZpZWxkRGF0YS5wbGFjZWhvbGRlclwiPjwvdGV4dGFyZWE+XG4gICAgPCEtLSBkYXRlcGlja2VyIC0tPlxuICAgIDxkYXRlcGlja2VyIHYtaWY9XCJmaWVsZERhdGEudHlwZSA9PT0gJ2RhdGUnXCIgOmxhbmd1YWdlPVwibGFuZ3VhZ2VcIiA6Zm9ybWF0PVwiJ2RkLk1NLnl5eXknXCIgOmNsZWFyLWJ1dHRvbj1cInRydWVcIiBjbGFzcz1cInYtZm9ybS1maWVsZF9fZGF0ZVwiIDppZD1cImdlbmVyYXRlZElkXCIgdi1tb2RlbD1cImZpZWxkRGF0YS52YWx1ZVwiIEBpbnB1dD1cInVwZGF0ZUZvcm1EYXRhXCI+PC9kYXRlcGlja2VyPlxuXG4gICAgPGlucHV0IHYtaWY9XCJmaWVsZERhdGEudHlwZSA9PT0gJ2VtYWlsJ1wiIGNsYXNzPVwidi1mb3JtLWZpZWxkX19lbWFpbFwiIDppZD1cImdlbmVyYXRlZElkXCIgdi1tb2RlbD1cImZpZWxkRGF0YS52YWx1ZVwiIHR5cGU9XCJlbWFpbFwiIHYtb246aW5wdXQ9XCJ1cGRhdGVGb3JtRGF0YVwiPlxuICAgIDx2LXBhc3Mtc3RyZW5ndGggdi1pZj1cImZpZWxkRGF0YS50eXBlID09PSAncGFzc3dvcmQtc3RyZW5ndGgnXCIgOnBhc3N3b3JkPVwiZmllbGRWYWx1ZVwiPlxuICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm5ldy1wYXNzd29yZFwiIGNsYXNzPVwidi1mb3JtLWZpZWxkX19wYXNzd29yZCB2LXBhc3Mtc3RyZW5ndGhfX3Bhc3N3b3JkLWZpZWxkXCIgOmlkPVwiZ2VuZXJhdGVkSWRcIiB2LW1vZGVsPVwiZmllbGREYXRhLnZhbHVlXCIgdHlwZT1cInBhc3N3b3JkXCIgdi1vbjppbnB1dD1cInVwZGF0ZUZvcm1EYXRhXCI+XG4gICAgPC92LXBhc3Mtc3RyZW5ndGg+XG4gICAgPGlucHV0IHYtaWY9XCJmaWVsZERhdGEudHlwZSA9PT0gJ3Bhc3N3b3JkJ1wiIGF1dG9jb21wbGV0ZT1cIm5ldy1wYXNzd29yZFwiIGNsYXNzPVwidi1mb3JtLWZpZWxkX19wYXNzd29yZFwiIDppZD1cImdlbmVyYXRlZElkXCIgdi1tb2RlbD1cImZpZWxkRGF0YS52YWx1ZVwiIHR5cGU9XCJwYXNzd29yZFwiIHYtb246aW5wdXQ9XCJ1cGRhdGVGb3JtRGF0YVwiPlxuICAgIDwhLS0gaW5wdXQgdHlwZSBoaWRkZW4gLS0+XG4gICAgPGlucHV0IHYtaWY9XCJmaWVsZERhdGEudHlwZSA9PT0gJ2hpZGRlbidcIiB0eXBlPVwiaGlkZGVuXCIgdi1tb2RlbD1cImZpZWxkRGF0YS52YWx1ZVwiPlxuICAgIDwhLS0gaW5wdXQgdHlwZSBzZWxlY3QgKGN1c3RvbSBzdHlsZSktLT5cbiAgICA8ZGl2IHYtaWY9XCJmaWVsZERhdGEudHlwZSA9PSAnc2VsZWN0J1wiIGNsYXNzPVwiY3VzdG9tLXNlbGVjdCBjdXN0b20tc2VsZWN0LWZ1bGwtd2lkdGgganMtY3VzdG9tLXNlbGVjdC13cmFwcGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLXNlbGVjdF9fZHJvcGRvd24ganMtY3VzdG9tLXNlbGVjdC1kcm9wZG93blwiPjwvZGl2PlxuICAgICAgPHNwYW4gOmlkPVwiZ2VuZXJhdGVkSWRcIiBjbGFzcz1cImN1c3RvbS1zZWxlY3RfX3RleHQganMtY3VzdG9tLXNlbGVjdC10ZXh0aG9sZGVyXCI+e3tzZWxlY3RlZE9wdGlvblRleHR9fTwvc3Bhbj5cbiAgICAgIDxzZWxlY3QgOmlkPVwiZ2VuZXJhdGVkSWRcIiB2LW1vZGVsPVwiZmllbGREYXRhLnZhbHVlXCIgdi1vbjpjaGFuZ2U9XCJ1cGRhdGVGb3JtRGF0YVwiIGNsYXNzPVwiZm9ybV9fZmllbGQtc2VsZWN0IGpzLWN1c3RvbS1zZWxlY3QgZm9ybV9fZmllbGQtc2VsZWN0LWN1c3RvbSBmb3JtX19maWVsZC1zZWxlY3QtY3VzdG9tLWZ1bGwtd2lkdGgganMtbGFuZy1zZWxlY3QgbGFuZ19zZWxlY3RcIj5cbiAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT1cIlwiPnt7bG9jKCdmb3Jtcy5zZWxlY3QuZGVmYXVsdEVtcHR5Jyl9fTwvb3B0aW9uPlxuICAgICAgICA8b3B0aW9uIHYtZm9yPVwib3B0aW9uIGluIGZpZWxkRGF0YS5vcHRpb25zXCIgIHNlbGVjdGVkPVwia2V5ID09IG9wdGlvbi50ZXh0XCIgdi1iaW5kOnZhbHVlPVwib3B0aW9uLnZhbHVlXCIgdi1iaW5kOmtleT1cIm9wdGlvbi50ZXh0XCIgdi1iaW5kOnRleHQ9XCJvcHRpb24udGV4dFwiPlxuICAgICAgICAgIHt7IG9wdGlvbi50ZXh0IH19XG4gICAgICAgIDwvb3B0aW9uPlxuICAgICAgPC9zZWxlY3Q+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIHNlY3Rpb24gaGVhZGVyIC0tPlxuICAgIDxkaXYgdi1pZj1cImZpZWxkRGF0YS50eXBlID09ICdoZWFkaW5nJ1wiIGNsYXNzPVwidi1mb3JtX19zZWN0aW9uLWhlYWRpbmdcIj5cbiAgICAgIDxoMz57e2ZpZWxkRGF0YS5oZWFkaW5nfX08L2gzPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSByYWRpbyBidXR0b24gLS0+XG4gICAgPGRpdiB2LWlmPVwiZmllbGREYXRhLnR5cGUgPT0gJ2Jvb2wnXCIgY2xhc3M9XCJ2LWZvcm0tZmllbGRfX3JhZGlvXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjaGVja2JveC1pbmxpbmVcIj48aW5wdXQgdHlwZT1cInJhZGlvXCIgOmlkPVwiZ2VuZXJhdGVkSWRcIiA6bmFtZT1cImdlbmVyYXRlZElkXCIgdi1tb2RlbD1cImZpZWxkRGF0YS52YWx1ZVwiIHYtb246Y2hhbmdlPVwidXBkYXRlRm9ybURhdGFcIiB2YWx1ZT1cIjFcIj4ge3tsb2MoJ2Zvcm1zLnJhZGlvLnllcycpfX0gPC9sYWJlbD5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNoZWNrYm94LWlubGluZVwiPjxpbnB1dCB0eXBlPVwicmFkaW9cIiA6aWQ9XCJnZW5lcmF0ZWRJZFwiIDpuYW1lPVwiZ2VuZXJhdGVkSWRcIiB2LW1vZGVsPVwiZmllbGREYXRhLnZhbHVlXCIgdi1vbjpjaGFuZ2U9XCJ1cGRhdGVGb3JtRGF0YVwiIHZhbHVlPVwiMFwiPiB7e2xvYygnZm9ybXMucmFkaW8ubm8nKX19IDwvbGFiZWw+XG4gICAgPC9kaXY+XG5cbiAgICA8di1kYXRhLWl0ZW1zIHYtaWY9XCJmaWVsZERhdGEudHlwZSA9PT0gJ2RhdGEtaXRlbXMnXCIgOmhpZGUtZW1wdHk9XCJmaWVsZERhdGEuaGlkZUVtcHR5XCIgIDpzdW0tZmllbGQ9XCJmaWVsZERhdGEuc3VtRmllbGRcIiA6bXVsdGlwbHktZmllbGQ9XCJmaWVsZERhdGEubXVsdGlwbHlGaWVsZFwiIDpmaWVsZHM9XCJmaWVsZERhdGEuZmllbGRzXCIgOmRhdGE9XCJmaWVsZERhdGEudmFsdWVcIiA6ZXJyb3JzPVwiZXJyb3JJdGVtc1wiIDphZGQtYnRuLXRleHQ9XCJmaWVsZERhdGEuYWRkQnRuVGV4dFwiPjwvdi1kYXRhLWl0ZW1zPlxuXG4gICAgPHYtZmlsZSB2LWlmPVwiZmllbGREYXRhLnR5cGUgPT09ICdmaWxlJ1wiIDpmaWxlLWNvdW50LWxpbWl0PVwiZmllbGREYXRhLmZpbGVDb3VudExpbWl0XCIgOm11bHRpcGxlPVwiISFmaWVsZERhdGEubXVsdGlwbGVcIiA6b24tY2hhbmdlPVwib25GaWVsZENoYW5nZVwiPjwvdi1maWxlPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmltcG9ydCBWUGFzc1N0cmVuZ3RoIGZyb20gJy4vdi1wYXNzLXN0cmVuZ3RoLnZ1ZSc7XG5pbXBvcnQgVkZpbGUgZnJvbSAnLi92LWZpbGUudnVlJztcbmltcG9ydCBkYXRlcGlja2VyIGZyb20gJ3Z1ZWpzLWRhdGVwaWNrZXInO1xuaW1wb3J0IFZEYXRhSXRlbXMgZnJvbSAnLi92LWRhdGEtaXRlbXMudnVlJztcblxuZnVuY3Rpb24gZ3VpZEdlbmVyYXRvcigpIHtcbiAgdmFyIFM0ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICgoKDErTWF0aC5yYW5kb20oKSkqMHgxMDAwMCl8MCkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKTtcbiAgfTtcblxuICByZXR1cm4gKFM0KCkrUzQoKStcIi1cIitTNCgpK1wiLVwiK1M0KCkrXCItXCIrUzQoKStcIi1cIitTNCgpK1M0KCkrUzQoKSk7XG59XG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHtcbiAgICAndi1wYXNzLXN0cmVuZ3RoJzogVlBhc3NTdHJlbmd0aCxcbiAgICAnZGF0ZXBpY2tlcic6IGRhdGVwaWNrZXIsXG4gICAgJ3YtZmlsZSc6IFZGaWxlLFxuICAgICd2LWRhdGEtaXRlbXMnOiBWRGF0YUl0ZW1zXG4gIH0sXG4gIHByb3BzOiBbJ2ZpZWxkLWRhdGEnLCAnZm9ybURhdGEnLCAnZm9ybUVycm9ycycsICdvbi1jaGFuZ2UnLCAnb24tYmx1ciddLFxuICBkYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdlbmVyYXRlZElkOiBndWlkR2VuZXJhdG9yKCksXG4gICAgICBmaWVsZFZhbHVlOiAnJ1xuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgc3Bhbih0ZXh0KSB7XG4gICAgcmV0dXJuIGA8c3Bhbj4gJHt0ZXh0fSA8L3NwYW4+YFxuICAgfSxcbiAgICB1cGRhdGVGb3JtRGF0YSgpIHtcbiAgICAgIHRoaXMuZm9ybURhdGFbdGhpcy5maWVsZERhdGEubmFtZV0gPSB0aGlzLmZpZWxkRGF0YS52YWx1ZTtcbiAgICAgIHRoaXMuZmllbGRWYWx1ZSA9IHRoaXMuZmllbGREYXRhLnZhbHVlO1xuICAgICAgLy8gVHJpZ2dlciBvbkNoYW5nZSBjYWxsYmFjayBpZiBhbnlcbiAgICAgIGlmKHR5cGVvZiB0aGlzLm9uQ2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5mb3JtRGF0YSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBvbkZpZWxkQmx1cigpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5vbkJsdXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5vbkJsdXIodGhpcy5maWVsZERhdGEpO1xuICAgICAgfVxuICAgIH0sXG4gICAgb25GaWVsZENoYW5nZShkYXRhKSB7XG4gICAgICB0aGlzLmZpZWxkRGF0YS52YWx1ZSA9IGRhdGE7XG4gICAgICB0aGlzLnVwZGF0ZUZvcm1EYXRhKCk7XG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIGxhbmd1YWdlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLnN0YXRlLmxhbmd1YWdlO1xuICAgIH0sXG4gICAgZXJyb3JNZXNzYWdlcygpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5mb3JtRXJyb3JzW3RoaXMuZmllbGREYXRhLm5hbWVdO1xuXG4gICAgICByZXR1cm4gZXJyb3IgJiYgZXJyb3IubWVzc2FnZXMgfHwgW107XG4gICAgfSxcbiAgICBlcnJvckl0ZW1zKCkge1xuICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLmZvcm1FcnJvcnNbdGhpcy5maWVsZERhdGEubmFtZV07XG5cbiAgICAgIHJldHVybiBlcnJvciAmJiBlcnJvci5pdGVtcyB8fMKgbnVsbDtcbiAgICB9LFxuICAgIHBhc3N3b3JkRmllbGRWYWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpZWxkRGF0YS50eXBlID09PSAncGFzc3dvcmQnICYmIHRoaXMuZmllbGRWYWx1ZSB8fCAnJztcbiAgICB9LFxuICAgIHNlbGVjdGVkT3B0aW9uVGV4dCgpICB7XG5cbiAgICAgIGZvcih2YXIgaSA9IDAgOyBpIDwgdGhpcy5maWVsZERhdGEub3B0aW9ucy5sZW5ndGggOyBpKyspe1xuICAgICAgICBpZih0aGlzLmZpZWxkVmFsdWUgPT0gdGhpcy5maWVsZERhdGEub3B0aW9uc1tpXS52YWx1ZSl7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZmllbGREYXRhLm9wdGlvbnNbaV0udGV4dDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy51cGRhdGVGb3JtRGF0YSgpO1xuICB9LFxuICB3YXRjaDoge1xuICAgIC8vIFVwZGF0ZSBmb3JtRGF0YSB3aGVuIHBhc3NlZCBmaWVsZCBkYXRhIGNoYW5nZVxuICAgIGZpZWxkRGF0YSgpIHtcbiAgICAgIHRoaXMudXBkYXRlRm9ybURhdGEoKTtcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGU+XG5cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGU+XG4gIDxmb3JtIGNsYXNzPVwidi1mb3JtXCIgYWN0aW9uPVwiXCIgbWV0aG9kPVwicG9zdFwiIHYtb246c3VibWl0LnByZXZlbnQ9XCJzdWJtaXRQcmV2ZW50ZWRcIj5cbiAgICA8di1mb3JtLWZpZWxkIHYtZm9yPVwiZmllbGQgaW4gZmllbGRzXCIgdi1iaW5kOmtleT1cImZpZWxkLm5hbWVcIiA6ZmllbGQtZGF0YT1cImZpZWxkXCIgOmZvcm0tZGF0YT1cImZvcm1EYXRhXCIgOmZvcm0tZXJyb3JzPVwiZm9ybUVycm9yc1wiIDpvbi1jaGFuZ2U9XCJvbkNoYW5nZVwiIDpvbi1ibHVyPVwib25CbHVyXCI+PC92LWZvcm0tZmllbGQ+XG4gICAgPHNsb3QgbmFtZT1cImJ1dHRvbnNcIj48L3Nsb3Q+XG4gICAgPHAgdi1pZj1cImZvcm1FcnJvcnMud2FycmFudHlSZWdpc3RlcmF0aW9uRG9uZVwiIGNsYXNzPVwiZm9ybV9fZXJyb3ItbWVzc2FnZSBmaXJzdFwiPnt7bG9jKCdmb3Jtcy5tZXNzYWdlcy53YXJyYW50eVJlZ2lzdGVyYXRpb25Ob3REb25lJyl9fTwvcD5cbiAgICA8cCB2LWlmPVwiT2JqZWN0LmtleXMoZm9ybUVycm9ycykubGVuZ3RoID4gMCAmJiAhZm9ybUVycm9ycy5maWVsZEVycm9yXCIgY2xhc3M9XCJmb3JtX19lcnJvci1tZXNzYWdlIGZpcnN0XCI+e3tsb2MoJ2Zvcm1zLm1lc3NhZ2VzLmhhc0Vycm9ycycpfX08L3A+XG4gIDwvZm9ybT5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVkZvcm1GaWVsZCBmcm9tICcuL3YtZm9ybS1maWVsZC52dWUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHtcbiAgICAndi1mb3JtLWZpZWxkJzogVkZvcm1GaWVsZFxuICB9LFxuICBwcm9wczogWydmaWVsZHMnLCAnZm9ybS1kYXRhJywgJ2Zvcm0tZXJyb3JzJywgJ29uLWNoYW5nZScsICdvbi1ibHVyJ10sXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBQcmV2ZW50IGRlZmF1bHQgc3VibWl0c1xuICAgIHN1Ym1pdFByZXZlbnRlZCgpIHtcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGU+XG5cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJ2LW1vZGFsLWNvbnRlbnQgbm8taW5uZXItbWFyZ2luXCI+XG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgPGgzIHYtaWY9XCJ0aXRsZVwiIGNsYXNzPVwibW9kYWwtdGl0bGUgdi1tb2RhbC1jb250ZW50X190aXRsZVwiPnt7dGl0bGV9fTwvaDM+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLS1jYW5jZWwgY2FuY2VsXCIgdHlwZT1cImJ1dHRvblwiIHYtb246Y2xpY2s9XCJjbG9zZVwiPng8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidi1tb2RhbC1jb250ZW50X19jb250ZW50XCI+PHNsb3Q+PC9zbG90PjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ2LW1vZGFsLWNvbnRlbnRfX2J1dHRvbnNcIj48c2xvdCBuYW1lPVwiYnV0dG9uc1wiPjwvc2xvdD48L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczogWyd0aXRsZSddLFxuICBtZXRob2RzOiB7XG4gICAgY2xvc2UoKSB7XG4gICAgICB0aGlzLiRlbWl0KCdjbG9zZScpO1xuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGU+XG4gIDxzcGFuPlxuICAgIDxzcGFuIHYtaWY9XCJkaXNwbGF5T25seVwiPnt7ZGlzcGxheVZhbHVlfX08L3NwYW4+XG4gICAgPGlucHV0IHYtZWxzZSA6Y2xhc3M9XCJpbnB1dENsYXNzXCIgdHlwZT1cInRleHRcIiB2LW1vZGVsPVwiZGlzcGxheVZhbHVlXCIgQGJsdXI9XCJpc0lucHV0QWN0aXZlID0gZmFsc2VcIiBAZm9jdXM9XCJpc0lucHV0QWN0aXZlID0gdHJ1ZVwiIHYtb246a2V5ZG93bi5lbnRlci5wcmV2ZW50Lz5cbiAgPC9zcGFuPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ1ZDdXJyZW5jeUlucHV0JyxcbiAgcHJvcHM6IFsndmFsdWUnLCAnaW5wdXQtY2xhc3MnLCAnZGlzcGxheS1vbmx5JywgJ2RlY2ltYWwtY2hhciddLFxuICBkYXRhOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNJbnB1dEFjdGl2ZTogZmFsc2UsXG4gICAgICBkZWNpbWFsOiAnLCdcbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgZGlzcGxheVZhbHVlOiB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICAvLyBjaGFuZ2UgdmFsdWUgdG8gemVybyBpZiBubyBudW1iZXIgaXMgcGFzc2VkXG4gICAgICAgIGlmKHRoaXMudmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIDApXG4gICAgICAgICAgdmFsdWUgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNJbnB1dEFjdGl2ZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldEZvcm1hdHRlZEZvcklucHV0KHZhbHVlLCBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVXNlciBpcyBub3QgbW9kaWZ5aW5nIG5vdy4gRm9ybWF0IGRpc3BsYXkgdmFsdWUgZm9yIHVzZXIgaW50ZXJmYWNlXG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuXG4gICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlLnJlcGxhY2UoLywvZywgJy4nKSkudG9GaXhlZCgyKTtcblxuICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IGl0IGlzIG5vdCBOYU5cbiAgICAgICAgICBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBwYXJzZUZsb2F0KHZhbHVlKSk7XG5cbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRGb3JtYXR0ZWRGb3JJbnB1dCh2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uKG1vZGlmaWVkVmFsdWUpIHtcbiAgICAgICAgLy8gUmVjYWxjdWxhdGUgdmFsdWUgYWZ0ZXIgaWdub3JpbmcgXCIkXCIsIFwiLFwiIGFuZCBcIi5cIiBpbiB1c2VyIGlucHV0XG4gICAgICAgIGNvbnN0IHJlZ0V4cCA9IG5ldyBSZWdFeHAoJ1teXFxcXGRcXFxcLixdJywgJ2cnKTtcbiAgICAgICAgbGV0IG5ld1ZhbHVlID0gbW9kaWZpZWRWYWx1ZS5yZXBsYWNlKHJlZ0V4cCwgXCJcIilcblxuICAgICAgICAvLyBOb3RlOiB3ZSBjYW5ub3Qgc2V0IHRoaXMudmFsdWUgYXMgaXQgaXMgYSBcInByb3BcIi4gSXQgbmVlZHMgdG8gYmUgcGFzc2VkIHRvIHBhcmVudCBjb21wb25lbnRcbiAgICAgICAgLy8gJGVtaXQgdGhlIGV2ZW50IHNvIHRoYXQgcGFyZW50IGNvbXBvbmVudCBnZXRzIGl0XG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgbmV3VmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgZ2V0Rm9ybWF0dGVkRm9ySW5wdXQodmFsdWUpIHtcbiAgICAgIGxldCBkaXNwbGF5VmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuXG4gICAgICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKCdbXlxcXFxkXFxcXC4sXScsICdnJyk7XG4gICAgICBkaXNwbGF5VmFsdWUgPSBkaXNwbGF5VmFsdWUucmVwbGFjZShyZWdFeHAsIFwiXCIpO1xuXG4gICAgICBpZih0aGlzLmRlY2ltYWwgPT09ICcsJykge1xuICAgICAgICBkaXNwbGF5VmFsdWUgPSBkaXNwbGF5VmFsdWUucmVwbGFjZSgvXFwuLywgJywnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRpc3BsYXlWYWx1ZVxuICAgIH1cbiAgfSxcbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLmRlY2ltYWwgPSB0aGlzLmRlY2ltYWxDaGFyIHx8IHRoaXMuZGVjaW1hbDtcbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cblxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cInYtcGFzcy1zdHJlbmd0aFwiIDpjbGFzcz1cIm1vZGlmaWVyQ2xhc3NcIj5cbiAgICA8c2xvdD48L3Nsb3Q+XG4gICAgPGRpdiBjbGFzcz1cInYtcGFzcy1zdHJlbmd0aF9fYmFyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidi1wYXNzLXN0cmVuZ3RoX19iYXItaW5uZXJcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidi1wYXNzLXN0cmVuZ3RoX190ZXh0IHYtcGFzcy1zdHJlbmd0aF9fdGV4dC0tcG9vclwiPnt7bG9jKCdwYXNzU3RyZW5ndGgud2VhaycpfX08L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidi1wYXNzLXN0cmVuZ3RoX190ZXh0IHYtcGFzcy1zdHJlbmd0aF9fdGV4dC0td2Vha1wiPnt7bG9jKCdwYXNzU3RyZW5ndGgud2VhaycpfX08L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidi1wYXNzLXN0cmVuZ3RoX190ZXh0IHYtcGFzcy1zdHJlbmd0aF9fdGV4dC0tZ29vZFwiPnt7bG9jKCdwYXNzU3RyZW5ndGguZ29vZCcpfX08L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidi1wYXNzLXN0cmVuZ3RoX190ZXh0IHYtcGFzcy1zdHJlbmd0aF9fdGV4dC0tc3Ryb25nXCI+e3tsb2MoJ3Bhc3NTdHJlbmd0aC5zdHJvbmcnKX19PC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnVlBhc3NTdHJlbmd0aCcsXG4gIHByb3BzOiBbJ3Bhc3N3b3JkJ10sXG4gIGNvbXB1dGVkOiB7XG4gICAgLy8gSWYgeW91IGNoYW5nZSBob3cgcGFzc3dvcmQgc2NvcmluZyB3b3JrcywgaW1wbGVtZW50IGNoYW5nZXMgdG8gc2VydmVyIHNpZGUgYWxzbyFcbiAgICBwYXNzd29yZFNjb3JlKCkge1xuICAgICAgY29uc3QgUEFTU1dPUkRfTUlOX0xFTkdUSCA9IDg7XG4gICAgICBjb25zdCBQQVNTV09SRF9NSU5fU1RSRU5HVEggPSA2MDtcbiAgICAgIGNvbnN0IHBhc3MgPSB0aGlzLnBhc3N3b3JkO1xuXG4gICAgICBsZXQgc2NvcmUgPSAwO1xuXG4gICAgICAvLyBhd2FyZCBldmVyeSB1bmlxdWUgbGV0dGVyIHVudGlsIDUgcmVwZXRpdGlvbnNcbiAgICAgIGxldCBsZXR0ZXJzID0ge307XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFzcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXR0ZXJzW3Bhc3NbaV1dID0gKGxldHRlcnNbcGFzc1tpXV0gfHwgMCkgKyAxO1xuICAgICAgICBzY29yZSArPSA1LjAgLyBsZXR0ZXJzW3Bhc3NbaV1dO1xuICAgICAgfVxuXG4gICAgICAvLyBib251cyBwb2ludHMgZm9yIG1peGluZyBpdCB1cFxuICAgICAgbGV0IHZhcmlhdGlvbnMgPSB7XG4gICAgICAgIGRpZ2l0czogL1xcZC8udGVzdChwYXNzKSxcbiAgICAgICAgbG93ZXI6IC9bYS16XS8udGVzdChwYXNzKSxcbiAgICAgICAgdXBwZXI6IC9bQS1aXS8udGVzdChwYXNzKSxcbiAgICAgICAgbm9uV29yZHM6IC9cXFcvLnRlc3QocGFzcylcbiAgICAgIH07XG5cbiAgICAgIGxldCB2YXJpYXRpb25Db3VudCA9IDA7XG4gICAgICBmb3IgKGxldCBjaGVjayBpbiB2YXJpYXRpb25zKSB7XG4gICAgICAgIHZhcmlhdGlvbkNvdW50ICs9ICh2YXJpYXRpb25zW2NoZWNrXSA9PT0gdHJ1ZSkgPyAxIDogMDtcbiAgICAgIH1cbiAgICAgIHNjb3JlICs9ICh2YXJpYXRpb25Db3VudCAtIDEpICogMTA7XG5cbiAgICAgIC8vIElmIGxlbmd0aCBpcyBiZWxvdyBsaW1pdCwgcmVkdWNlIHBvaW50c1xuICAgICAgaWYgKHBhc3MubGVuZ3RoIDw9IFBBU1NXT1JEX01JTl9MRU5HVEgpIHtcbiAgICAgICAgc2NvcmUgPSBzY29yZSAqIChwYXNzLmxlbmd0aCAvIFBBU1NXT1JEX01JTl9MRU5HVEgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2NvcmU7XG4gICAgfSxcbiAgICBtb2RpZmllckNsYXNzKCkge1xuICAgICAgY29uc3Qgc2NvcmUgPSB0aGlzLnBhc3N3b3JkU2NvcmU7XG5cbiAgICAgIGlmIChzY29yZSA+IDgwKSB7XG4gICAgICAgIHJldHVybiAnaXMtc3Ryb25nJztcbiAgICAgIH1cblxuICAgICAgaWYgKHNjb3JlID4gNjApIHtcbiAgICAgICAgcmV0dXJuICdpcy1nb29kJztcbiAgICAgIH1cblxuICAgICAgaWYgKHNjb3JlID49IDMwKSB7XG4gICAgICAgIHJldHVybiAnaXMtd2Vhayc7XG4gICAgICB9XG5cbiAgICAgIGlmIChzY29yZSA+IDApIHtcbiAgICAgICAgcmV0dXJuICdpcy1wb29yJztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGU+XG5cbjwvc3R5bGU+XG5cblxuIiwiPHRlbXBsYXRlPlxuICA8ZGl2PlxuICAgIDxkaXYgdi1pZj1cInBhc3N3b3JkVXBkYXRlZFwiPlxuICAgICAgPGgyIHYtaHRtbD1cImxvYygnY29tcG9uZW50cy5jaGFuZ2VQYXNzd29yZC5wYXNzd29yZFVwZGF0ZWQnKVwiPjwvaDI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiB2LWVsc2U+XG4gICAgICA8di1mb3JtIDpmaWVsZHM9XCJmaWVsZHNcIiA6Zm9ybS1kYXRhPVwiZm9ybURhdGFcIiA6Zm9ybS1lcnJvcnM9XCJmb3JtRXJyb3JzXCI+XG4gICAgICAgIDxkaXYgc2xvdD1cImJ1dHRvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uIDpkaXNhYmxlZD1cInNlbmREaXNhYmxlZFwiIHYtb246Y2xpY2s9XCJzZW5kXCIgdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi0td2hpdGVcIj57e2xvYygndXBkYXRlUGFzc3dvcmQnKX19PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC92LWZvcm0+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuaW1wb3J0IFZGb3JtIGZyb20gJy4vdi1mb3JtLnZ1ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czoge1xuICAgICd2LWZvcm0nOiBWRm9ybVxuICB9LFxuICBuYW1lOiAnVmlld0NoYW5nZVBhc3N3b3JkJyxcbiAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBmb3JtRXJyb3JzOiB7fSxcbiAgICAgIGZvcm1EYXRhOiB7fSxcbiAgICAgIHBhc3N3b3JkVXBkYXRlZDogZmFsc2UsXG4gICAgICB0b2tlbjogbnVsbCxcbiAgICAgIHNlbmREaXNhYmxlZDogZmFsc2UsXG4gICAgICByZXNldFRva2VuOiAnJyxcbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgZmllbGRzKCkge1xuICAgICAgcmV0dXJuIFt7XG4gICAgICAgIG5hbWU6ICdjdXJyZW50UGFzc3dvcmQnLFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY3VycmVudFBhc3N3b3JkJyksXG4gICAgICAgIHR5cGU6ICdwYXNzd29yZCdcbiAgICAgIH0sIHtcbiAgICAgICAgbmFtZTogJ25ld1Bhc3N3b3JkJyxcbiAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ25ld1Bhc3N3b3JkJyksXG4gICAgICAgIHR5cGU6ICdwYXNzd29yZC1zdHJlbmd0aCcsXG4gICAgICB9LCB7XG4gICAgICAgIG5hbWU6ICduZXdQYXNzd29yZENvbmZpcm0nLFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIGxhYmVsOiB0aGlzLmxvYygnbmV3UGFzc3dvcmRBZ2FpbicpLFxuICAgICAgICB0eXBlOiAncGFzc3dvcmQnXG4gICAgICB9XTtcbiAgICB9LFxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgYXN5bmMgc2VuZCgpIHtcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgICB0aGlzLnNlbmREaXNhYmxlZCA9IHRydWU7XG5cbiAgICAgIHJldHVybiB0aGlzLiRhcGkuY2hhbmdlUGFzc3dvcmQoe1xuICAgICAgICBjdXJyZW50UGFzc3dvcmQ6IHRoaXMuZm9ybURhdGEuY3VycmVudFBhc3N3b3JkLFxuICAgICAgICBuZXdQYXNzd29yZDogdGhpcy5mb3JtRGF0YS5uZXdQYXNzd29yZCxcbiAgICAgICAgbmV3UGFzc3dvcmRDb25maXJtOiB0aGlzLmZvcm1EYXRhLm5ld1Bhc3N3b3JkQ29uZmlybVxuICAgICAgfSlcbiAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgIHRoaXMuc2VuZERpc2FibGVkID0gZmFsc2U7XG5cbiAgICAgICAgLy8gRXJyb3JzIGluIGZvcm1cbiAgICAgICAgaWYocmVzLmNvZGUgPT09IDQwMCkge1xuICAgICAgICAgIHRoaXMuZm9ybUVycm9ycyA9IHJlcy5yZXN1bHQuZmllbGRzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYocmVzLmNvZGUgPT09IDIwMCkge1xuICAgICAgICAgIHRoaXMucGFzc3dvcmRVcGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPHRoZS0xLWNvbHVtbi1sYXlvdXQ+XG4gICAgPGRpdiBzdHlsZT1cImZsb2F0OiByaWdodDsgbWFyZ2luLWJvdHRvbTogMjBweFwiPlxuICAgICAgPHNwYW4+e3t0aGlzLmxvYygncmVjb3JkcycpfX08L3NwYW4+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLXNlbGVjdF9fZHJvcGRvd24ganMtY3VzdG9tLXNlbGVjdC1kcm9wZG93blwiIHN0eWxlPVwid2lkdGg6IDgwcHg7IHBvc2l0aW9uOiByZWxhdGl2ZVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1zZWxlY3RfX3RleHQganMtY3VzdG9tLXNlbGVjdC10ZXh0aG9sZGVyXCI+e3tzZWxlY3RlZFZhbHVlfX08L3NwYW4+XG4gICAgICAgIDxzZWxlY3Qgdi1tb2RlbD1cInNlbGVjdGVkXCIgQGNoYW5nZT1cIiRyZWZzLnRhYmxlLnNldExpbWl0KCRldmVudC50YXJnZXQudmFsdWUpXCIgY2xhc3M9XCJmb3JtX19maWVsZC1zZWxlY3QganMtY3VzdG9tLXNlbGVjdCBmb3JtX19maWVsZC1zZWxlY3QtY3VzdG9tIGpzLWxhbmctc2VsZWN0IGxhbmdfc2VsZWN0XCI+XG4gICAgICAgICAgPG9wdGlvbiB2LWJpbmQ6dGV4dD1cIjEwXCIgdmFsdWU9XCIxMFwiPjEwPC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2LWJpbmQ6dGV4dD1cIjI1XCIgdmFsdWU9XCIyNVwiPjI1PC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHYtY2xpZW50LXRhYmxlIHJlZj1cInRhYmxlXCIgOmNvbHVtbnM9XCJjb2x1bW5zXCIgOmRhdGE9XCJmaWx0ZXJlZERhdGFcIiA6b3B0aW9ucz1cIm9wdGlvbnNcIj5cbiAgICAgIDxyb3V0ZXItbGluayBzbG90PVwibmFtZVwiIHNsb3Qtc2NvcGU9XCJwcm9wc1wiIDp0bz1cInsgbmFtZTogJ2NvbXBhbnknLCBwYXJhbXM6IHsgaWQ6IHByb3BzLnJvdy5pZCB9fVwiPnt7cHJvcHMucm93Lm5hbWV9fTwvcm91dGVyLWxpbms+XG4gICAgICA8ZGl2IHNsb3Q9XCJjb250YWN0c1wiIHNsb3Qtc2NvcGU9XCJwcm9wc1wiPlxuICAgICAgICA8ZGl2IHYtZm9yPVwiKGNvbnRhY3ROYW1lLCBpbmRleCkgaW4gcHJvcHMucm93LmNvbnRhY3RzXCIgdi1iaW5kOmtleT1cImluZGV4XCI+XG4gICAgICAgICAge3tjb250YWN0TmFtZX19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC92LWNsaWVudC10YWJsZT5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi0td2hpdGVcIiB2LW9uOmNsaWNrPVwiYWRkQ29tcGFueVwiPnt7bG9jKCdhZGRDb21wYW55Jyl9fTwvYnV0dG9uPlxuICAgIDxtb2RhbC1jb21wYW55IHJlZj1cImFkZENvbXBhbnlNb2RhbFwiIDptb2RhbC1tb2RlPVwiJ2FkZCdcIj48L21vZGFsLWNvbXBhbnk+XG4gIDwvdGhlLTEtY29sdW1uLWxheW91dD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmltcG9ydCBNb2RhbENvbXBhbnkgZnJvbSAnLi9tb2RhbC1jb21wYW55LnZ1ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czoge1xuICAgICdtb2RhbC1jb21wYW55JzogTW9kYWxDb21wYW55XG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VhcmNoVGV4dDogJycsXG4gICAgICBzZWFyY2hDb2x1bW5zOiBbJ25hbWUnLCAnY29udGFjdHMnLCAnY291bnRyeSddLFxuICAgICAgY29sdW1uczogWyduYW1lJywgJ2NvbnRhY3RzJywgJ2NvdW50cnknXSxcbiAgICAgIHNvcnRhYmxlOiBbJ25hbWUnLCAnY29udGFjdHMnLCAnY291bnRyeSddLFxuICAgICAgZmlsdGVyYWJsZTogWyduYW1lJywgJ2NvbnRhY3RzJywgJ2NvdW50cnknXSxcbiAgICAgIHNlbGVjdGVkOiAnMTAnXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuXG4gICAgb3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpbHRlcmFibGU6IGZhbHNlLFxuICAgICAgICBoZWFkaW5nczoge1xuICAgICAgICAgIG5hbWU6IHRoaXMubG9jKCduYW1lJyksXG4gICAgICAgICAgY29udGFjdHM6IHRoaXMubG9jKCdjb250YWN0cycpLFxuICAgICAgICAgIGNvdW50cnk6IHRoaXMubG9jKCdjb3VudHJ5JylcbiAgICAgICAgfSxcbiAgICAgICAgdGV4dHM6IHtcbiAgICAgICAgICAgIGNvdW50OiB0aGlzLmxvYygncGFnaW5hdGlvbkNvdW50JyksXG4gICAgICAgICAgICBsaW1pdDogdGhpcy5sb2MoJ3JlY29yZHMnKSxcbiAgICAgICAgICAgIG5vUmVzdWx0czogdGhpcy5sb2MoJ25vTWF0Y2hpbmdSZXN1bHRzJyksXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tcGFueURhdGEoKSB7XG4gICAgICBjb25zdCBjb21wYW5pZXMgPSBbXTtcbiAgICAgIHRoaXMuJHN0b3JlLmdldHRlcnMuY2hpbGRDb21wYW5pZXMuZm9yRWFjaChjb21wYW55ID0+IHtcbiAgICAgICAgY29tcGFuaWVzLnB1c2goe1xuICAgICAgICAgIG5hbWU6IGNvbXBhbnkubmFtZSxcbiAgICAgICAgICBpZDogY29tcGFueS5pZCxcbiAgICAgICAgICBjb250YWN0czogY29tcGFueS51c2VycyA/IGNvbXBhbnkudXNlcnMubWFwKHVzZXIgPT4geyByZXR1cm4gdXNlci5sYXN0TmFtZSArICcsICcgKyB1c2VyLmZpcnN0TmFtZSB9KSA6IFtdLFxuICAgICAgICAgIGNvdW50cnk6IGNvbXBhbnkuY291bnRyeSAhPSBudWxsID8gY29tcGFueS5jb3VudHJ5Lm5hbWUgOiAnJ1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gY29tcGFuaWVzO1xuICAgIH0sXG5cbiAgICBmaWx0ZXJlZERhdGEoKSB7XG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSB0aGlzLiRzdG9yZS5zdGF0ZS5zdWJoZWFkZXIuc2VhcmNoVGV4dDsgLy8gVXNlIHN1YmhlYWRlciBzZWFyY2ggaW5wdXQgZm9yIHNlYXJjaGluZ1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuY29tcGFueURhdGE7XG5cbiAgICAgIGlmKHNlYXJjaFRleHQpIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoUmVnRXggPSBuZXcgUmVnRXhwKHNlYXJjaFRleHQsICdpJylcblxuICAgICAgICByZXR1cm4gZGF0YS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICBmb3IobGV0IGk9MCwgbD1zZWxmLnNlYXJjaENvbHVtbnMubGVuZ3RoOyBpPGw7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uID0gc2VsZi5zZWFyY2hDb2x1bW5zW2ldO1xuXG4gICAgICAgICAgICBpZihzZWFyY2hSZWdFeC50ZXN0KGl0ZW1bY29sdW1uXSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9LFxuICAgIHNlbGVjdGVkVmFsdWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZDtcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBhZGRDb21wYW55KCkge1xuICAgICAgdGhpcy4kcmVmcy5hZGRDb21wYW55TW9kYWwuc2hvdygpO1xuICAgIH1cbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdnZXRDaGlsZENvbXBhbmllcycpO1xuXG4gICAgdGhpcy4kc3RvcmUuY29tbWl0KCdzZXRTdWJoZWFkZXInLCB7XG4gICAgICBzdWJ0aXRsZTogJycsXG4gICAgICB0aXRsZTogdGhpcy5sb2MoJ2NvbXBvbmVudHMuY29tcGFuaWVzLnN1YmhlYWRlclRpdGxlJyksXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5sb2MoJ2NvbXBvbmVudHMuY29tcGFuaWVzLnN1YmhlYWRlckRlc2NyaXB0aW9uJyksXG4gICAgICBzZWFyY2hFbmFibGVkOiB0cnVlXG4gICAgfSk7XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGU+XG4uZmFkZS1lbnRlci1hY3RpdmUsIC5mYWRlLWxlYXZlLWFjdGl2ZSB7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgLjVzO1xufVxuLmZhZGUtZW50ZXIsIC5mYWRlLWxlYXZlLXRvIC8qIC5mYWRlLWxlYXZlLWFjdGl2ZSBiZWxvdyB2ZXJzaW9uIDIuMS44ICovIHtcbiAgb3BhY2l0eTogMDtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGU+XG4gIDx0aGUtc2lkZWJhci1sYXlvdXQ+XG4gICAgPGRpdiBzbG90PVwic2lkZWJhci10aXRsZVwiPnt7Y29tcGFueS5uYW1lfX08L2Rpdj5cbiAgICA8ZGl2IHNsb3Q9XCJzaWRlYmFyXCI+XG4gICAgICA8cD57e2NvbXBhbnkuYWRkcmVzc319PGJyPlxuICAgICAge3tjb21wYW55LnBvc3RhbENvZGV9fSB7e2NvbXBhbnkucG9zdE9mZmljZX19PGJyPlxuICAgICAge3tjb21wYW55LmNvdW50cnkubmFtZX19PC9wPlxuICAgICAgPHA+XG4gICAgICAgIHt7bG9jKCdidXNpbmVzc0lkJyl9fToge3tjb21wYW55LmJ1c2luZXNzSWR9fTxicj5cbiAgICAgICAge3tsb2MoJ2N1c3RvbWVyTnVtYmVyJyl9fToge3tjb21wYW55LmN1c3RvbWVyTnVtYmVyfX08YnI+XG4gICAgICAgIHt7bG9jKCdtYXJrZXRpbmdFbWFpbCcpfX06IHt7Y29tcGFueS5tYXJrZXRpbmdFbWFpbH19XG4gICAgICAgIHt7bG9jKCdtYXJrZXRpbmdQaG9uZScpfX06IHt7Y29tcGFueS5tYXJrZXRpbmdQaG9uZX19XG4gICAgICA8L3A+XG5cbiAgICAgIDxidXR0b24gdi1pZj1cImNhbkVkaXRDb21wYW55XCIgY2xhc3M9XCJidG4gYnRuLS13aGl0ZVwiIHYtb246Y2xpY2s9XCJlZGl0Q29tcGFueVwiPnt7bG9jKCdlZGl0Q29tcGFueScpfX08L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdi1pZj1cImNhbkRlbGV0ZUNvbXBhbnlcIiBjbGFzcz1cImJ0biBidG4tLXdoaXRlXCIgdi1vbjpjbGljaz1cImRlbGV0ZUNvbXBhbnlcIj57e2xvYygnZGVsZXRlQ29tcGFueScpfX08L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IHN0eWxlPVwiZmxvYXQ6IHJpZ2h0OyBtYXJnaW4tYm90dG9tOiAyMHB4XCI+XG4gICAgICA8c3Bhbj57e3RoaXMubG9jKCdyZWNvcmRzJyl9fTwvc3Bhbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tc2VsZWN0X19kcm9wZG93biBqcy1jdXN0b20tc2VsZWN0LWRyb3Bkb3duXCIgc3R5bGU9XCJ3aWR0aDogODBweDsgcG9zaXRpb246IHJlbGF0aXZlXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tLXNlbGVjdF9fdGV4dCBqcy1jdXN0b20tc2VsZWN0LXRleHRob2xkZXJcIj57e3NlbGVjdGVkVmFsdWV9fTwvc3Bhbj5cbiAgICAgICAgPHNlbGVjdCB2LW1vZGVsPVwic2VsZWN0ZWRcIiBAY2hhbmdlPVwiJHJlZnMudGFibGUuc2V0TGltaXQoJGV2ZW50LnRhcmdldC52YWx1ZSlcIiBjbGFzcz1cImZvcm1fX2ZpZWxkLXNlbGVjdCBqcy1jdXN0b20tc2VsZWN0IGZvcm1fX2ZpZWxkLXNlbGVjdC1jdXN0b20ganMtbGFuZy1zZWxlY3QgbGFuZ19zZWxlY3RcIj5cbiAgICAgICAgICA8b3B0aW9uIHYtYmluZDp0ZXh0PVwiMTBcIiB2YWx1ZT1cIjEwXCI+MTA8L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uIHYtYmluZDp0ZXh0PVwiMjVcIiB2YWx1ZT1cIjI1XCI+MjU8L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8di1jbGllbnQtdGFibGUgcmVmPVwidGFibGVcIiA6Y29sdW1ucz1cImNvbHVtbnNcIiA6ZGF0YT1cImZpbHRlcmVkRGF0YVwiIDpvcHRpb25zPVwib3B0aW9uc1wiPlxuICAgICAgPGRpdiBzbG90PVwibmFtZVwiIHNsb3Qtc2NvcGU9XCJwcm9wc1wiPnt7cHJvcHMucm93Lmxhc3ROYW1lfX0sIHt7cHJvcHMucm93LmZpcnN0TmFtZX19PC9kaXY+XG4gICAgICA8YSBzbG90PVwidXNlcm5hbWVcIiA6aHJlZj1cImdldEVtYWlsTGluayhwcm9wcy5yb3cudXNlcm5hbWUpXCIgc2xvdC1zY29wZT1cInByb3BzXCI+e3twcm9wcy5yb3cudXNlcm5hbWV9fTwvYT5cbiAgICAgIDxhIHNsb3Q9XCJwaG9uZVwiIDpocmVmPVwiZ2V0VGVsTGluayhwcm9wcy5yb3cucGhvbmUpXCIgc2xvdC1zY29wZT1cInByb3BzXCI+e3twcm9wcy5yb3cucGhvbmV9fTwvYT5cbiAgICAgIDxzcGFuIHNsb3Q9XCJyb2xlXCIgc2xvdC1zY29wZT1cInByb3BzXCI+e3twcm9wcy5yb3cudHJhbnNsYXRlZFJvbGV9fTwvc3Bhbj5cbiAgICAgIDxkaXYgc2xvdD1cImFjdGlvbnNcIiBzbG90LXNjb3BlPVwicHJvcHNcIiB2LWlmPVwiY2FuRWRpdFVzZXJzXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG5cIiB2LW9uOmNsaWNrPVwiZWRpdFVzZXIocHJvcHMucm93KVwiPnt7bG9jKCdlZGl0VXNlcicpfX08L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0blwiIHYtaWY9XCJjYW5EZWxldGVVc2VyKHByb3BzLnJvdylcIiB2LW9uOmNsaWNrPVwiZGVsZXRlVXNlcihwcm9wcy5yb3cpXCI+e3tsb2MoJ2RlbGV0ZVVzZXInKX19PC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L3YtY2xpZW50LXRhYmxlPlxuICAgIDxidXR0b24gdi1pZj1cImNhbkFkZFVzZXJcIiBjbGFzcz1cImJ0biBidG4tLXdoaXRlXCIgdi1vbjpjbGljaz1cImFkZFVzZXJcIj57e2xvYygnYWRkVXNlcicpfX08L2J1dHRvbj5cbiAgICA8bW9kYWwtY29tcGFueSByZWY9XCJjb21wYW55TW9kYWxcIiA6bW9kYWwtbW9kZT1cIidlZGl0J1wiIDptb2RhbC1kYXRhPVwiY29tcGFueVwiPjwvbW9kYWwtY29tcGFueT5cbiAgICA8bW9kYWwtdXNlciByZWY9XCJhZGRVc2VyTW9kYWxcIiA6bW9kYWwtbW9kZT1cIidhZGQnXCIgOm1vZGFsLWRhdGE9XCJ1c2VySW5pdERhdGFcIj48L21vZGFsLXVzZXI+XG4gICAgPG1vZGFsLXVzZXIgcmVmPVwiZWRpdFVzZXJNb2RhbFwiIDptb2RhbC1tb2RlPVwiJ2VkaXQnXCIgOm1vZGFsLWRhdGE9XCJ1c2VyRWRpdERhdGFcIj48L21vZGFsLXVzZXI+XG4gIDwvdGhlLXNpZGViYXItbGF5b3V0PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuaW1wb3J0IE1vZGFsQ29tcGFueSBmcm9tICcuL21vZGFsLWNvbXBhbnkudnVlJztcbmltcG9ydCBNb2RhbFVzZXIgZnJvbSAnLi9tb2RhbC11c2VyLnZ1ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czoge1xuICAgICdtb2RhbC1jb21wYW55JzogTW9kYWxDb21wYW55LFxuICAgICdtb2RhbC11c2VyJzogTW9kYWxVc2VyXG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VhcmNoVGV4dDogJycsXG4gICAgICBzZWFyY2hDb2x1bW5zOiBbJ2ZpcnN0TmFtZScsICdsYXN0TmFtZScsICd1c2VybmFtZScsICdwaG9uZScsICdyb2xlJ10sXG4gICAgICB0ZXN0aW5nOiAnamVlJyxcbiAgICAgIGNvbHVtbnM6IFsnbmFtZScsICd1c2VybmFtZScsICdwaG9uZScsICdyb2xlJywgJ2FjdGlvbnMnXSxcbiAgICAgIHNvcnRhYmxlOiBbJ25hbWUnLCAndXNlcm5hbWUnLCAncGhvbmUnLCAncm9sZSddLFxuICAgICAgZmlsdGVyYWJsZTogWyduYW1lJywgJ3VzZXJuYW1lJywgJ3Bob25lJywgJ3JvbGUnXSxcbiAgICAgIHVzZXJFZGl0RGF0YToge30sXG4gICAgICBpc093bkNvbXBhbnk6IGZhbHNlLFxuICAgICAgY29tcGFueUlkOiBudWxsLFxuICAgICAgc2VsZWN0ZWQ6ICcxMCdcblxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBvcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmlsdGVyYWJsZTogZmFsc2UsXG4gICAgICAgIGhlYWRpbmdzOiB7XG4gICAgICAgICAgbmFtZTogdGhpcy5sb2MoJ25hbWUnKSxcbiAgICAgICAgICB1c2VybmFtZTogdGhpcy5sb2MoJ2VtYWlsJyksXG4gICAgICAgICAgcGhvbmU6IHRoaXMubG9jKCdwaG9uZScpLFxuICAgICAgICAgIHJvbGU6IHRoaXMubG9jKCdyb2xlJylcbiAgICAgICAgfSxcbiAgICAgICAgdGV4dHM6IHtcbiAgICAgICAgICAgIGNvdW50OiB0aGlzLmxvYygncGFnaW5hdGlvbkNvdW50JyksXG4gICAgICAgICAgICBsaW1pdDogdGhpcy5sb2MoJ3JlY29yZHMnKSxcbiAgICAgICAgICAgIG5vUmVzdWx0czogdGhpcy5sb2MoJ25vTWF0Y2hpbmdSZXN1bHRzJyksXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSxcbiAgICBjb21wYW55KCkge1xuICAgICAgZm9yKGxldCBpPTAsIGw9dGhpcy4kc3RvcmUuc3RhdGUuY29tcGFuaWVzLmxlbmd0aDsgaTxsOyBpKyspIHtcbiAgICAgICAgaWYodGhpcy4kc3RvcmUuc3RhdGUuY29tcGFuaWVzW2ldLmlkID09PSB0aGlzLmNvbXBhbnlJZCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5zdGF0ZS5jb21wYW5pZXNbaV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvdW50cnk6IHt9XG4gICAgICB9XG4gICAgfSxcbiAgICBjYW5FZGl0Q29tcGFueSgpIHtcbiAgICAgIC8vIElmIHVzZXIgaGFzIGFkbWluIHJvbGVcbiAgICAgIHJldHVybiB0aGlzLiR1c2VyUmlnaHRzLmhhc1JpZ2h0KCB3aW5kb3cuUklHSFRTLkNMSUVOVF9FRElUX0NPTVBBTlksIHRoaXMuJHN0b3JlLnN0YXRlLnVzZXIucm9sZSApO1xuICAgIH0sXG4gICAgY2FuQWRkVXNlcigpIHtcbiAgICAgIC8vIElmIHVzZXIgaGFzIGFkbWluIHJvbGVcbiAgICAgIGlmKHRoaXMuY29tcGFueS50eXBlID09ICdpbXBvcnRlcicpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHVzZXJSaWdodHMuaGFzUmlnaHQoIHdpbmRvdy5SSUdIVFMuQ0xJRU5UX0FERF9VU0VSU19DT01QQU5ZLCB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLnJvbGUgKTtcblxuICAgICAgfVxuICAgIH0sXG4gICAgY2FuRGVsZXRlQ29tcGFueSgpIHtcblxuICAgICAgLy8gWW91IGNhbiBub3QgZGVsZXRlIG93biBjb21wYW55XG4gICAgICBpZih0aGlzLmNvbXBhbnlJZCA9PT0gdGhpcy4kc3RvcmUuc3RhdGUudXNlci5jb21wYW55LmlkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgdXNlciBoYXMgYWRtaW4gcm9sZVxuICAgICAgaWYodGhpcy4kdXNlclJpZ2h0cy5oYXNSaWdodCggd2luZG93LlJJR0hUUy5DTElFTlRfREVMRVRFX0NPTVBBTlksIHRoaXMuJHN0b3JlLnN0YXRlLnVzZXIucm9sZSApICYmICF0aGlzLmNvbXBhbnlVc2Vycy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGNhbkVkaXRVc2VycygpIHtcbiAgICAgIHN3aXRjaCh0aGlzLmNvbXBhbnkudHlwZSkge1xuICAgICAgICBjYXNlICdyZXRhaWxlcic6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuJHVzZXJSaWdodHMuaGFzUmlnaHQoIHdpbmRvdy5SSUdIVFMuQ0xJRU5UX0VESVRfUkVUQUlMRVJfQ09NUEFOWV9VU0VSUywgdGhpcy4kc3RvcmUuc3RhdGUudXNlci5yb2xlICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2ltcG9ydGVyJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy4kdXNlclJpZ2h0cy5oYXNSaWdodCggd2luZG93LlJJR0hUUy5DTElFTlRfRURJVF9JTVBPUlRFUl9DT01QQU5ZX1VTRVJTLCB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLnJvbGUgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgY29tcGFueVVzZXJzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLnN0YXRlLnVzZXJzLmZpbHRlcih1c2VyID0+IHtcbiAgICAgICAgcmV0dXJuIHVzZXIuY29tcGFueSA9PT0gdGhpcy5jb21wYW55LmlkO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICB1c2VySW5pdERhdGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21wYW55SWQ6IHRoaXMuY29tcGFueS5pZCxcbiAgICAgICAgY291bnRyeUNvZGU6IHRoaXMuY29tcGFueS5jb3VudHJ5ICYmIHRoaXMuY29tcGFueS5jb3VudHJ5LmNvdW50cnlDb2RlIHx8wqAnJ1xuICAgICAgfVxuICAgIH0sXG4gICAgZmlsdGVyZWREYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSB0aGlzLiRzdG9yZS5zdGF0ZS5zdWJoZWFkZXIuc2VhcmNoVGV4dDsgLy8gVXNlIHN1YmhlYWRlciBzZWFyY2ggaW5wdXQgZm9yIHNlYXJjaGluZ1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuY29tcGFueVVzZXJzO1xuXG4gICAgICAvL2NyZWF0ZSB0cmFuc2xhdGVkIFJvbGUgPT0gdHJhbnNsYXRlZFJvbGVcbiAgICAgIC8vZ2V0IHRyYW5zbGF0ZWQgcm9sZSBmcm9tIGxvY2FsaXNhdGlvblxuICAgICAgZGF0YS5tYXAoIGRhdGEgPT4ge1xuICAgICAgICBsZXQgcm9sZUNhbWVsQ2FzZSA9IGRhdGEucm9sZS5yZXBsYWNlKC9eW1xcV19dKnxbXFxXX10qJC9nLCAnJykgLy8gUmVtb3ZlICFbYS16MC05XSBjaGFycyBmcm9tIGJlZ2lubmluZyBhbmQgZW5kIG9mIHN0cmluZywgZm9yIGV4YW1wbGUgXCJfX2Zvby0tXCIgPT4gXCJmb29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tfLVxcc10oW2EtejAtOV0pL2csIGZ1bmN0aW9uIChnKSB7IHJldHVybiBnWzFdLnRvVXBwZXJDYXNlKCk7IH0pIC8vIENhcGl0YWxpemUgbGV0dGVycyB0aGF0IGNvbWUgYWZ0ZXIgXCItXCIsIFwiX1wiIGFuZCBcIiBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tfLVxcc10vZywgJycpOyAvLyBSZW1vdmUgYWxsIFwiLVwiLCBcIl9cIiBhbmQgXCIgXCJcbiAgICAgICAgZGF0YS50cmFuc2xhdGVkUm9sZSA9IHJvbGVDYW1lbENhc2UgIT0gJycgPyAgdGhpcy5sb2MoJ3VzZXIucm9sZXMuJyArIHJvbGVDYW1lbENhc2UgKSA6ICcnO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH0pO1xuXG4gICAgICBpZihzZWFyY2hUZXh0KSB7XG4gICAgICAgIGNvbnN0IHNlYXJjaFJlZ0V4ID0gbmV3IFJlZ0V4cChzZWFyY2hUZXh0LCAnaScpXG5cbiAgICAgICAgcmV0dXJuIGRhdGEuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgZm9yKGxldCBpPTAsIGw9c2VsZi5zZWFyY2hDb2x1bW5zLmxlbmd0aDsgaTxsOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHNlbGYuc2VhcmNoQ29sdW1uc1tpXTtcblxuICAgICAgICAgICAgaWYoc2VhcmNoUmVnRXgudGVzdChpdGVtW2NvbHVtbl0pKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSxcbiAgICBzZWxlY3RlZFZhbHVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ7XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgY2FuRGVsZXRlVXNlcih1c2VyRGF0YSkge1xuICAgICAgLy8gQ2FuIG5vdCBkZWxldGUgc2VsZlxuICAgICAgcmV0dXJuIHVzZXJEYXRhLmlkICE9PSB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmluZm8uaWQ7XG4gICAgfSxcbiAgICBkZWxldGVDb21wYW55KCkge1xuICAgICAgY29uc3QgY29uZmlybU1lc3NhZ2UgPSB0aGlzLmxvYygnZGVsZXRlQ29uZmlybWF0aW9uJykucmVwbGFjZSgne3t0YXJnZXR9fScsIHRoaXMuY29tcGFueS5uYW1lKTtcblxuICAgICAgaWYoY29uZmlybShjb25maXJtTWVzc2FnZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGFwaS5kZWxldGVDb21wYW55KHRoaXMuY29tcGFueS5pZCkudGhlbihyZXMgPT4ge1xuICAgICAgICAgIGlmKHJlcy5jb2RlID09PSAyMDApIHtcbiAgICAgICAgICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnZGVsZXRlQ29tcGFueScsIHRoaXMuY29tcGFueS5pZCk7XG4gICAgICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7bmFtZTogJ2hvbWUnfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGVkaXRDb21wYW55KCkge1xuICAgICAgdGhpcy4kcmVmcy5jb21wYW55TW9kYWwuc2hvdygpO1xuICAgIH0sXG4gICAgZWRpdFVzZXIodXNlckRhdGEpIHtcbiAgICAgIHRoaXMudXNlckVkaXREYXRhID0gdXNlckRhdGE7XG4gICAgICB0aGlzLiRyZWZzLmVkaXRVc2VyTW9kYWwuc2hvdygpO1xuICAgIH0sXG4gICAgYWRkVXNlcigpIHtcbiAgICAgIHRoaXMuJHJlZnMuYWRkVXNlck1vZGFsLnNob3coKTtcbiAgICB9LFxuICAgIGRlbGV0ZVVzZXIodXNlckRhdGEpIHtcbiAgICAgIGNvbnN0IGNvbmZpcm1NZXNzYWdlID0gdGhpcy5sb2MoJ2RlbGV0ZUNvbmZpcm1hdGlvbicpLnJlcGxhY2UoJ3t7dGFyZ2V0fX0nLCB1c2VyRGF0YS5sYXN0TmFtZSArICcsICcgKyB1c2VyRGF0YS5maXJzdE5hbWUpXG5cbiAgICAgIGlmKGNvbmZpcm0oY29uZmlybU1lc3NhZ2UpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRhcGkuZGVsZXRlVXNlcih1c2VyRGF0YS5pZCkudGhlbihyZXMgPT4ge1xuICAgICAgICAgIGlmKHJlcy5jb2RlID09PSAyMDApIHtcbiAgICAgICAgICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnZGVsZXRlVXNlcicsIHVzZXJEYXRhLmlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0RW1haWxMaW5rKGVtYWlsKSB7XG4gICAgICByZXR1cm4gJ21haWx0bzonICsgZW1haWw7XG4gICAgfSxcbiAgICBnZXRUZWxMaW5rKHBob25lKSB7XG4gICAgICByZXR1cm4gJ3RlbDonICsgcGhvbmU7XG4gICAgfVxuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XG5cbiAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIHBhcmFtIC9jb21wYW55LzppZCBhbmQgdXNlIHRoYXQgZWxzZSB1c2UgbG9nZ2VkIGluIHVzZXIncyBjb21wYW55IGFzIGRlZmF1bHRcbiAgICB0aGlzLmNvbXBhbnlJZCA9IHRoaXMuJHJvdXRlLnBhcmFtcy5pZCB8fMKgdGhpcy4kc3RvcmUuc3RhdGUudXNlci5jb21wYW55LmlkO1xuXG4gICAgaWYoIXRoaXMuJHJvdXRlLnBhcmFtcy5pZCkge1xuICAgICAgdGhpcy5pc093bkNvbXBhbnkgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdnZXRDb21wYW55JywgdGhpcy5jb21wYW55SWQpO1xuICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdnZXRDb21wYW55VXNlcnMnLCB0aGlzLmNvbXBhbnlJZCk7XG5cbiAgICB0aGlzLiRzdG9yZS5jb21taXQoJ3NldFN1YmhlYWRlcicsIHtcbiAgICAgIHN1YnRpdGxlOiAnJyxcbiAgICAgIHRpdGxlOiAnJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIHNlYXJjaEVuYWJsZWQ6IHRydWVcbiAgICB9KTtcbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cbjwvc3R5bGU+XG4iLCJcbjx0ZW1wbGF0ZT5cbiAgPHRoZS0xLWNvbHVtbi1sYXlvdXQgdi1pZj1cImNvbXBsYWludFwiPlxuICAgIDxoMyBjbGFzcz1cIm1haW4taGVhZGluZ1wiPlxuICAgICAge3tsb2MoJ2NvbXBsYWludHMnKX19XG4gICAgPC9oMz5cbiAgICA8aDM+e3tsb2MoJ3N0YXR1cycpfX06IHt7Y29tcGxhaW50LnN0YXR1cy5uYW1lfX08L2gzPlxuICAgIDxwPjxzdHJvbmc+e3tsb2MoJ2NvbXBsYWludElkJyl9fTwvc3Ryb25nPjoge3tjb21wbGFpbnQudXVpZH19PC9wPlxuICAgIDxwIHYtaWY9XCJjb21wbGFpbnQucmVmZXJlbmNlSWRcIj57e2xvYygnZm9ybXMubGFiZWxzLmNvbXBsYWludFJlZmVyZW5jZScpfX06IHt7Y29tcGxhaW50LnJlZmVyZW5jZUlkfX08L3A+XG4gICAgPHA+PHN0cm9uZz57e2xvYygnc2VyaWFsTnVtYmVyJyl9fTwvc3Ryb25nPjogPHJvdXRlci1saW5rIDp0bz1cInsgbmFtZTogJ2N1c3RvbWVyLW1hY2hpbmUnLCBwYXJhbXM6IHsgc2VyaWFsTnVtYmVyOiBjb21wbGFpbnQuc2VyaWFsTnVtYmVyIH19XCI+e3tjb21wbGFpbnQuc2VyaWFsTnVtYmVyfX08L3JvdXRlci1saW5rPjxicj5cbiAgICA8c3Ryb25nPnt7bG9jKCdkZWxpdmVyeURhdGVDb21wbGFpbnQnKX19PC9zdHJvbmc+OiB7e2NvbXBsYWludC5kZWxpdmVyeURhdGV9fTwvcD5cblxuICAgICAgPGgzPnt7bG9jKCdjb21wZW5zYXRpb24nKX19PC9oMz5cbiAgICAgIDxwIHYtaHRtbD1cImNvbXBlbnNhdGlvbkh0bWxcIj48L3A+XG4gICAgPHYtY29tcGxhaW50LXVzZXItaW5mbyB2LWlmPVwiY29tcGxhaW50LnVzZXJcIiA6dXNlci1kYXRhPVwiY29tcGxhaW50LnVzZXJcIiA6Y29tcGFueS1kYXRhPVwiY29tcGxhaW50LmNvbXBhbnlcIj48L3YtY29tcGxhaW50LXVzZXItaW5mbz5cbiAgICA8cCB2LWVsc2U+e3tsb2MoJ3VzZXJOb3RGb3VuZEV4cGxhbmF0aW9uJyl9fTwvcD5cblxuICAgIDxoMz57e2xvYygnZm9ybXMubGFiZWxzLmNvbXBsYWludERlc2NyaXB0aW9uJyl9fTo8L2gzPlxuICAgIDxkaXYgdi1odG1sPVwiZGVzY3JpcHRpb25IdG1sXCI+PC9kaXY+XG4gICAgPGgzPnt7bG9jKCdmb3Jtcy5sYWJlbHMuY29tcGxhaW50RGVzY3JpcHRpb25EYXRlJyl9fTo8L2gzPlxuICAgIDxkaXYgdi1odG1sPSdkZXNjcmlwdGlvbkRhdGVTdHJpbmcnPjwvZGl2PlxuXG4gICAgPGgzPnt7bG9jKCdmb3Jtcy5sYWJlbHMuY29tcGxhaW50UHJvY2VkdXJlJyl9fTo8L2gzPlxuICAgIDxkaXYgdi1odG1sPVwicHJvY2VkdXJlSHRtbFwiPjwvZGl2PlxuICAgIDxoMz57e2xvYygnZm9ybXMubGFiZWxzLmNvbXBsYWludFByb2NlZHVyZURhdGUnKX19OjwvaDM+XG4gICAgPGRpdiB2LWh0bWw9J3Byb2NlZHVyZURhdGVTdHJpbmcnPjwvZGl2PlxuXG4gICAgPGgzPnt7bG9jKCdmb3Jtcy5sYWJlbHMuY29tcGxhaW50QWNjZXNzb3JpZXMnKX19OjwvaDM+XG4gICAgPGRpdiB2LWlmPVwiY29tcGxhaW50LmFjY2Vzc29yaWVzVGV4dFwiIHYtaHRtbD1cImFjY2Vzc29yaWVzSHRtbFwiPjwvZGl2PlxuICAgIDx2LWRhdGEtaXRlbXMgdi1lbHNlIDplZGl0LW1vZGU9XCJmYWxzZVwiIDpoaWRlLWVtcHR5PVwiYWNjZXNzb3JpZXNEYXRhLmhpZGVFbXB0eVwiIDpzdW0tZmllbGQ9XCJhY2Nlc3Nvcmllc0RhdGEuc3VtRmllbGRcIiA6bXVsdGlwbHktZmllbGQ9XCJhY2Nlc3Nvcmllc0RhdGEubXVsdGlwbHlGaWVsZFwiIDpmaWVsZHM9XCJhY2Nlc3Nvcmllc0RhdGEuZmllbGRzXCIgOmRhdGE9XCJjb21wbGFpbnQuYWNjZXNzb3JpZXNcIiA6ZGlzcGxheS1vbmx5PVwidHJ1ZVwiPjwvdi1kYXRhLWl0ZW1zPlxuXG4gICAgPGgzPnt7bG9jKCdmb3Jtcy5sYWJlbHMuY29tcGxhaW50Sm9icycpfX06PC9oMz5cbiAgICA8ZGl2IHYtaWY9XCJjb21wbGFpbnQuam9ic1RleHRcIiB2LWh0bWw9XCJqb2JzSHRtbFwiPjwvZGl2PlxuICAgIDx2LWRhdGEtaXRlbXMgdi1lbHNlIDplZGl0LW1vZGU9XCJmYWxzZVwiIDpoaWRlLWVtcHR5PVwic2VydmljZXNEYXRhLmhpZGVFbXB0eVwiIDpzdW0tZmllbGQ9XCJzZXJ2aWNlc0RhdGEuc3VtRmllbGRcIiA6bXVsdGlwbHktZmllbGQ9XCJzZXJ2aWNlc0RhdGEubXVsdGlwbHlGaWVsZFwiIDpmaWVsZHM9XCJzZXJ2aWNlc0RhdGEuZmllbGRzXCIgOmRhdGE9XCJjb21wbGFpbnQuc2VydmljZXNcIiA6ZGlzcGxheS1vbmx5PVwidHJ1ZVwiPjwvdi1kYXRhLWl0ZW1zPlxuICAgIDxkaXYgdi1pZj1cInRvdGFsQW1vdW50XCI+e3tsb2MoJ2FsbEluVG90YWwnKX19OiA8di1jdXJyZW5jeS1pbnB1dCA6ZGlzcGxheS1vbmx5PVwidHJ1ZVwiIDp2YWx1ZT1cInRvdGFsQW1vdW50XCIgOmRlY2ltYWwtY2hhcj1cIicsJ1wiID48L3YtY3VycmVuY3ktaW5wdXQ+PC9kaXY+XG5cbiAgICA8aDM+e3tsb2MoJ2ZpbGVzJyl9fTo8L2gzPlxuICAgIDxkaXYgdi1pZj1cImNvbXBsYWludC5maWxlcy5sZW5ndGhcIj5cbiAgICAgIDxkaXYgIHYtZm9yPVwiZmlsZSBpbiBjb21wbGFpbnQuZmlsZXNcIiB2LWJpbmQ6a2V5PVwiZmlsZS51cmxcIj48YSA6aHJlZj1cImZpbGUudXJsXCIgdGFyZ2V0PVwiX2JsYW5rXCI+e3tmaWxlLm5hbWV9fTwvYT48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8cCB2LWVsc2U+e3tsb2MoJ25vRmlsZXMnKX19PC9wPlxuXG4gICAgPHAgY2xhc3M9XCJkLXByaW50LW5vbmVcIj48YnIgLz48YSBocmVmPVwiI1wiIHYtb246Y2xpY2s9XCJwcmludFwiPnt7bG9jKCdwcmludERvY3VtZW50Jyl9fTwvYT48L3A+XG4gIDwvdGhlLTEtY29sdW1uLWxheW91dD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmltcG9ydCBWQ29tcGxhaW50VXNlckluZm8gZnJvbSAnLi92LWNvbXBsYWludC11c2VyLWluZm8udnVlJztcbmltcG9ydCBWRGF0YUl0ZW1zIGZyb20gJy4vdi1kYXRhLWl0ZW1zLnZ1ZSc7XG5pbXBvcnQgVkN1cnJlbmN5SW5wdXQgZnJvbSAnLi92LWN1cnJlbmN5LWlucHV0LnZ1ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ1ZpZXdDb21wbGFpbnQnLFxuICBjb21wb25lbnRzOiB7XG4gICAgJ3YtY29tcGxhaW50LXVzZXItaW5mbyc6IFZDb21wbGFpbnRVc2VySW5mbyxcbiAgICAndi1jdXJyZW5jeS1pbnB1dCc6IFZDdXJyZW5jeUlucHV0LFxuICAgICd2LWRhdGEtaXRlbXMnOiBWRGF0YUl0ZW1zXG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29tcGxhaW50SWQ6IG51bGxcbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgam9ic0h0bWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0VG9IdG1sKHRoaXMuY29tcGxhaW50LmpvYnNUZXh0KTtcbiAgICB9LFxuICAgIGFjY2Vzc29yaWVzSHRtbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHRUb0h0bWwodGhpcy5jb21wbGFpbnQuYWNjZXNzb3JpZXNUZXh0KTtcbiAgICB9LFxuICAgIGNvbXBlbnNhdGlvbkh0bWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0VG9IdG1sKHRoaXMuY29tcGxhaW50LmNvbXBlbnNhdGlvbik7XG4gICAgfSxcbiAgICBkZXNjcmlwdGlvbkh0bWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0VG9IdG1sKHRoaXMuY29tcGxhaW50LmRlc2NyaXB0aW9uKTtcbiAgICB9LFxuICAgIGRlc2NyaXB0aW9uRGF0ZVN0cmluZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1hdERhdGUodGhpcy5jb21wbGFpbnQuZGVzY3JpcHRpb25EYXRlKTtcbiAgICB9LFxuICAgIHByb2NlZHVyZUh0bWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0VG9IdG1sKHRoaXMuY29tcGxhaW50LnByb2NlZHVyZSk7XG4gICAgfSxcbiAgICBwcm9jZWR1cmVEYXRlU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0RGF0ZSh0aGlzLmNvbXBsYWludC5wcm9jZWR1cmVEYXRlKTtcbiAgICB9LFxuICAgIGNvbXBsYWludCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5zdGF0ZS5jb21wbGFpbnRzLmZpbHRlcihjb21wbGFpbnQgPT4gY29tcGxhaW50LnV1aWQgPT09IHRoaXMuY29tcGxhaW50SWQpWzBdO1xuICAgIH0sXG4gICAgYWNjZXNzb3JpZXNEYXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VtRmllbGQ6ICdwcmljZScsXG4gICAgICAgIG11bHRpcGx5RmllbGQ6ICdhbW91bnQnLFxuICAgICAgICBoaWRlRW1wdHk6IHRydWUsXG4gICAgICAgIHZhbHVlOiBbXSxcbiAgICAgICAgZmllbGRzOiBbe1xuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY29tcGxhaW50QWNjZXNzb3JpZXMubmFtZScpLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLmxvYygnY29tcGxhaW50QWNjZXNzb3JpZXMubmFtZScpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICBuYW1lOiAnbmFtZSdcbiAgICAgICAgfSwge1xuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY29tcGxhaW50QWNjZXNzb3JpZXMuaWQnKSxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy5sb2MoJ2NvbXBsYWludEFjY2Vzc29yaWVzLmlkJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgIG5hbWU6ICdpZCdcbiAgICAgICAgfSwge1xuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY29tcGxhaW50QWNjZXNzb3JpZXMucHJpY2UnKSxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy5sb2MoJ2NvbXBsYWludEFjY2Vzc29yaWVzLnByaWNlJyksXG4gICAgICAgICAgdHlwZTogJ2N1cnJlbmN5JyxcbiAgICAgICAgICBuYW1lOiAncHJpY2UnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2NvbXBsYWludEFjY2Vzc29yaWVzLmFtb3VudCcpLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLmxvYygnY29tcGxhaW50QWNjZXNzb3JpZXMuYW1vdW50JyksXG4gICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgbmFtZTogJ2Ftb3VudCdcbiAgICAgICAgfV1cbiAgICAgIH1cbiAgICB9LFxuICAgIHNlcnZpY2VzRGF0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1bUZpZWxkOiAncHJpY2UnLFxuICAgICAgICBtdWx0aXBseUZpZWxkOiAnaG91cnMnLFxuICAgICAgICBoaWRlRW1wdHk6IHRydWUsXG4gICAgICAgIHZhbHVlOiBbXSxcbiAgICAgICAgZmllbGRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2NvbXBsYWludFNlcnZpY2VzLmhvdXJzJyksXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMubG9jKCdjb21wbGFpbnRTZXJ2aWNlcy5ob3VycycpLFxuICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAgIG5hbWU6ICdob3VycydcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY29tcGxhaW50U2VydmljZXMucHJpY2UnKSxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy5sb2MoJ2NvbXBsYWludFNlcnZpY2VzLnByaWNlJyksXG4gICAgICAgICAgdHlwZTogJ2N1cnJlbmN5JyxcbiAgICAgICAgICBuYW1lOiAncHJpY2UnXG4gICAgICAgIH1dXG4gICAgICB9XG4gICAgfSxcbiAgICB0b3RhbEFtb3VudDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgdmFyIHN1bSA9IDA7XG5cbiAgICAgICAgIC8vZ290dGEgZ2V0IGNvbXBsYWludCBkYXRhXG4gICAgICAgICBsZXQgY29tcGxhaW50ID0gdGhpcy4kc3RvcmUuc3RhdGUuY29tcGxhaW50cy5maWx0ZXIoY29tcGxhaW50ID0+IGNvbXBsYWludC51dWlkID09PSB0aGlzLmNvbXBsYWludElkKVswXTtcblxuICAgICAgICAgLy9zdW0gb2YgYWNjZXNzb3JpZXNcbiAgICAgICAgIHRoaXMuY29tcGxhaW50LmFjY2Vzc29yaWVzLmZvckVhY2goZSA9PiB7XG4gICAgICAgICAgICAgc3VtICs9IGUuYW1vdW50ICogZS5wcmljZTtcbiAgICAgICAgIH0pO1xuICAgICAgICAgLy9zdW0gb2Ygc2VydmljZXNcbiAgICAgICAgIHRoaXMuY29tcGxhaW50LnNlcnZpY2VzLmZvckVhY2goZSA9PiB7XG4gICAgICAgICAgICAgc3VtICs9IGUuaG91cnMgKiBlLnByaWNlO1xuICAgICAgICAgfSk7XG4gICAgICAgICByZXR1cm4gc3VtXG4gICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIHByaW50KGUpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHdpbmRvdy5wcmludCgpO1xuICAgIH0sXG4gICAgdGV4dFRvSHRtbCh0ZXh0KSB7XG4gICAgICBsZXQgaHRtbFRleHQgPSAnJztcblxuICAgICAgLy8gU3RyaXAgXFxyXG4gICAgICBjb25zdCBzdHJpcHBlZCA9IHRleHQucmVwbGFjZSgvXFxyL2csICcnKTtcblxuICAgICAgLy8gU3BsaXQgaW50byBwYXJhZ3JhcGhzXG4gICAgICBjb25zdCBwYXJhZ3JhcGhzID0gc3RyaXBwZWQuc3BsaXQoJ1xcblxcbicpO1xuXG4gICAgICBwYXJhZ3JhcGhzLmZvckVhY2gocGFyYWdyYXBoID0+IHtcbiAgICAgICAgaHRtbFRleHQgKz0gJzxwPic7XG4gICAgICAgIC8vIFJlcGxhY2Ugc2luZ2xlIGxpbmVmZWVkcyB3aXRoIDxicj5cbiAgICAgICAgaHRtbFRleHQgKz0gcGFyYWdyYXBoLnJlcGxhY2UoL1xcbi9nLCAnPGJyPicpO1xuICAgICAgICBodG1sVGV4dCArPSAnPC9wPic7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGh0bWxUZXh0O1xuICAgIH0sXG4gICAgZm9ybWF0RGF0ZShkYXRlRGF0YSkge1xuICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShkYXRlRGF0YS5kYXRlKTtcbiAgICAgIGxldCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuXG4gICAgICBsZXQgbW9udGggPSBkYXRlLmdldE1vbnRoKCkgKyAxO1xuICAgICAgICAgIG1vbnRoID0gbW9udGgudG9TdHJpbmcoKTtcbiAgICAgICAgICBtb250aCA9IG1vbnRoLmxlbmd0aCA9PSAxID8gJzAnK21vbnRoIDogbW9udGg7XG5cbiAgICAgIGxldCBkYXkgPSBkYXRlLmdldERhdGUoKTtcbiAgICAgICAgICBkYXkgPSBkYXkudG9TdHJpbmcoKTtcbiAgICAgICAgICBkYXkgPSBkYXkubGVuZ3RoID09IDEgPyAnMCcrZGF5IDogZGF5O1xuXG4gICAgICByZXR1cm4gYCR7eWVhcn0vJHttb250aH0vJHtkYXl9YDtcbiAgICB9XG4gIH0sXG4gIG1vdW50ZWQoKSB7XG4gICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBwYXJhbSAvY29tcGFueS86aWQgYW5kIHVzZSB0aGF0IGVsc2UgdXNlIGxvZ2dlZCBpbiB1c2VyJ3MgY29tcGFueSBhcyBkZWZhdWx0XG4gICAgdGhpcy5jb21wbGFpbnRJZCA9IHRoaXMuJHJvdXRlLnBhcmFtcy5pZFxuXG4gICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldENvbXBsYWludCcsIHRoaXMuY29tcGxhaW50SWQpO1xuXG4gICAgbGV0IHN1YmhlYWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2pzLXN1YmhlYWRlcicpO1xuICAgIGlmKHN1YmhlYWRlci5sZW5ndGgpIHtcbiAgICAgIHN1YmhlYWRlciA9IHN1YmhlYWRlclswXTtcbiAgICAgIHN1YmhlYWRlci5jbGFzc0xpc3QuYWRkKCdkLXByaW50LW5vbmUnKTtcbiAgICB9XG4gIH1cbn1cblxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDx0aGUtMS1jb2x1bW4tbGF5b3V0PlxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPjxidXR0b24gdi1vbjpjbGljaz1cImFkZENvbXBsYWludFwiIGNsYXNzPVwiYnRuIGJ0bi0td2hpdGVcIj57e2xvYygnYWRkQ29tcGxhaW50Jyl9fTwvYnV0dG9uPjwvZGl2PlxuICAgIDx2LWNsaWVudC10YWJsZSA6Y29sdW1ucz1cImNvbHVtbnNcIiA6ZGF0YT1cImZpbHRlcmVkRGF0YVwiIDpvcHRpb25zPVwib3B0aW9uc1wiPlxuICAgICAgPHJvdXRlci1saW5rIHNsb3Q9XCJ1dWlkXCIgc2xvdC1zY29wZT1cInByb3BzXCIgOnRvPVwieyBuYW1lOiAnY29tcGxhaW50JywgcGFyYW1zOiB7IGlkOiBwcm9wcy5yb3cudXVpZCB9fVwiPnt7cHJvcHMucm93LnV1aWR9fTwvcm91dGVyLWxpbms+XG4gICAgICA8cm91dGVyLWxpbmsgc2xvdD1cInNlcmlhbE51bWJlclwiIHNsb3Qtc2NvcGU9XCJwcm9wc1wiIDp0bz1cInsgbmFtZTogJ2N1c3RvbWVyLW1hY2hpbmUnLCBwYXJhbXM6IHsgc2VyaWFsTnVtYmVyOiBwcm9wcy5yb3cuc2VyaWFsTnVtYmVyIH19XCI+e3twcm9wcy5yb3cuc2VyaWFsTnVtYmVyfX08L3JvdXRlci1saW5rPlxuICAgIDwvdi1jbGllbnQtdGFibGU+XG4gICAgPG1vZGFsLWNvbXBsYWludCByZWY9XCJhZGRDb21wbGFpbnRNb2RhbFwiIDptb2RhbC1tb2RlPVwiJ2FkZCdcIj48L21vZGFsLWNvbXBsYWludD5cbiAgPC90aGUtMS1jb2x1bW4tbGF5b3V0PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuaW1wb3J0IFZGb3JtIGZyb20gJy4vdi1mb3JtLnZ1ZSc7XG5pbXBvcnQgTW9kYWxDb21wbGFpbnQgZnJvbSAnLi9tb2RhbC1jb21wbGFpbnQudnVlJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnVmlld0NvbXBsYWludHMnLFxuICBjb21wb25lbnRzOiB7XG4gICAgJ21vZGFsLWNvbXBsYWludCc6IE1vZGFsQ29tcGxhaW50LFxuICAgICd2LWZvcm0nOiBWRm9ybVxuICB9LFxuICBkYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvcm1EYXRhOiB7fSxcbiAgICAgIGZvcm1FcnJvcnM6IHt9LFxuICAgICAgc2VhcmNoVGV4dDogJycsXG4gICAgICBzZWFyY2hDb2x1bW5zOiBbJ3V1aWQnLCAnc2VyaWFsTnVtYmVyJywgJ2RhdGVBZGRlZCcsICdzdGF0dXMnLCAnbmFtZSddLFxuICAgICAgY29sdW1uczogWyd1dWlkJywgJ3NlcmlhbE51bWJlcicsICdkYXRlQWRkZWQnLCAnc3RhdHVzJywgJ25hbWUnXSxcbiAgICAgIHNvcnRhYmxlOiBbJ3V1aWQnLCAnc2VyaWFsTnVtYmVyJywgJ2RhdGVBZGRlZCcsICdzdGF0dXMnLCAnbmFtZSddLFxuICAgICAgZmlsdGVyYWJsZTogWyd1dWlkJywgJ3NlcmlhbE51bWJlcicsICdkYXRlQWRkZWQnLCAnc3RhdHVzJywgJ25hbWUnXVxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICB0ZXN0RmllbGRzKCkge1xuICAgICAgcmV0dXJuIFt7XG4gICAgICAgIG5hbWU6ICdmaWxlcycsXG4gICAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogW10sXG4gICAgICAgIHR5cGU6ICdmaWxlJ1xuICAgICAgfV1cbiAgICB9LFxuICAgIG9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmaWx0ZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgaGVhZGluZ3M6IHtcbiAgICAgICAgICB1dWlkOiB0aGlzLmxvYygnY29tcGxhaW50SWQnKSxcbiAgICAgICAgICBzZXJpYWxOdW1iZXI6IHRoaXMubG9jKCdzZXJpYWxOdW1iZXInKSxcbiAgICAgICAgICBkYXRlQWRkZWQ6IHRoaXMubG9jKCdkYXRlQWRkZWRDb21wbGFpbnQnKSxcbiAgICAgICAgICBzdGF0dXM6IHRoaXMubG9jKCdzdGF0dXMnKSxcbiAgICAgICAgICBuYW1lOiB0aGlzLmxvYygncmVjbGFtYXRlZEJ5JylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wbGFpbnRzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLnN0YXRlLmNvbXBsYWludHMubWFwKGNvbXBsYWludCA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdXVpZDogY29tcGxhaW50LnV1aWQsXG4gICAgICAgICAgc2VyaWFsTnVtYmVyOiBjb21wbGFpbnQuc2VyaWFsTnVtYmVyLFxuICAgICAgICAgIGpvYnNUZXh0OiBjb21wbGFpbnQuam9ic1RleHQsXG4gICAgICAgICAgc3RhdHVzOiBjb21wbGFpbnQuc3RhdHVzICYmIGNvbXBsYWludC5zdGF0dXMubmFtZSxcbiAgICAgICAgICBkYXRlQWRkZWQ6IGNvbXBsYWludC5kYXRlQWRkZWQgJiYgY29tcGxhaW50LmRhdGVBZGRlZC5mb3JtYXR0ZWQsXG4gICAgICAgICAgbmFtZTogY29tcGxhaW50Lm5hbWVcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIGZpbHRlcmVkRGF0YSgpIHtcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9IHRoaXMuJHN0b3JlLnN0YXRlLnN1YmhlYWRlci5zZWFyY2hUZXh0OyAvLyBVc2Ugc3ViaGVhZGVyIHNlYXJjaCBpbnB1dCBmb3Igc2VhcmNoaW5nXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5jb21wbGFpbnRzO1xuXG4gICAgICBpZihzZWFyY2hUZXh0KSB7XG4gICAgICAgIGNvbnN0IHNlYXJjaFJlZ0V4ID0gbmV3IFJlZ0V4cChzZWFyY2hUZXh0LCAnaScpXG5cbiAgICAgICAgcmV0dXJuIGRhdGEuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgZm9yKGxldCBpPTAsIGw9c2VsZi5zZWFyY2hDb2x1bW5zLmxlbmd0aDsgaTxsOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHNlbGYuc2VhcmNoQ29sdW1uc1tpXTtcblxuICAgICAgICAgICAgaWYoc2VhcmNoUmVnRXgudGVzdChpdGVtW2NvbHVtbl0pKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgYWRkQ29tcGxhaW50KCkge1xuICAgICAgdGhpcy4kcmVmcy5hZGRDb21wbGFpbnRNb2RhbC5zaG93KCk7XG4gICAgfVxuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldENvbXBsYWludHMnKTtcblxuICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnc2V0U3ViaGVhZGVyJywge1xuICAgICAgc3VidGl0bGU6ICcnLFxuICAgICAgdGl0bGU6IHRoaXMubG9jKCdjb21wb25lbnRzLmNvbXBsYWludHMuc3ViaGVhZGVyVGl0bGUnKSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIHNlYXJjaEVuYWJsZWQ6IHRydWVcbiAgICB9KTtcbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDx0aGUtMS1jb2x1bW4tbGF5b3V0PlxuICAgIDxpbWcgdi1pZj1cIm1hY2hpbmUubWFjaGluZUltYWdlXCIgOnNyYz1cIm1hY2hpbmUubWFjaGluZUltYWdlXCI+XG4gICAgPGgyPnt7bG9jKCdjb21wb25lbnRzLmN1c3RvbWVyTWFjaGluZS5tYWNoaW5lSW5mb3JtYXRpb24nKX19PC9oMj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1tZC04XCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlXCI+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwidGFibGVfX3RkIGhhcy1iZ1wiPnt7bG9jKCdzZXJpYWxOdW1iZXInKX19OjwvdGQ+XG4gICAgICAgICAgICA8dGQ+e3ttYWNoaW5lLnNlcmlhbE51bWJlcn19PC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0ciB2LWlmPVwibWFjaGluZS5zYWxlRGF0ZSAmJiBtYWNoaW5lLnNhbGVEYXRlLmZvcm1hdHRlZFwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwidGFibGVfX3RkIGhhcy1iZ1wiPnt7bG9jKCdkZWxpdmVyeURhdGVTb2xkJyl9fTo8L3RkPlxuICAgICAgICAgICAgPHRkPnt7bWFjaGluZS5zYWxlRGF0ZS5mb3JtYXR0ZWR9fTwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHIgdi1pZj1cIm1hY2hpbmUuZGVsaXZlcnlEYXRlICYmIG1hY2hpbmUuZGVsaXZlcnlEYXRlLmZvcm1hdHRlZFwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwidGFibGVfX3RkIGhhcy1iZ1wiPnt7bG9jKCdjdXN0b21lck1hY2hpbmVXYXJyYW50eVJlZ2lzdGVyZWQnKX19OjwvdGQ+XG4gICAgICAgICAgICA8dGQ+e3ttYWNoaW5lLmRlbGl2ZXJ5RGF0ZS5mb3JtYXR0ZWR9fTwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHIgdi1pZj1cIm1hY2hpbmUuZGF0ZUFkZGVkICYmIG1hY2hpbmUuZGF0ZUFkZGVkLmZvcm1hdHRlZFwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwidGFibGVfX3RkIGhhcy1iZ1wiPnt7bG9jKCdkYXRlQWRkZWRNYWNoaW5lJyl9fTo8L3RkPlxuICAgICAgICAgICAgPHRkPnt7bWFjaGluZS5kYXRlQWRkZWQuZm9ybWF0dGVkfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyIHYtaWY9XCJtYWNoaW5lLm1hbnVmYWN0dXJpbmdEYXRlICYmIG1hY2hpbmUubWFudWZhY3R1cmluZ0RhdGUuZm9ybWF0dGVkXCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ0YWJsZV9fdGQgaGFzLWJnXCI+e3tsb2MoJ21hbnVmYWN0dXJpbmdEYXRlJyl9fTo8L3RkPlxuICAgICAgICAgICAgPHRkPnt7bWFjaGluZS5tYW51ZmFjdHVyaW5nRGF0ZS5mb3JtYXR0ZWR9fTwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ0YWJsZV9fdGQgaGFzLWJnXCI+e3tsb2MoJ2NvbXBhbnknKX19OjwvdGQ+XG4gICAgICAgICAgICA8dGQgdi1pZj1cIm1hY2hpbmUucmV0YWlsX2N1c3RvbWVyX25hbWVcIj57e21hY2hpbmUucmV0YWlsX2N1c3RvbWVyX25hbWV9fTwvdGQ+XG4gICAgICAgICAgICA8dGQgdi1lbHNlPnt7bWFjaGluZS5jb21wYW55TmFtZX19PC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRhYmxlX190ZCBoYXMtYmdcIj57e2xvYygnY291bnRyeScpfX06PC90ZD5cbiAgICAgICAgICAgIDx0ZD57e21hY2hpbmUuY291bnRyeS5uYW1lfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwidGFibGVfX3RkIGhhcy1iZyB0ZFwiPnt7bG9jKCdhZGRpdGlvbmFsSW5mb3JtYXRpb24nKX19OjwvdGQ+XG4gICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9XCIhZWRpdG9yQWN0aXZhdGVkXCIgY2xhc3M9XCJmbGV4LWZpbGxcIj5cbiAgICAgICAgICAgICAgICAgIDxwcmU+e3ttYWNoaW5lLmFkZGl0aW9uYWxJbmZvcm1hdGlvbn19PC9wcmU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiB2LWVsc2UgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZmxleC1maWxsXCI+XG4gICAgICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0xIGZvcm0tY29udHJvbCB0ZXh0YXJlYV9fZml0LWNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAgICBpZD1cInRleHRhcmVhXCJcbiAgICAgICAgICAgICAgICAgICAgOnZhbHVlPVwiYWRkaXRpb25hbEluZm9ybWF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgQGlucHV0PVwiaGFuZGxlSW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgIDwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gOmNsYXNzPVwic2F2ZUJ0blZpc2liaWxlID8gJ3Zpc2libGUnIDogJ2ludmlzaWJsZSdcIiA6ZGlzYWJsZWQ9XCJzYXZlRGlzYWJsZWRcIiBAY2xpY2s9XCJzYXZlXCIgY2xhc3M9XCJidG4gYnRuLS13aGl0ZSBzYXZlLS1idG5cIj5cbiAgICAgICAgICAgICAgICAgICAgICB7e2xvYygnc2F2ZScpfX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgOmNsYXNzPVwic2hvd1NhdmVNZXNzYWdlID8gJ3Zpc2libGUnIDogJ2ludmlzaWJsZSdcIiBjbGFzcz1cInNhdmUtLW1lc3NhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7e3NhdmVkU3VjY2Vzc2Z1bGx5ID8gbG9jKCdzYXZlZFN1Y2Nlc3NmdWxseScpIDogbG9jKCdmYWlsZWRUb1NhdmUnKX19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHRhcmVhX19lZGl0LWljb25cIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJlZGl0TWFjaGluZUluZm9QZXJtaXNzaW9uXCIgY2xhc3M9XCJpY29uIGljb24tLXBlbmNpbC0tYmxhY2tcIiByb2xlPVwiYnV0dG9uXCIgQGNsaWNrPVwiYWN0aXZhdGVFZGl0b3JcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8YnIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtbWQtNFwiPlxuICAgICAgICA8YSB2LWlmPVwibWFjaGluZS5tYWNoaW5lUGFnZVwiIGNsYXNzPVwiYnRuIGJ0bi0td2hpdGVcIiA6aHJlZj1cIm1hY2hpbmUubWFjaGluZVBhZ2VcIiB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICAgICAgICB7e2xvYygnY29tcG9uZW50cy5jdXN0b21lck1hY2hpbmUubWFjaGluZVByZXNlbnRhdGlvbicpfX1cbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiB2LWlmPVwib3duZXJQZXJtaXNzaW9uXCIgY2xhc3M9XCJvd25lci1jaGFuZ2VcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtbWQtNFwiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLS13aGl0ZVwiIHYtb246Y2xpY2s9XCJtYWNoaW5lT3duZXJVcGRhdGVkID0gZmFsc2U7IG93bmVyRm9ybSA9ICFvd25lckZvcm07XCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgICAgICB7e2xvYygnY29tcG9uZW50cy5jdXN0b21lck1hY2hpbmUubWFjaGluZU93bmVyc2hpcCcpfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtbWQtNlwiPlxuICAgICAgICAgIDxkaXYgdi1pZj1cIm1hY2hpbmVPd25lclVwZGF0ZWRcIiBjbGFzcz1cInVwZGF0ZWRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWNjZXNzXCIgPlxuICAgICAgICAgICAgICB7e2xvYygnY29tcG9uZW50cy5jdXN0b21lck1hY2hpbmUubWFjaGluZU93bmVyVXBkYXRlZCcpfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgdi1lbHNlIGNsYXNzPVwiY29sLXhzLTEyIGNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgPGRpdiB2LWlmPVwib3duZXJGb3JtXCIgY2xhc3M9XCJvd25lcmZvcm1cIj5cbiAgICAgICAgICAgICAgPGgzPnt7bG9jKCdjb21wb25lbnRzLmN1c3RvbWVyTWFjaGluZS5tYWNoaW5lTmV3T3duZXInKX19PC9oMz5cbiAgICAgICAgICAgICAgPHYtZm9ybSA6ZmllbGRzPVwiZmllbGRzXCIgOmZvcm0tZGF0YT1cImZvcm1EYXRhXCIgOmZvcm0tZXJyb3JzPVwiZm9ybUVycm9yc1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgc2xvdD1cImJ1dHRvbnNcIiBjbGFzcz1cInYtZm9ybS1idXR0b24tZGl2XCI+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIDpkaXNhYmxlZD1cInNlbmREaXNhYmxlZFwiIHYtb246Y2xpY2s9XCJ1cGRhdGVcIiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLS13aGl0ZVwiPlxuICAgICAgICAgICAgICAgICAgICB7e2xvYygndXBkYXRlSW5mb3JtYXRpb24nKX19XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC92LWZvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuXG4gICAgPGRpdiB2LWlmPVwiY29tcGxhaW50cy5sZW5ndGhcIj5cbiAgICAgIDxoMj57e2xvYygnY29tcGxhaW50cycpfX08L2gyPlxuICAgICAgPHYtY2xpZW50LXRhYmxlIDpjb2x1bW5zPVwiY29sdW1uc1wiIDpkYXRhPVwiZmlsdGVyZWRDb21wbGFpbnRzRGF0YVwiIDpvcHRpb25zPVwiY29tcGxhaW50c09wdGlvbnNcIj5cbiAgICAgICAgPHJvdXRlci1saW5rIHNsb3Q9XCJ1dWlkXCIgc2xvdC1zY29wZT1cInByb3BzXCIgOnRvPVwieyBuYW1lOiAnY29tcGxhaW50JywgcGFyYW1zOiB7IGlkOiBwcm9wcy5yb3cudXVpZCB9fVwiPnt7cHJvcHMucm93LnV1aWR9fTwvcm91dGVyLWxpbms+XG4gICAgICA8L3YtY2xpZW50LXRhYmxlPlxuICAgIDwvZGl2PlxuICAgIDwhLS0gaGlkZSBmb3Igbm93XG4gICAgPGRpdiB2LWlmPVwibWFjaGluZURldGFpbHMuZGF0YVwiPlxuICAgICAgPGgyPnt7bG9jKCdjb21wb25lbnRzLmN1c3RvbWVyTWFjaGluZS5tYWNoaW5lRGF0YScpfX08L2gyPlxuICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtLWZsdWlkIHRhYmxlLS1uYXJyb3ctZmlyc3QtY29sXCI+XG4gICAgICAgIDx0ciB2LWZvcj1cIihkYXRhLCBrZXkpIGluIG1hY2hpbmVEZXRhaWxzLmRhdGFcIiB2LWJpbmQ6a2V5PVwia2V5XCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwidGFibGVfX3RkIGhhcy1iZ1wiPnt7ZGF0YS5uYW1lfX08L3RkPjx0ZD57e2RhdGEudmFsdWV9fSB7e2RhdGEudW5pdH19PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9kaXY+XG4gICAgLS0+XG4gIDwvdGhlLTEtY29sdW1uLWxheW91dD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmltcG9ydCBWRm9ybSBmcm9tICcuL3YtZm9ybS52dWUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHtcbiAgICAndi1mb3JtJzogVkZvcm1cbiAgfSxcbiAgbmFtZTogJ1ZpZXdDdXN0b21lck1hY2hpbmUnLFxuICBkYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlcmlhbE51bWJlcjogJycsXG4gICAgICBjdXN0b21lck51bWJlciA6ICcnLFxuICAgICAgc2VhcmNoQ29sdW1uczogWyd1dWlkJywgJ3NlcmlhbE51bWJlcicsICdkYXRlQWRkZWQnLCAnc3RhdHVzJywgJ2RlbGl2ZXJ5RGF0ZSddLFxuICAgICAgY29sdW1uczogWyd1dWlkJywgJ3NlcmlhbE51bWJlcicsICdkYXRlQWRkZWQnLCAnc3RhdHVzJywgJ2RlbGl2ZXJ5RGF0ZSddLFxuICAgICAgc29ydGFibGU6IFsndXVpZCcsICdzZXJpYWxOdW1iZXInLCAnZGF0ZUFkZGVkJywgJ3N0YXR1cycsICdkZWxpdmVyeURhdGUnXSxcbiAgICAgIGZpbHRlcmFibGU6IFsndXVpZCcsICdzZXJpYWxOdW1iZXInLCAnZGF0ZUFkZGVkJywgJ3N0YXR1cycsICdkZWxpdmVyeURhdGUnXSxcbiAgICAgIHNlbGVjdGVkOiAnMTAnLFxuICAgICAgZm9ybURhdGEgOiB7fSxcbiAgICAgIGZvcm1FcnJvcnM6IHt9LFxuICAgICAgb3duZXJQZXJtaXNzaW9uOiBmYWxzZSxcbiAgICAgIGVkaXRNYWNoaW5lSW5mb1Blcm1pc3Npb246IGZhbHNlLFxuICAgICAgZWRpdG9yQWN0aXZhdGVkOiBmYWxzZSxcbiAgICAgIHNhdmVEaXNhYmxlZDogdHJ1ZSxcbiAgICAgIHNhdmVCdG5WaXNpYmlsZTogZmFsc2UsXG4gICAgICBhZGRpdGlvbmFsSW5mb3JtYXRpb246ICcnLFxuICAgICAgc2hvd1NhdmVNZXNzYWdlOiBmYWxzZSxcbiAgICAgIHNhdmVkU3VjY2Vzc2Z1bGx5OiBmYWxzZSxcbiAgICAgIG93bmVyVXBkYXRlZDogZmFsc2UsXG4gICAgICBtYWNoaW5lT3duZXJVcGRhdGVkOiBmYWxzZSxcbiAgICAgIG93bmVyRm9ybSA6IGZhbHNlLFxuICAgICAgc2VuZERpc2FibGVkOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBmaWVsZHMoKSB7XG4gICAgICBpZih0aGlzLiRzdG9yZS5nZXR0ZXJzLmNoaWxkQ29tcGFuaWVzT3B0aW9ucykge1xuICAgICAgICByZXR1cm4gW3tcbiAgICAgICAgICBuYW1lOiAnaWQnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmluZm8uaWQsXG4gICAgICAgICAgbGFiZWw6ICdpZCcsXG4gICAgICAgICAgdHlwZTogJ2hpZGRlbidcbiAgICAgICAgfSx7XG4gICAgICAgICAgbmFtZTogJ2NoaWxkQ29tcGFueUlkJyxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5tYWNoaW5lLmN1c3RvbWVyTnVtYmVyLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY29tcGFueScpLFxuICAgICAgICAgIG9wdGlvbnM6IHRoaXMuJHN0b3JlLmdldHRlcnMuY2hpbGRDb21wYW5pZXNPcHRpb25zLFxuICAgICAgICAgIHR5cGU6ICdzZWxlY3QnXG4gICAgICAgIH0se1xuICAgICAgICAgIG5hbWU6ICdzZXJpYWxOdW1iZXInLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLnNlcmlhbE51bWJlcixcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ3NlcmlhbE51bWJlcicpLFxuICAgICAgICAgIHR5cGU6ICdoaWRkZW4nXG4gICAgICAgIH1dO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW3tcbiAgICAgICAgbmFtZSA6ICdpZCcsXG4gICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdjb21wYW55JyksXG4gICAgICAgIHR5cGUgOiAndGV4dCdcbiAgICAgIH0se1xuICAgICAgICBuYW1lOiAnc2VyaWFsTnVtYmVyJyxcbiAgICAgICAgdmFsdWU6IHRoaXMuc2VyaWFsTnVtYmVyLFxuICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ3NlcmlhbE51bWJlcicpLFxuICAgICAgICB0eXBlOiAnaGlkZGVuJ1xuICAgICAgfV07XG4gICAgfSxcbiAgICBmaWx0ZXJlZENvbXBsYWludHNEYXRhKCkge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICBjb25zdCBzZWFyY2hUZXh0ID0gdGhpcy4kc3RvcmUuc3RhdGUuc3ViaGVhZGVyLnNlYXJjaFRleHQ7IC8vIFVzZSBzdWJoZWFkZXIgc2VhcmNoIGlucHV0IGZvciBzZWFyY2hpbmdcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNvbXBsYWludHM7XG5cbiAgICAgIGlmKHNlYXJjaFRleHQpIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoUmVnRXggPSBuZXcgUmVnRXhwKHNlYXJjaFRleHQsICdpJylcblxuICAgICAgICByZXR1cm4gZGF0YS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICBmb3IobGV0IGk9MCwgbD1zZWxmLnNlYXJjaENvbHVtbnMubGVuZ3RoOyBpPGw7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uID0gc2VsZi5zZWFyY2hDb2x1bW5zW2ldO1xuXG4gICAgICAgICAgICBpZihzZWFyY2hSZWdFeC50ZXN0KGl0ZW1bY29sdW1uXSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9LFxuICAgIG9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmaWx0ZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgaGVhZGluZ3M6IHtcbiAgICAgICAgICB1dWlkOiB0aGlzLmxvYygnY29tcGxhaW50SWQnKSxcbiAgICAgICAgICBzZXJpYWxOdW1iZXI6IHRoaXMubG9jKCdzZXJpYWxOdW1iZXInKSxcbiAgICAgICAgICBkYXRlQWRkZWQ6IHRoaXMubG9jKCdkYXRlQWRkZWQnKSxcbiAgICAgICAgICBzdGF0dXM6IHRoaXMubG9jKCdzdGF0dXMnKSxcbiAgICAgICAgICBkZWxpdmVyeURhdGU6IHRoaXMubG9jKCdjdXN0b21lck1hY2hpbmVXYXJyYW50eVJlZ2lzdGVyZWQnKVxuICAgICAgICB9LFxuICAgICAgICB0ZXh0czoge1xuICAgICAgICAgICAgY291bnQ6IHRoaXMubG9jKCdwYWdpbmF0aW9uQ291bnQnKSxcbiAgICAgICAgICAgIGxpbWl0OiB0aGlzLmxvYygncmVjb3JkcycpLFxuICAgICAgICAgICAgbm9SZXN1bHRzOiB0aGlzLmxvYygnbm9NYXRjaGluZ1Jlc3VsdHMnKSxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgY29tcGxhaW50c09wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmaWx0ZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgaGVhZGluZ3M6IHtcbiAgICAgICAgICB1dWlkOiB0aGlzLmxvYygnY29tcGxhaW50SWQnKSxcbiAgICAgICAgICBzZXJpYWxOdW1iZXI6IHRoaXMubG9jKCdzZXJpYWxOdW1iZXInKSxcbiAgICAgICAgICBkYXRlQWRkZWQ6IHRoaXMubG9jKCdkYXRlQWRkZWRDb21wbGFpbnQnKSxcbiAgICAgICAgICBzdGF0dXM6IHRoaXMubG9jKCdzdGF0dXMnKSxcbiAgICAgICAgICBkZWxpdmVyeURhdGU6IHRoaXMubG9jKCdkZWxpdmVyeURhdGVDb21wbGFpbnQnKVxuICAgICAgICB9LFxuICAgICAgICB0ZXh0czoge1xuICAgICAgICAgICAgY291bnQ6IHRoaXMubG9jKCdwYWdpbmF0aW9uQ291bnQnKSxcbiAgICAgICAgICAgIGxpbWl0OiB0aGlzLmxvYygncmVjb3JkcycpLFxuICAgICAgICAgICAgbm9SZXN1bHRzOiB0aGlzLmxvYygnbm9NYXRjaGluZ1Jlc3VsdHMnKSxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgY29tcGxhaW50cygpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5zdGF0ZS5jb21wbGFpbnRzLmZpbHRlcihjb21wbGFpbnQgPT4gY29tcGxhaW50LnNlcmlhbE51bWJlciA9PT0gdGhpcy5zZXJpYWxOdW1iZXIpLm1hcChjb21wbGFpbnQgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHV1aWQ6IGNvbXBsYWludC51dWlkLFxuICAgICAgICAgIHNlcmlhbE51bWJlcjogY29tcGxhaW50LnNlcmlhbE51bWJlcixcbiAgICAgICAgICBqb2JzVGV4dDogY29tcGxhaW50LmpvYnNUZXh0LFxuICAgICAgICAgIHN0YXR1czogY29tcGxhaW50LnN0YXR1cyAmJiBjb21wbGFpbnQuc3RhdHVzLm5hbWUsXG4gICAgICAgICAgZGF0ZUFkZGVkOiBjb21wbGFpbnQuZGF0ZUFkZGVkICYmIGNvbXBsYWludC5kYXRlQWRkZWQuZm9ybWF0dGVkLFxuICAgICAgICAgIGRlbGl2ZXJ5RGF0ZTogY29tcGxhaW50LmRlbGl2ZXJ5RGF0ZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIG1hY2hpbmUoKSB7XG4gICAgICBmb3IobGV0IGk9MCwgbD10aGlzLiRzdG9yZS5zdGF0ZS5jdXN0b21lck1hY2hpbmVzLmxlbmd0aDsgaTxsOyBpKyspIHtcbiAgICAgICAgaWYodGhpcy4kc3RvcmUuc3RhdGUuY3VzdG9tZXJNYWNoaW5lc1tpXS5zZXJpYWxOdW1iZXIgPT09IHRoaXMuc2VyaWFsTnVtYmVyKSB7XG4gICAgICAgICAgdGhpcy4kc3RvcmUuY29tbWl0KCdzZXRTdWJoZWFkZXInLCB7XG4gICAgICAgICAgICBzdWJ0aXRsZTogJycsXG4gICAgICAgICAgICB0aXRsZTogdGhpcy4kc3RvcmUuc3RhdGUuY3VzdG9tZXJNYWNoaW5lc1tpXS5tYWNoaW5lTW9kZWxOYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgICAgICAgc2VhcmNoRW5hYmxlZDogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxJbmZvcm1hdGlvbiA9IHRoaXMuJHN0b3JlLnN0YXRlLmN1c3RvbWVyTWFjaGluZXNbaV0uYWRkaXRpb25hbEluZm9ybWF0aW9uO1xuICAgICAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5zdGF0ZS5jdXN0b21lck1hY2hpbmVzW2ldO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElmIG5vdGhpbmcgaXMgZm91bmRcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvdW50cnk6IHt9LFxuICAgICAgICBkZWxpdmVyeURhdGU6IHt9XG4gICAgICB9O1xuICAgIH0sXG4gICAgbWFjaGluZURldGFpbHMoKSB7XG4gICAgICBmb3IobGV0IGk9MCwgbD10aGlzLiRzdG9yZS5zdGF0ZS5jdXN0b21lck1hY2hpbmVEZXRhaWxzLmxlbmd0aDsgaTxsOyBpKyspIHtcbiAgICAgICAgaWYodGhpcy4kc3RvcmUuc3RhdGUuY3VzdG9tZXJNYWNoaW5lRGV0YWlsc1tpXS5zZXJpYWxOdW1iZXIgPT09IHRoaXMuc2VyaWFsTnVtYmVyKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLnN0YXRlLmN1c3RvbWVyTWFjaGluZURldGFpbHNbaV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgbm90aGluZyBpcyBmb3VuZFxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgYXN5bmMgdXBkYXRlKCkge1xuICAgICAgdGhpcy5zZW5kRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuJGFwaS51cGRhdGVDdXN0b21lck1hY2hpbmVPd25lcih0aGlzLmZvcm1EYXRhLnNlcmlhbE51bWJlciwgdGhpcy5mb3JtRGF0YSkudGhlbihyZXMgPT4ge1xuICAgICAgICB0aGlzLnNlbmREaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIEVycm9ycyBpbiBmb3JtXG4gICAgICAgIGlmKHJlcy5jb2RlID09PSA0MDApIHtcbiAgICAgICAgICB0aGlzLmZvcm1FcnJvcnMgPSByZXMucmVzdWx0LmZpZWxkcztcbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWYocmVzLmNvZGUgPT09IDIwMCkge1xuICAgICAgICAgIHRoaXMubWFjaGluZU93bmVyVXBkYXRlZCA9IHRydWU7IC8vc2hvdyBtZXNzYWdlXG4gICAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldEN1c3RvbWVyTWFjaGluZScsIHRoaXMuc2VyaWFsTnVtYmVyKTsgLy91cGRhdGUgbWFjaGluZSB2aWV3XG4gICAgICAgICAgdGhpcy5vd25lckZvcm0gPSBmYWxzZTsgLy9oaWRlIGZvcm1cbiAgICAgICAgfVxuXG4gICAgICB9KTtcblxuICAgIH0sXG5cbiAgICBhY3RpdmF0ZUVkaXRvcigpIHtcbiAgICAgIHRoaXMuZWRpdG9yQWN0aXZhdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgY29uc3QgdGV4dGFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGV4dGFyZWEnKTtcbiAgICAgICAgdGV4dGFyZWEuZm9jdXMoKTtcbiAgICAgICAgdGV4dGFyZWEuc3R5bGUuaGVpZ2h0ID0gdGV4dGFyZWEuc2Nyb2xsSGVpZ2h0ICsgJ3B4JztcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGhhbmRsZUlucHV0KGV2ZW50KSAge1xuICAgICAgdGhpcy5zYXZlRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2F2ZUJ0blZpc2liaWxlID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWRkaXRpb25hbEluZm9ybWF0aW9uID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldDtcbiAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nO1xuICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBlbGVtZW50LnNjcm9sbEhlaWdodCArICdweCc7IC8vIGFkanVzdCB0ZXh0YXJlYSBoZWlnaHQgdG8gdGhlIGlucHV0IGNvbnRlbnRcbiAgICB9LFxuXG4gICAgYXN5bmMgc2F2ZSgpIHtcbiAgICAgIHRoaXMuc2F2ZURpc2FibGVkID0gdHJ1ZTtcblxuICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgYWRkaXRpb25hbEluZm9ybWF0aW9uOiB0aGlzLmFkZGl0aW9uYWxJbmZvcm1hdGlvblxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHRoaXMuJGFwaS5zYXZlQ3VzdG9tZXJNYWNoaW5lSW5mb3JtYXRpb24odGhpcy5zZXJpYWxOdW1iZXIsIGRhdGEpLnRoZW4ocmVzID0+IHtcblxuXG4gICAgICAgIGlmKHJlcy5jb2RlID09PSA0MDAgfHwgcmVzLmNvZGUgPT09IDUwMCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVzLnJlc3VsdC5maWVsZHMpO1xuICAgICAgICAgIHRoaXMuc2F2ZWRTdWNjZXNzZnVsbHkgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHJlcy5jb2RlID09PSAyMDApIHtcbiAgICAgICAgICB0aGlzLnNhdmVkU3VjY2Vzc2Z1bGx5ID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnZ2V0Q3VzdG9tZXJNYWNoaW5lJywgdGhpcy5zZXJpYWxOdW1iZXIpOyAvLyB1cGRhdGUgbWFjaGluZSB2aWV3XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNob3dTYXZlTWVzc2FnZSA9IHRydWU7IC8vIHNob3cgbWVzc2FnZVxuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyAvLyBmYWRlIG91dCB0aGUgc2F2ZWQgbWVzc2FnZSBhbmQgYnV0dG9uXG4gICAgICAgICAgICB0aGlzLnNob3dTYXZlTWVzc2FnZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zYXZlQnRuVmlzaWJpbGUgPSB0aGlzLnNhdmVkU3VjY2Vzc2Z1bGx5ID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zYXZlRGlzYWJsZWQgPSB0aGlzLnNhdmVkU3VjY2Vzc2Z1bGx5ID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgfSwgMjAwMCk7XG5cbiAgICAgIH0pO1xuICAgIH1cblxuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XG5cbiAgICAvL1Blcm1pc3Npb24gdG8gc2hvdyBtYWNoaW5lIG93bmVyc2hpcCBmb3JtIC0gdHJ1ZS9mYWxzZVxuICAgIC8vcmV0YWlsZXIsIGN1c3RvbWVyIGFuZCByZXRhaWxlci1hZG1pbiB3b24ndCBnZXQgcGVybWlzc2lvblxuXG4gICAgdGhpcy5vd25lclBlcm1pc3Npb24gPVxuICAgICAgdGhpcy4kdXNlclJpZ2h0cy5oYXNSaWdodCggd2luZG93LlJJR0hUUy5WSUVXX09XTkVSU0hJUF9GT1JNLCB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLnJvbGUgKVxuICAgICAgPyB0cnVlXG4gICAgICA6IGZhbHNlO1xuXG4gICAgdGhpcy5lZGl0TWFjaGluZUluZm9QZXJtaXNzaW9uID1cbiAgICAgIHRoaXMuJHVzZXJSaWdodHMuaGFzUmlnaHQoIHdpbmRvdy5SSUdIVFMuRURJVF9NQUNISU5FX0lORk8sIHRoaXMuJHN0b3JlLnN0YXRlLnVzZXIucm9sZSlcbiAgICAgID8gdHJ1ZVxuICAgICAgOiBmYWxzZTtcblxuICAgIC8vUkVNT1ZFIFRISVMgV0hFTiBLTEFQSVBPUlRBTCBPV05FUlNISVAgQ0hBTkdFIElTIFJFQURZXG4gICAgLy90aGlzLm93bmVyUGVybWlzc2lvbiA9IGZhbHNlO1xuXG4gICAgdGhpcy5zZXJpYWxOdW1iZXIgPSB0aGlzLiRyb3V0ZS5wYXJhbXMuc2VyaWFsTnVtYmVyXG4gICAgdGhpcy5tYWNoaW5lT3duZXJVcGRhdGVkID0gZmFsc2U7XG4gICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldEN1c3RvbWVyTWFjaGluZScsIHRoaXMuc2VyaWFsTnVtYmVyKVxuICAgIC8vdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldEN1c3RvbWVyTWFjaGluZURldGFpbHMnLCB0aGlzLnNlcmlhbE51bWJlcik7XG4gICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldENoaWxkQ29tcGFuaWVzJyk7XG4gICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldENvbXBsYWludHMnLCB7XG4gICAgICBzZXJpYWxOdW1iZXI6IHRoaXMuc2VyaWFsTnVtYmVyLFxuICAgICAgaW5jbHVkZUNoaWxkQ29tcGFuaWVzOiB0cnVlXG4gICAgfSlcbiAgICB0aGlzLiRzdG9yZS5jb21taXQoJ3NldFN1YmhlYWRlcicsIHtcbiAgICAgIHN1YnRpdGxlOiAnJyxcbiAgICAgIHRpdGxlOiAnJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIHNlYXJjaEVuYWJsZWQ6IGZhbHNlXG4gICAgfSk7XG5cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDx0aGUtc2lkZWJhci1sYXlvdXQ+XG4gICAgPGRpdiBjbGFzcz1cInNob3ctc2VhcmNoLWJ1dHRvblwiIHYtb246Y2xpY2s9XCJzaG93U2VhcmNoXCIgc2xvdD1cInNpZGViYXItdGl0bGVcIj57e2xvYygnZmlsdGVyUmVzdWx0cycpfX08L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaGlkZS1tb2JpbGUgc2lkZWJhclNlYXJjaFwiIHNsb3Q9XCJzaWRlYmFyXCI+XG4gICAgICA8di1mb3JtIDpmaWVsZHM9XCJmaWx0ZXJGaWVsZHNcIiA6Zm9ybS1kYXRhPVwiZm9ybURhdGFcIiA6Zm9ybS1lcnJvcnM9XCJmb3JtRXJyb3JzXCIgOm9uLWNoYW5nZT1cImZpbHRlcnNDaGFuZ2VkXCI+PC92LWZvcm0+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImhpZGUtbW9iaWxlXCIgc3R5bGU9XCJmbG9hdDogcmlnaHQ7IG1hcmdpbi1ib3R0b206IDUwcHhcIj5cbiAgICAgIDxkaXY+e3t0aGlzLmxvYygncmVjb3JkcycpfX08L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tc2VsZWN0IGpzLWN1c3RvbS1zZWxlY3Qtd3JhcHBlclwiIHN0eWxlPVwid2lkdGg6IDEwMHB4XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tc2VsZWN0X19kcm9wZG93biBqcy1jdXN0b20tc2VsZWN0LWRyb3Bkb3duIGN1c3RvbS1zZWxlY3RfX3NtYWxsXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tc2VsZWN0X190ZXh0IGpzLWN1c3RvbS1zZWxlY3QtdGV4dGhvbGRlclwiPnt7c2VsZWN0ZWRWYWx1ZX19PC9zcGFuPlxuICAgICAgICAgIDxzZWxlY3Qgdi1tb2RlbD1cInNlbGVjdGVkXCIgQGNoYW5nZT1cIiRyZWZzLnRhYmxlLnNldExpbWl0KCRldmVudC50YXJnZXQudmFsdWUpXCIgY2xhc3M9XCJmb3JtX19maWVsZC1zZWxlY3QganMtY3VzdG9tLXNlbGVjdCBmb3JtX19maWVsZC1zZWxlY3QtY3VzdG9tIGpzLWxhbmctc2VsZWN0IGxhbmdfc2VsZWN0XCI+XG4gICAgICAgICAgICA8b3B0aW9uIHYtYmluZDp0ZXh0PVwiMTBcIiB2YWx1ZT1cIjEwXCI+MTA8L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gdi1iaW5kOnRleHQ9XCIyNVwiIHZhbHVlPVwiMjVcIj4yNTwvb3B0aW9uPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDx2LWNsaWVudC10YWJsZSByZWY9XCJ0YWJsZVwiIDpjb2x1bW5zPVwiY29sdW1uc1wiIDpkYXRhPVwiZmlsdGVyZWREYXRhXCIgOm9wdGlvbnM9XCJvcHRpb25zXCI+XG4gICAgICA8cm91dGVyLWxpbmsgc2xvdD1cInNlcmlhbE51bWJlclwiIHNsb3Qtc2NvcGU9XCJwcm9wc1wiIDp0bz1cInsgbmFtZTogJ2N1c3RvbWVyLW1hY2hpbmUnLCBwYXJhbXM6IHsgc2VyaWFsTnVtYmVyOiBwcm9wcy5yb3cuc2VyaWFsTnVtYmVyIH19XCI+e3twcm9wcy5yb3cuc2VyaWFsTnVtYmVyfX08L3JvdXRlci1saW5rPlxuICAgICAgPGRpdiBzbG90PVwiZGVsaXZlcnlEYXRlXCIgc2xvdC1zY29wZT1cInByb3BzXCI+e3twcm9wcy5yb3cuZGVsaXZlcnlEYXRlRm9ybWF0dGVkfX08L2Rpdj5cbiAgICA8L3YtY2xpZW50LXRhYmxlPlxuICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyXCI+PC9kaXY+XG4gIDwvdGhlLXNpZGViYXItbGF5b3V0PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBWRm9ybSBmcm9tICcuL3YtZm9ybS52dWUnO1xuaW1wb3J0IHF1ZXJ5U3RyaW5nIGZyb20gJ3F1ZXJ5LXN0cmluZyc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdWaWV3Q3VzdG9tZXJNYWNoaW5lcycsXG4gIGNvbXBvbmVudHM6IHtcbiAgICAndi1mb3JtJzogVkZvcm1cbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBmb3JtRXJyb3JzOiB7fSxcbiAgICAgIGZvcm1EYXRhOiB7fSxcbiAgICAgIGZpbHRlckRhdGE6IHtcbiAgICAgICAgc2VyaWFsTnVtYmVyOiAnJyxcbiAgICAgICAgYmFzZU1vZGVsOiAnJyxcbiAgICAgICAgZGVsaXZlcnlEYXRlU3RhcnQ6ICcnLFxuICAgICAgICBkZWxpdmVyeURhdGVFbmQ6ICcnLFxuICAgICAgICBjb3VudHJ5OiAnJyxcbiAgICAgICAgZGF0ZUFkZGVkU3RhcnQ6ICcnLFxuICAgICAgICBkYXRlQWRkZWRFbmQ6ICcnLFxuICAgICAgfSxcbiAgICAgIGZpbHRlcmluZ0VuYWJsZWQ6IGZhbHNlLFxuICAgICAgc2VhcmNoVGV4dDogJycsXG4gICAgICBzZWFyY2hDb2x1bW5zOiBbJ21hY2hpbmVNb2RlbE5hbWUnLCAnc2VyaWFsTnVtYmVyJywgJ2RlbGl2ZXJ5RGF0ZUZvcm1hdHRlZCcsICdjb21wYW55TmFtZScsICdkYXRlQWRkZWRGb3JtYXR0ZWQnLCAnY291bnRyeSddLFxuICAgICAgY29sdW1uczogWydtYWNoaW5lTW9kZWxOYW1lJywgJ3NlcmlhbE51bWJlcicsICdkZWxpdmVyeURhdGUnLCAnY29tcGFueU5hbWUnLCAnZGF0ZUFkZGVkJywgJ2NvdW50cnknXSxcbiAgICAgIHNvcnRhYmxlOiBbJ21hY2hpbmVNb2RlbE5hbWUnLCAnc2VyaWFsTnVtYmVyJywgJ2RlbGl2ZXJ5RGF0ZScsICdjb21wYW55TmFtZScsICdkYXRlQWRkZWQnLCdjb3VudHJ5J10sXG4gICAgICBmaWx0ZXJhYmxlOiBbJ21hY2hpbmVNb2RlbE5hbWUnLCAnc2VyaWFsTnVtYmVyJywgJ2RlbGl2ZXJ5RGF0ZScsICdjb21wYW55TmFtZScsICdkYXRlQWRkZWQnLCdjb3VudHJ5J10sXG4gICAgICBzZWxlY3RlZDogJzEwJ1xuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBmaWx0ZXJGaWVsZHMoKSB7XG4gICAgICAvLyBPbmx5IHBvcHVsYXRlIGZpZWxkcyBhZnRlciBwb3NzaWJsZSB1cmwgcXVlcnkgZmlsdGVycyBoYXZlIGJlZW4gYXBwbGllZFxuICAgICAgaWYoIXRoaXMuZmlsdGVyaW5nRW5hYmxlZCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbe1xuICAgICAgICBuYW1lOiAnc2VyaWFsTnVtYmVyJyxcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyRGF0YS5zZXJpYWxOdW1iZXIsXG4gICAgICAgIGxhYmVsOiB0aGlzLmxvYygnc2VyaWFsTnVtYmVyJyksXG4gICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgfSwge1xuICAgICAgICBuYW1lOiAnZGVsaXZlcnlEYXRlU3RhcnQnLFxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJEYXRhLmRlbGl2ZXJ5RGF0ZVN0YXJ0ID8gbmV3IERhdGUodGhpcy5maWx0ZXJEYXRhLmRlbGl2ZXJ5RGF0ZVN0YXJ0KSA6ICcnLFxuICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2RlbGl2ZXJ5RGF0ZVN0YXJ0JyksXG4gICAgICAgIHR5cGU6ICdkYXRlJ1xuICAgICAgfSwge1xuICAgICAgICBuYW1lOiAnZGVsaXZlcnlEYXRlRW5kJyxcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyRGF0YS5kZWxpdmVyeURhdGVFbmQgPyBuZXcgRGF0ZSh0aGlzLmZpbHRlckRhdGEuZGVsaXZlcnlEYXRlRW5kKSA6ICcnLFxuICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2RlbGl2ZXJ5RGF0ZUVuZCcpLFxuICAgICAgICB0eXBlOiAnZGF0ZSdcbiAgICAgIH0sIHtcbiAgICAgICAgbmFtZTogJ2Jhc2VNb2RlbCcsXG4gICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlckRhdGEuYmFzZU1vZGVsLFxuICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ21hY2hpbmVNb2RlbCcpLFxuICAgICAgICBvcHRpb25zOiB0aGlzLmJhc2VNYWNoaW5lT3B0aW9ucyxcbiAgICAgICAgdHlwZTogJ3NlbGVjdCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdjb3VudHJ5JyxcbiAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyRGF0YS5jb3VudHJ5LFxuICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ2NvdW50cnknKSxcbiAgICAgICAgb3B0aW9uczogdGhpcy5jb3VudHJ5T3B0aW9ucyxcbiAgICAgICAgdHlwZTogJ3NlbGVjdCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdkYXRlQWRkZWRTdGFydCcsXG4gICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlckRhdGEuZGF0ZUFkZGVkU3RhcnQgPyBuZXcgRGF0ZSh0aGlzLmZpbHRlckRhdGEuZGF0ZUFkZGVkU3RhcnQpIDogJycsXG4gICAgICAgIGxhYmVsOiB0aGlzLmxvYygnZGF0ZUFkZGVkU3RhcnQnKSxcbiAgICAgICAgdHlwZTogJ2RhdGUnXG4gICAgICB9LCB7XG4gICAgICAgIG5hbWU6ICdkYXRlQWRkZWRFbmQnLFxuICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJEYXRhLmRhdGVBZGRlZEVuZCA/IG5ldyBEYXRlKHRoaXMuZmlsdGVyRGF0YS5kYXRlQWRkZWRFbmQpIDogJycsXG4gICAgICAgIGxhYmVsOiB0aGlzLmxvYygnZGF0ZUFkZGVkRW5kJyksXG4gICAgICAgIHR5cGU6ICdkYXRlJ1xuICAgICAgfV07XG4gICAgfSxcbiAgICBjb3VudHJ5T3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBbXTtcbiAgICAgIGNvbnN0IGFkZGVkT3B0aW9ucyA9IFtdO1xuXG4gICAgICBvcHRpb25zLnB1c2goe1xuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIHRleHQ6ICctLSdcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLiRzdG9yZS5zdGF0ZS5jdXN0b21lck1hY2hpbmVzLmZvckVhY2gobWFjaGluZSA9PiB7XG4gICAgICAgIGlmKG1hY2hpbmUuY291bnRyeSAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmKGFkZGVkT3B0aW9ucy5pbmRleE9mKG1hY2hpbmUuY291bnRyeS5jb3VudHJ5Q29kZSkgPT09IC0xKSB7XG5cbiAgICAgICAgICAgIG9wdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgIHZhbHVlOiBtYWNoaW5lLmNvdW50cnkuY291bnRyeUNvZGUsXG4gICAgICAgICAgICAgIHRleHQ6IG1hY2hpbmUuY291bnRyeS5uYW1lXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYWRkZWRPcHRpb25zLnB1c2gobWFjaGluZS5jb3VudHJ5LmNvdW50cnlDb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgfSk7XG5cbiAgICAgIG9wdGlvbnMuc29ydCgoYSwgYikgPT4gKGEudGV4dCA+IGIudGV4dCkgPyAxIDogLTEpXG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9LFxuICAgIGJhc2VNYWNoaW5lT3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBbXTtcbiAgICAgIGNvbnN0IGFkZGVkT3B0aW9ucyA9IFtdO1xuXG4gICAgICBvcHRpb25zLnB1c2goe1xuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIHRleHQ6ICctLSdcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLiRzdG9yZS5zdGF0ZS5jdXN0b21lck1hY2hpbmVzLmZvckVhY2gobWFjaGluZSA9PiB7XG5cbiAgICAgICAgaWYoIGFkZGVkT3B0aW9ucy5pbmRleE9mKG1hY2hpbmUubWFjaGluZUJhc2VNb2RlbElkKSA9PT0gLTEgJiYgbWFjaGluZS5tYWNoaW5lQmFzZU1vZGVsTmFtZSAhPT0gbnVsbCApIHtcbiAgICAgICAgICAvL1NvbWUgbWFjaGluZXMgbWlnaHQgaGF2ZSBiYXNlTW9kZWxJZCBudWxsIGFuZCBwcmV2ZW50IHRoZW0gdG8gY29tZSBhcyBlbXB0eSBvcHRpb25zIHRvIGZpbHRlciBkcm9wZG93blxuICAgICAgICAgIGlmKCBtYWNoaW5lLm1hY2hpbmVCYXNlTW9kZWxJZCAhPT0gbnVsbCApe1xuICAgICAgICAgICAgb3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgdmFsdWU6IG1hY2hpbmUubWFjaGluZUJhc2VNb2RlbElkLFxuICAgICAgICAgICAgICB0ZXh0OiBtYWNoaW5lLm1hY2hpbmVCYXNlTW9kZWxOYW1lXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhZGRlZE9wdGlvbnMucHVzaChtYWNoaW5lLm1hY2hpbmVCYXNlTW9kZWxJZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBvcHRpb25zLnNvcnQoKGEsIGIpID0+IChhLnRleHQgPiBiLnRleHQpID8gMSA6IC0xKTtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH0sXG4gICAgbWFjaGluZURhdGEoKSB7XG4gICAgICBjb25zdCBpdGVtcyA9IFtdO1xuXG4gICAgICB0aGlzLiRzdG9yZS5zdGF0ZS5jdXN0b21lck1hY2hpbmVzLmZvckVhY2gobWFjaGluZSA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG1hY2hpbmUpKTtcblxuICAgICAgICBpdGVtLmNvdW50cnlDb2RlID0gaXRlbS5jb3VudHJ5ID09PSBudWxsID8gICcnIDogaXRlbS5jb3VudHJ5LmNvdW50cnlDb2RlOyAvL3R5cGVvZiBpdGVtLmNvdW50cnkuY291bnRyeUNvZGUgIT09ICd1bmRlZmluZWQnID8gJycgOiBpdGVtLmNvdW50cnkuY291bnRyeUNvZGU7XG4gICAgICAgIGl0ZW0uY291bnRyeSA9IGl0ZW0uY291bnRyeSA9PT0gbnVsbCA/ICAnJyA6IGl0ZW0uY291bnRyeS5uYW1lOyAvLyB0eXBlb2YgaXRlbS5jb3VudHJ5Lm5hbWUgIT09ICd1bmRlZmluZWQnID8gJycgOiAgaXRlbS5jb3VudHJ5Lm5hbWU7XG4gICAgICAgIGl0ZW0uZGVsaXZlcnlEYXRlRm9ybWF0dGVkID0gaXRlbS5kZWxpdmVyeURhdGUuZm9ybWF0dGVkO1xuICAgICAgICBpdGVtLmRlbGl2ZXJ5RGF0ZSA9IGl0ZW0uZGVsaXZlcnlEYXRlLmRhdGU7XG4gICAgICAgIGl0ZW0uZGF0ZUFkZGVkRm9ybWF0dGVkID0gIGl0ZW0uZGF0ZUFkZGVkLmZvcm1hdHRlZDtcbiAgICAgICAgaXRlbS5kYXRlQWRkZWQgPSBpdGVtLmRhdGVBZGRlZC5kYXRlO1xuICAgICAgICBpdGVtLmNvbXBhbnlOYW1lID0gKGl0ZW0ucmV0YWlsX2N1c3RvbWVyX25hbWUgIT0gJycpID8gaXRlbS5yZXRhaWxfY3VzdG9tZXJfbmFtZSA6IGl0ZW0uY29tcGFueU5hbWU7XG4gICAgICAgIGl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH0sXG4gICAgb3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpbHRlcmFibGU6IGZhbHNlLFxuICAgICAgICBoZWFkaW5nczoge1xuICAgICAgICAgIG1hY2hpbmVNb2RlbE5hbWU6IHRoaXMubG9jKCdtYWNoaW5lTW9kZWwnKSxcbiAgICAgICAgICBzZXJpYWxOdW1iZXI6IHRoaXMubG9jKCdzZXJpYWxOdW1iZXInKSxcbiAgICAgICAgICBkZWxpdmVyeURhdGU6IHRoaXMubG9jKCdjdXN0b21lck1hY2hpbmVXYXJyYW50eVJlZ2lzdGVyZWQnKSxcbiAgICAgICAgICBjb21wYW55TmFtZTogdGhpcy5sb2MoJ2NvbXBhbnknKSxcbiAgICAgICAgICBjb3VudHJ5OiB0aGlzLmxvYygnY291bnRyeScpLFxuICAgICAgICAgIGRhdGVBZGRlZDogdGhpcy5sb2MoJ2RhdGVBZGRlZCcpXG4gICAgICAgIH0sXG4gICAgICAgIHRleHRzOiB7XG4gICAgICAgICAgICBjb3VudDogdGhpcy5sb2MoJ3BhZ2luYXRpb25Db3VudCcpLFxuICAgICAgICAgICAgbGltaXQ6IHRoaXMubG9jKCdyZWNvcmRzJyksXG4gICAgICAgICAgICBub1Jlc3VsdHM6IHRoaXMubG9jKCdub01hdGNoaW5nUmVzdWx0cycpLFxuICAgICAgICB9LFxuICAgICAgICBza2luOiAndGFibGUtcmVzcG9uc2l2ZSdcblxuICAgICAgfVxuICAgIH0sXG4gICAgZmlsdGVyZWREYXRhKCkge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICBjb25zdCBzZWFyY2hUZXh0ID0gdGhpcy4kc3RvcmUuc3RhdGUuc3ViaGVhZGVyLnNlYXJjaFRleHQ7IC8vIFVzZSBzdWJoZWFkZXIgc2VhcmNoIGlucHV0IGZvciBzZWFyY2hpbmdcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLm1hY2hpbmVEYXRhO1xuICAgICAgY29uc3QgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyRGF0YTtcblxuICAgICAgcmV0dXJuIGRhdGEuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICBmb3IobGV0IGtleSBpbiB0aGlzLmZpbHRlckRhdGEpIHtcbiAgICAgICAgICBzd2l0Y2goa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzZXJpYWxOdW1iZXInOlxuICAgICAgICAgICAgICBpZih0aGlzLmZpbHRlckRhdGEuc2VyaWFsTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VhcmNoUmVnRXggPSBuZXcgUmVnRXhwKHRoaXMuZmlsdGVyRGF0YS5zZXJpYWxOdW1iZXIsICdpJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiBzZXJpYWxudW1iZXIgc2VhcmNoIGRvZXNuJ3QgbWF0Y2gsIGV4Y2x1ZGUgZnJvbSBsaXN0XG4gICAgICAgICAgICAgICAgaWYoIXNlYXJjaFJlZ0V4LnRlc3QoaXRlbS5zZXJpYWxOdW1iZXIpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RlbGl2ZXJ5RGF0ZVN0YXJ0JzpcbiAgICAgICAgICAgICAgaWYodGhpcy5maWx0ZXJEYXRhLmRlbGl2ZXJ5RGF0ZVN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgZGVsaXZlcnlkYXRlIGlzIGJpZ2dlciB0aGFuIGZpbHRlcmVkIGVuZCBkYXRlLCBleGNsdWRlXG4gICAgICAgICAgICAgICAgaWYoIWl0ZW0uZGVsaXZlcnlEYXRlIHx8ICh0aGlzLmZpbHRlckRhdGEuZGVsaXZlcnlEYXRlU3RhcnQgJiYgaXRlbS5kZWxpdmVyeURhdGUgPCB0aGlzLmZpbHRlckRhdGEuZGVsaXZlcnlEYXRlU3RhcnQpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RlbGl2ZXJ5RGF0ZUVuZCc6XG4gICAgICAgICAgICAgIGlmKHRoaXMuZmlsdGVyRGF0YS5kZWxpdmVyeURhdGVFbmQpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBkZWxpdmVyeWRhdGUgaXMgYmlnZ2VyIHRoYW4gZmlsdGVyZWQgZW5kIGRhdGUsIGV4Y2x1ZGVcbiAgICAgICAgICAgICAgICBpZiggIWl0ZW0uZGVsaXZlcnlEYXRlIHx8ICh0aGlzLmZpbHRlckRhdGEuZGVsaXZlcnlEYXRlRW5kICYmIGl0ZW0uZGVsaXZlcnlEYXRlID4gdGhpcy5maWx0ZXJEYXRhLmRlbGl2ZXJ5RGF0ZUVuZCkgKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RhdGVBZGRlZFN0YXJ0JzpcbiAgICAgICAgICAgICAgaWYodGhpcy5maWx0ZXJEYXRhLmRhdGVBZGRlZFN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgZGVsaXZlcnlkYXRlIGlzIGJpZ2dlciB0aGFuIGZpbHRlcmVkIGVuZCBkYXRlLCBleGNsdWRlXG4gICAgICAgICAgICAgICAgaWYoIWl0ZW0uZGF0ZUFkZGVkIHx8ICh0aGlzLmZpbHRlckRhdGEuZGF0ZUFkZGVkU3RhcnQgJiYgaXRlbS5kYXRlQWRkZWQgPCB0aGlzLmZpbHRlckRhdGEuZGF0ZUFkZGVkU3RhcnQpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RhdGVBZGRlZEVuZCc6XG4gICAgICAgICAgICAgIGlmKHRoaXMuZmlsdGVyRGF0YS5kYXRlQWRkZWRFbmQpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBkZWxpdmVyeWRhdGUgaXMgYmlnZ2VyIHRoYW4gZmlsdGVyZWQgZW5kIGRhdGUsIGV4Y2x1ZGVcbiAgICAgICAgICAgICAgICBpZighaXRlbS5kYXRlQWRkZWQgfHwgKHRoaXMuZmlsdGVyRGF0YS5kYXRlQWRkZWRFbmQgJiYgaXRlbS5kYXRlQWRkZWQgPiB0aGlzLmZpbHRlckRhdGEuZGF0ZUFkZGVkRW5kKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdiYXNlTW9kZWwnOlxuICAgICAgICAgICAgICAvLyBJZiBiYXNlTW9kZWwgaXMgc2VsZWN0ZWQsIGV4Y2x1ZGUgb3RoZXIgYmFzZSBtb2RlbCBtYWNoaW5lc1xuICAgICAgICAgICAgICBpZih0aGlzLmZpbHRlckRhdGEuYmFzZU1vZGVsICYmIGl0ZW0ubWFjaGluZUJhc2VNb2RlbElkICE9PSB0aGlzLmZpbHRlckRhdGEuYmFzZU1vZGVsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2NvdW50cnknOlxuICAgICAgICAgICAgICAvLyBJZiBjb3VudHJ5IGlzIHNlbGVjdGVkLCBleGNsdWRlIG90aGVyIGNvdW50cmllc1xuICAgICAgICAgICAgICBpZih0aGlzLmZpbHRlckRhdGEuY291bnRyeSAmJiBpdGVtLmNvdW50cnlDb2RlICE9PSB0aGlzLmZpbHRlckRhdGEuY291bnRyeSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgd2UgbWFkZSBpdCB0aGlzIGZhciwgYWRkIHRvIGxpc3RcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcblxuICAgIH0sXG4gICAgc2VsZWN0ZWRWYWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkO1xuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIC8vIEZvcm1hdCBkYXRhIGZvciBmaWx0ZXJzXG4gICAgZmlsdGVyc0NoYW5nZWQoZGF0YSkge1xuICAgICAgY29uc3QgZGF0ZUZvcm1hdCA9ICdZLU1NLUREJztcbiAgICAgIGNvbnN0IGZpbHRlckRhdGEgPSB7XG4gICAgICAgIHNlcmlhbE51bWJlcjogZGF0YS5zZXJpYWxOdW1iZXIsXG4gICAgICAgIGJhc2VNb2RlbDogIWRhdGEuYmFzZU1vZGVsID8gJycgOiBkYXRhLmJhc2VNb2RlbCxcbiAgICAgICAgY291bnRyeTogIWRhdGEuY291bnRyeSA/ICcnIDogZGF0YS5jb3VudHJ5LFxuICAgICAgICBkZWxpdmVyeURhdGVTdGFydDogJycsXG4gICAgICAgIGRlbGl2ZXJ5RGF0ZUVuZDogJycsXG4gICAgICAgIGRhdGVBZGRlZFN0YXJ0OiAnJyxcbiAgICAgICAgZGF0ZUFkZGVkRW5kOiAnJ1xuICAgICAgfTtcblxuICAgICAgaWYoZGF0YS5kZWxpdmVyeURhdGVTdGFydCkge1xuICAgICAgICBjb25zdCBkYXRlID0gbW9tZW50KGRhdGEuZGVsaXZlcnlEYXRlU3RhcnQpLmZvcm1hdChkYXRlRm9ybWF0KTtcbiAgICAgICAgZmlsdGVyRGF0YS5kZWxpdmVyeURhdGVTdGFydCA9IGRhdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWx0ZXJEYXRhLmRlbGl2ZXJ5RGF0ZVN0YXJ0ID0gJyc7XG4gICAgICB9XG5cbiAgICAgIGlmKGRhdGEuZGVsaXZlcnlEYXRlRW5kKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBtb21lbnQoZGF0YS5kZWxpdmVyeURhdGVFbmQpLmZvcm1hdChkYXRlRm9ybWF0KTtcbiAgICAgICAgZmlsdGVyRGF0YS5kZWxpdmVyeURhdGVFbmQgPSBkYXRlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlsdGVyRGF0YS5kZWxpdmVyeURhdGVFbmQgPSAnJztcbiAgICAgIH1cblxuICAgICAgaWYoZGF0YS5kYXRlQWRkZWRTdGFydCkge1xuICAgICAgICBjb25zdCBkYXRlID0gbW9tZW50KGRhdGEuZGF0ZUFkZGVkU3RhcnQpLmZvcm1hdChkYXRlRm9ybWF0KTtcbiAgICAgICAgZmlsdGVyRGF0YS5kYXRlQWRkZWRTdGFydCA9IGRhdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWx0ZXJEYXRhLmRhdGVBZGRlZFN0YXJ0ID0gJyc7XG4gICAgICB9XG5cbiAgICAgIGlmKGRhdGEuZGF0ZUFkZGVkRW5kKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBtb21lbnQoZGF0YS5kYXRlQWRkZWRFbmQpLmZvcm1hdChkYXRlRm9ybWF0KTtcbiAgICAgICAgZmlsdGVyRGF0YS5kYXRlQWRkZWRFbmQgPSBkYXRlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlsdGVyRGF0YS5kYXRlQWRkZWRFbmQgPSAnJztcbiAgICAgIH1cblxuICAgICAgdGhpcy51cGRhdGVGaWx0ZXJEYXRhKGZpbHRlckRhdGEpO1xuICAgICAgdGhpcy51cGRhdGVVcmwoKTtcbiAgICAgIHRoaXMuJHJlZnMudGFibGUuc2V0UGFnZSgxKTtcblxuICAgIH0sXG4gICAgdXBkYXRlRmlsdGVyRGF0YShkYXRhKSB7XG4gICAgICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIHRoaXMuZmlsdGVyRGF0YVtrZXldID0gZGF0YVtrZXldO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICB1cGRhdGVVcmwoKSB7XG4gICAgICBjb25zdCBhY3RpdmVGaWx0ZXJzID0ge307XG5cbiAgICAgIC8vIE9ubHkgaW5jbHVkZSBmaWx0ZXJzIHdpdGggdmFsdWVzXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmZpbHRlckRhdGEpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmZpbHRlckRhdGFba2V5XTtcbiAgICAgICAgaWYodmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgYWN0aXZlRmlsdGVyc1trZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZih0aGlzLmZpbHRlcmluZ0VuYWJsZWQpIHtcbiAgICAgICAgaWYoT2JqZWN0LmtleXMoYWN0aXZlRmlsdGVycykubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2Uoe3F1ZXJ5OiB7IGZpbHRlcnM6IHF1ZXJ5U3RyaW5nLnN0cmluZ2lmeShhY3RpdmVGaWx0ZXJzKSB9fSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8uY2F0Y2ggZXJyb3IgZW1wdHlpbmcgaXMgZHVlIHZ1ZS1yb3V0ZXIgY29yZSBjaGFuZ2VzLlxuICAgICAgICAgIC8vIHByZXZlbnRzIGZhdWx0eSBlcnJvciBcIk5hdmlnYXRpb25EdXBsaWNhdGVkIE5hdmlnYXRpbmcgdG8gY3VycmVudCBsb2NhdGlvbiAo4oCcL+KAnCkgaXMgbm90IGFsbG93ZWRcIlxuICAgICAgICAgIC8vIFNlZSAtPiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81NzgzNzc1OC9uYXZpZ2F0aW9uZHVwbGljYXRlZC1uYXZpZ2F0aW5nLXRvLWN1cnJlbnQtbG9jYXRpb24tc2VhcmNoLWlzLW5vdC1hbGxvd2VkXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2Uoe3F1ZXJ5OiB7fX0pLmNhdGNoKGVyciA9PiB7fSk7XG4gICAgICAgIH07XG5cbiAgICAgIH1cbiAgICB9LFxuICAgIHNob3dTZWFyY2goKXtcbiAgICAgICQoJy5zaWRlYmFyU2VhcmNoJykudG9nZ2xlQ2xhc3MoJ3Nob3ctc2VhcmNoJyk7XG4gICAgfVxuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgLy8gQ2hlY2sgaWYgd2UncmUgbG9hZGluZyB0aGlzIHZpZXcgd2l0aCBhY3RpdmUgZmlsdGVyc1xuICAgIGNvbnN0IGZpbHRlcnNTZXJpYWxpemVkID0gdGhpcy4kcm91dGUucXVlcnkuZmlsdGVycztcblxuICAgIGlmKGZpbHRlcnNTZXJpYWxpemVkKSB7XG4gICAgICBjb25zdCBmaWx0ZXJzID0gcXVlcnlTdHJpbmcucGFyc2UoZmlsdGVyc1NlcmlhbGl6ZWQpO1xuICAgICAgaWYoZmlsdGVycykge1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbHRlckRhdGEoZmlsdGVycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5maWx0ZXJpbmdFbmFibGVkID0gdHJ1ZTtcblxuICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdnZXRDdXN0b21lck1hY2hpbmVzJywgdGhpcy4kc3RvcmUuc3RhdGUudXNlci5jb21wYW55LmlkKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICQoJy5zcGlubmVyJykuaGlkZSgpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLiRzdG9yZS5jb21taXQoJ3NldFN1YmhlYWRlcicsIHtcbiAgICAgIHN1YnRpdGxlOiAnJyxcbiAgICAgIHRpdGxlOiB0aGlzLmxvYygnY29tcG9uZW50cy5jdXN0b21lck1hY2hpbmVzLnN1YmhlYWRlclRpdGxlJyksXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5sb2MoJ2NvbXBvbmVudHMuY3VzdG9tZXJNYWNoaW5lcy5zdWJoZWFkZXJEZXNjcmlwdGlvbicpLFxuICAgICAgc2VhcmNoRW5hYmxlZDogZmFsc2VcbiAgICB9KTtcblxuICAgIGlmKCQod2luZG93KS53aWR0aCgpIDw9IDc2OCl7XG4gICAgICAkKCcuc2hvdy1zZWFyY2gtYnV0dG9uJylcbiAgICAgIC5jbG9zZXN0KCcub3JkZXItMScpXG4gICAgICAuYWRkQ2xhc3MoJ3NlYXJjaC1idXR0b24tcGFyZW50LW1vYmlsZScpO1xuICAgIH1cblxuICAgICQoIHdpbmRvdyApLnJlc2l6ZShmdW5jdGlvbigpIHtcbiAgICAgIGlmKCQod2luZG93KS53aWR0aCgpIDw9IDc2OCl7XG4gICAgICAgICQoJy5zaG93LXNlYXJjaC1idXR0b24nKVxuICAgICAgICAuY2xvc2VzdCgnLm9yZGVyLTEnKVxuICAgICAgICAuYWRkQ2xhc3MoJ3NlYXJjaC1idXR0b24tcGFyZW50LW1vYmlsZScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJCgnLnNob3ctc2VhcmNoLWJ1dHRvbicpXG4gICAgICAgIC5jbG9zZXN0KCcub3JkZXItMScpXG4gICAgICAgIC5yZW1vdmVDbGFzcygnc2VhcmNoLWJ1dHRvbi1wYXJlbnQtbW9iaWxlJyk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXY+XG4gICAgPGRpdiB2LWlmPVwiYWNjb3VudFVwZGF0ZWRcIj5cbiAgICAgIDxoMiB2LWh0bWw9XCJsb2MoJ2NvbXBvbmVudHMuZWRpdEFjY291bnQuYWNjb3VudFVwZGF0ZWQnKVwiPjwvaDI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiB2LWVsc2U+XG4gICAgICA8di1mb3JtIDpmaWVsZHM9XCJmaWVsZHNcIiA6Zm9ybS1kYXRhPVwiZm9ybURhdGFcIiA6Zm9ybS1lcnJvcnM9XCJmb3JtRXJyb3JzXCI+XG4gICAgICAgIDxkaXYgc2xvdD1cImJ1dHRvbnNcIiBjbGFzcz1cInYtZm9ybS1idXR0b24tZGl2XCI+XG4gICAgICAgICAgPGJ1dHRvbiA6ZGlzYWJsZWQ9XCJzZW5kRGlzYWJsZWRcIiB2LW9uOmNsaWNrPVwidXBkYXRlXCIgdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi0td2hpdGVcIj57e2xvYygndXBkYXRlSW5mb3JtYXRpb24nKX19PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC92LWZvcm0+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuaW1wb3J0IFZGb3JtIGZyb20gJy4vdi1mb3JtLnZ1ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czoge1xuICAgICd2LWZvcm0nOiBWRm9ybVxuICB9LFxuICBuYW1lOiAnVmlld0VkaXRBY2NvdW50JyxcbiAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBmb3JtRXJyb3JzOiB7fSxcbiAgICAgIGZvcm1EYXRhOiB7fSxcbiAgICAgIGFjY291bnRVcGRhdGVkOiBmYWxzZSxcbiAgICAgIHNlbmREaXNhYmxlZDogZmFsc2VcbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgZmllbGRzKCkge1xuICAgICAgaWYodGhpcy4kc3RvcmUuZ2V0dGVycy5jb3VudHJ5U2VsZWN0T3B0aW9ucykge1xuICAgICAgICByZXR1cm4gW3tcbiAgICAgICAgICBuYW1lOiAnaWQnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmluZm8uaWQsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdmaXJzdE5hbWUnKSxcbiAgICAgICAgICB0eXBlOiAnaGlkZGVuJ1xuICAgICAgICB9LCB7XG4gICAgICAgICAgbmFtZTogJ3JvbGUnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLnJvbGUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdyb2xlJyksXG4gICAgICAgICAgdHlwZTogJ2hpZGRlbidcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdmaXJzdE5hbWUnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmluZm8uZmlyc3ROYW1lLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnZmlyc3ROYW1lJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAnbGFzdE5hbWUnLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmluZm8ubGFzdE5hbWUsXG4gICAgICAgICAgbGFiZWw6IHRoaXMubG9jKCdsYXN0TmFtZScpLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgfSwge1xuICAgICAgICAgIG5hbWU6ICdwaG9uZScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuJHN0b3JlLnN0YXRlLnVzZXIuaW5mby5waG9uZSxcbiAgICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ3Bob25lJyksXG4gICAgICAgICAgdHlwZTogJ3RleHQnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBuYW1lOiAnY291bnRyeScsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuJHN0b3JlLnN0YXRlLnVzZXIuaW5mby5jb3VudHJ5ICYmIHRoaXMuJHN0b3JlLnN0YXRlLnVzZXIuaW5mby5jb3VudHJ5LmNvdW50cnlDb2RlIHx8ICcnLCAvLyBVc2VyIGN1cnJlbnQgdXNlciBjb3VudHJ5IGFzIGEgZGVmYXVsdFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmxvYygnY291bnRyeScpLFxuICAgICAgICAgIG9wdGlvbnM6IHRoaXMuJHN0b3JlLmdldHRlcnMuY291bnRyeVNlbGVjdE9wdGlvbnMsXG4gICAgICAgICAgdHlwZTogJ3NlbGVjdCdcbiAgICAgICAgfV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbXTtcbiAgICB9LFxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgYXN5bmMgdXBkYXRlKCkge1xuICAgICAgdGhpcy5zZW5kRGlzYWJsZWQgPSB0cnVlO1xuXG4gICAgICByZXR1cm4gdGhpcy4kYXBpLnVwZGF0ZVVzZXIodGhpcy5mb3JtRGF0YS5pZCwgdGhpcy5mb3JtRGF0YSkudGhlbihyZXMgPT4ge1xuICAgICAgICB0aGlzLnNlbmREaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIEVycm9ycyBpbiBmb3JtXG4gICAgICAgIGlmKHJlcy5jb2RlID09PSA0MDApIHtcbiAgICAgICAgICB0aGlzLmZvcm1FcnJvcnMgPSByZXMucmVzdWx0LmZpZWxkcztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHJlcy5jb2RlID09PSAyMDApIHtcbiAgICAgICAgICB0aGlzLiRzdG9yZS5jb21taXQoJ3NldEN1cnJlbnRVc2VyJywgcmVzLnJlc3VsdC51c2VyKTtcbiAgICAgICAgICB0aGlzLmFjY291bnRVcGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB9XG4gIH0sXG4gIG1vdW50ZWQgKCkge1xuICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdnZXRDb3VudHJpZXMnKTtcbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXY+XG4gICAgPGRpdiB2LWlmPVwicGFzc3dvcmRTZW50XCI+XG4gICAgICB7e2xvYygnY29tcG9uZW50cy5mb3Jnb3R0ZW5QYXNzd29yZC5wYXNzd29yZFNlbnQnKX19XG4gICAgPC9kaXY+XG4gICAgPGRpdiB2LWVsc2U+XG4gICAgICA8di1mb3JtIDpmaWVsZHM9XCJmaWVsZHNcIiA6Zm9ybS1kYXRhPVwiZm9ybURhdGFcIiA6Zm9ybS1lcnJvcnM9XCJmb3JtRXJyb3JzXCI+XG4gICAgICAgIDxkaXYgc2xvdD1cImJ1dHRvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uIDpkaXNhYmxlZD1cInNlbmREaXNhYmxlZFwiIHR5cGU9XCJzdWJtaXRcIiB2LW9uOmNsaWNrPVwic2VuZFwiIGNsYXNzPVwiYnRuIGJ0bi0td2hpdGVcIj57e2xvYygnb3JkZXJOZXdQYXNzd29yZCcpfX08L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3YtZm9ybT5cblxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmltcG9ydCBWRm9ybSBmcm9tICcuL3YtZm9ybS52dWUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHtcbiAgICAndi1mb3JtJzogVkZvcm1cbiAgfSxcbiAgbmFtZTogJ1ZpZXdGb3Jnb3RQYXNzd29yZCcsXG4gIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9ybUVycm9yczoge30sXG4gICAgICBmb3JtRGF0YToge30sXG4gICAgICBwYXNzd29yZFNlbnQ6IGZhbHNlLFxuICAgICAgdG9rZW46IG51bGwsXG4gICAgICBzZW5kRGlzYWJsZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIGZpZWxkcygpIHtcbiAgICAgIHJldHVybiBbe1xuICAgICAgICBuYW1lOiAndG9rZW4nLFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIGxhYmVsOiB0aGlzLmxvYygndG9rZW4nKSxcbiAgICAgICAgdHlwZTogJ2hpZGRlbidcbiAgICAgIH0sIHtcbiAgICAgICAgbmFtZTogJ3VzZXJuYW1lJyxcbiAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ3VzZXJuYW1lJyksXG4gICAgICAgIHR5cGU6ICd0ZXh0J1xuICAgICAgfV07XG4gICAgfSxcbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGFzeW5jIHNlbmQoKSB7XG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgICAgdGhpcy5zZW5kRGlzYWJsZWQgPSB0cnVlO1xuXG4gICAgICBpZighdGhpcy50b2tlbikge1xuICAgICAgICBjb25zdCB0b2tlblJlcyA9IGF3YWl0IHRoaXMuJGFwaS5nZXRUb2tlbigpO1xuICAgICAgICBpZih0b2tlblJlcy5jb2RlID09PSAyMDApIHtcbiAgICAgICAgICB0aGlzLnRva2VuID0gdG9rZW5SZXMucmVzdWx0LnRva2VuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLiRhcGkuZm9yZ290UGFzc3dvcmQoe1xuICAgICAgICB0b2tlbjogdGhpcy50b2tlbixcbiAgICAgICAgdXNlcm5hbWU6IHRoaXMuZm9ybURhdGEudXNlcm5hbWVcbiAgICAgIH0pXG4gICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICB0aGlzLnNlbmREaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRva2VuID0gJyc7XG5cbiAgICAgICAgLy8gRXJyb3JzIGluIGZvcm1cbiAgICAgICAgaWYocmVzLmNvZGUgPT09IDQwMCkge1xuICAgICAgICAgIHRoaXMuZm9ybUVycm9ycyA9IHJlcy5yZXN1bHQuZmllbGRzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYocmVzLmNvZGUgPT09IDIwMCkge1xuICAgICAgICAgIHRoaXMucGFzc3dvcmRTZW50ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy4kYXBpLmdldFRva2VuKCkudGhlbihyZXMgPT4ge1xuICAgICAgaWYocmVzLmNvZGUgPT09IDIwMCkge1xuICAgICAgICB0aGlzLnRva2VuID0gcmVzLnJlc3VsdC50b2tlbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLiRzdG9yZS5jb21taXQoJ3NldFN1YmhlYWRlcicsIHtcbiAgICAgIHN1YnRpdGxlOiAnJyxcbiAgICAgIHRpdGxlOiB0aGlzLmxvYygnY29tcG9uZW50cy5mb3Jnb3R0ZW5QYXNzd29yZC5zdWJoZWFkZXJUaXRsZScpLFxuICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgc2VhcmNoRW5hYmxlZDogZmFsc2VcbiAgICB9KTtcbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXY+XG4gICAgPHAgdi1pZj1cImludmFsaWRUb2tlblwiIHYtaHRtbD1cImxvYygnY29tcG9uZW50cy51cGRhdGVQYXNzd29yZC50b2tlbkV4cGlyZWQnKVwiPjwvcD5cbiAgICA8ZGl2IHYtZWxzZT5cbiAgICAgIDxkaXYgdi1pZj1cInBhc3N3b3JkVXBkYXRlZFwiPlxuICAgICAgICA8cCB2LWh0bWw9XCJsb2MoJ2NvbXBvbmVudHMudXBkYXRlUGFzc3dvcmQucGFzc3dvcmRVcGRhdGVkJylcIj48L3A+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgdi1lbHNlPlxuICAgICAgICA8di1mb3JtIDpmaWVsZHM9XCJmaWVsZHNcIiA6Zm9ybS1kYXRhPVwiZm9ybURhdGFcIiA6Zm9ybS1lcnJvcnM9XCJmb3JtRXJyb3JzXCI+XG4gICAgICAgICAgPGRpdiBzbG90PVwiYnV0dG9uc1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiA6ZGlzYWJsZWQ9XCJzZW5kRGlzYWJsZWRcIiB0eXBlPVwic3VibWl0XCIgdi1vbjpjbGljaz1cInNlbmRcIiBjbGFzcz1cImJ0biBidG4tLXdoaXRlXCI+e3tsb2MoJ3VwZGF0ZVBhc3N3b3JkJyl9fTwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3YtZm9ybT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmltcG9ydCBWRm9ybSBmcm9tICcuL3YtZm9ybS52dWUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHtcbiAgICAndi1mb3JtJzogVkZvcm1cbiAgfSxcbiAgbmFtZTogJ1ZpZXdGb3Jnb3RQYXNzd29yZCcsXG4gIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9ybUVycm9yczoge30sXG4gICAgICBmb3JtRGF0YToge30sXG4gICAgICBwYXNzd29yZFVwZGF0ZWQ6IGZhbHNlLFxuICAgICAgdG9rZW46IG51bGwsXG4gICAgICBzZW5kRGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgcmVzZXRUb2tlbjogJycsXG4gICAgICB0b2tlbkV4cGlyZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIGludmFsaWRUb2tlbigpIHtcbiAgICAgIHJldHVybiAhdGhpcy5yZXNldFRva2VuIHx8wqB0aGlzLnRva2VuRXhwaXJlZDtcbiAgICB9LFxuICAgIGZpZWxkcygpIHtcbiAgICAgIHJldHVybiBbe1xuICAgICAgICBuYW1lOiAndG9rZW4nLFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIGxhYmVsOiB0aGlzLnJlc2V0VG9rZW4sXG4gICAgICAgIHR5cGU6ICdoaWRkZW4nXG4gICAgICB9LCB7XG4gICAgICAgIG5hbWU6ICduZXdQYXNzd29yZCcsXG4gICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgbGFiZWw6IHRoaXMubG9jKCduZXdQYXNzd29yZCcpLFxuICAgICAgICB0eXBlOiAncGFzc3dvcmQtc3RyZW5ndGgnLFxuICAgICAgfSwge1xuICAgICAgICBuYW1lOiAnbmV3UGFzc3dvcmRDb25maXJtJyxcbiAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICBsYWJlbDogdGhpcy5sb2MoJ25ld1Bhc3N3b3JkQWdhaW4nKSxcbiAgICAgICAgdHlwZTogJ3Bhc3N3b3JkJ1xuICAgICAgfV07XG4gICAgfSxcbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGFzeW5jIHNlbmQoKSB7XG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgICAgdGhpcy5zZW5kRGlzYWJsZWQgPSB0cnVlO1xuXG4gICAgICByZXR1cm4gdGhpcy4kYXBpLmNoYW5nZVBhc3N3b3JkKHtcbiAgICAgICAgdG9rZW46IHRoaXMucmVzZXRUb2tlbixcbiAgICAgICAgbmV3UGFzc3dvcmQ6IHRoaXMuZm9ybURhdGEubmV3UGFzc3dvcmQsXG4gICAgICAgIG5ld1Bhc3N3b3JkQ29uZmlybTogdGhpcy5mb3JtRGF0YS5uZXdQYXNzd29yZENvbmZpcm1cbiAgICAgIH0pXG4gICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICB0aGlzLnNlbmREaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgICAgIC8vIEVycm9ycyBpbiBmb3JtXG4gICAgICAgIGlmKHJlcy5jb2RlID09PSA0MDApIHtcbiAgICAgICAgICB0aGlzLmZvcm1FcnJvcnMgPSByZXMucmVzdWx0LmZpZWxkcztcblxuICAgICAgICAgIGlmKHJlcy5yZXN1bHQuZmllbGRzLnRva2VuKSB7XG4gICAgICAgICAgICB0aGlzLnRva2VuRXhwaXJlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYocmVzLmNvZGUgPT09IDIwMCkge1xuICAgICAgICAgIHRoaXMucGFzc3dvcmRVcGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5yZXNldFRva2VuID0gdGhpcy4kcm91dGUucXVlcnkucmVzZXRUb2tlbjtcbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDx0aGUtc2lkZWJhci1sYXlvdXQ+XG4gICAgPGRpdiBjbGFzcz1cInVzZXItc2V0dGluZ3Mtc2lkZWJhclwiIHNsb3Q9XCJzaWRlYmFyXCI+XG4gICAgICA8cm91dGVyLWxpbmsgY2xhc3M9XCJ2LXJvdXRlci1saW5rXCIgOnRvPVwieyBuYW1lOiAnY2hhbmdlLXBhc3N3b3JkJ31cIj57e2xvYygnY2hhbmdlUGFzc3dvcmQnKX19PC9yb3V0ZXItbGluaz48YnI+XG4gICAgICA8cm91dGVyLWxpbmsgY2xhc3M9XCJ2LXJvdXRlci1saW5rXCIgOnRvPVwieyBuYW1lOiAnZWRpdC1hY2NvdW50J31cIj57e2xvYygnZWRpdEFjY291bnRJbmZvcm1hdGlvbicpfX08L3JvdXRlci1saW5rPlxuICAgIDwvZGl2PlxuICAgIDxyb3V0ZXItdmlldz48L3JvdXRlci12aWV3PlxuICA8L3RoZS1zaWRlYmFyLWxheW91dD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ1ZpZXdVc2VyU2V0dGluZ3MnLFxuICBkYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnc2V0U3ViaGVhZGVyJywge1xuICAgICAgc3VidGl0bGU6ICcnLFxuICAgICAgdGl0bGU6ICcnLFxuICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgc2VhcmNoRW5hYmxlZDogZmFsc2VcbiAgICB9KTtcbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cbjwvc3R5bGU+XG4iLCJcbjx0ZW1wbGF0ZT5cbiAgPHRoZS0xLWNvbHVtbi1sYXlvdXQgdi1pZj1cIndhcnJhbnR5UmVnaXN0cmF0aW9uXCI+XG4gICAgPGgyPlxuICAgICAge3tsb2MoJ3dhcnJhbnR5UmVnaXN0cmF0aW9uJyl9fVxuICAgICAgPHNwYW4gc3R5bGU9XCJmb250LXNpemU6IDE4cHg7IGZvbnQtd2VpZ2h0OiA0MDA7IGNvbG9yOiByZ2IoMTMwLCAxMzAsIDEzMCk7XCI+XG4gICAgICAgICh7e3dhcnJhbnR5UmVnaXN0cmF0aW9uLnV1aWR9fSlcbiAgICAgIDwvc3Bhbj5cbiAgICA8L2gyPlxuXG4gICAgPGgzPnt7bG9jKCdtYWNoaW5lSW5mb3JtYXRpb24nKX19PC9oMz48aHI+XG4gICAgPHA+XG4gICAgICA8c3Ryb25nPnt7bG9jKCdzZXJpYWxOdW1iZXInKX19PC9zdHJvbmc+OiB7e3dhcnJhbnR5UmVnaXN0cmF0aW9uLnNlcmlhbE51bWJlcn19PGJyIC8+XG4gICAgICA8c3Ryb25nPnt7bG9jKCdtYWNoaW5lTW9kZWwnKX19PC9zdHJvbmc+OiB7e3dhcnJhbnR5UmVnaXN0cmF0aW9uLm1hY2hpbmV9fTxiciAvPlxuICAgICAgPHN0cm9uZz57e2xvYygnZGVsaXZlcnlEYXRlU29sZCcpfX08L3N0cm9uZz46IHt7d2FycmFudHlSZWdpc3RyYXRpb24uZGVsaXZlcnlEYXRlRm9ybWF0dGVkfX08YnIgLz5cbiAgICA8L3A+XG5cbiAgICA8aDM+e3tsb2MoJ2N1c3RvbWVySW5mb3JtYXRpb24nKX19PC9oMz4gPGhyPlxuICAgIDxwPlxuICAgICAgPHN0cm9uZz57e2xvYygnZmlyc3ROYW1lJyl9fTwvc3Ryb25nPjoge3t3YXJyYW50eVJlZ2lzdHJhdGlvbi5jdXN0b21lckZpcnN0bmFtZX19PGJyIC8+XG4gICAgICA8c3Ryb25nPnt7bG9jKCdsYXN0TmFtZScpfX08L3N0cm9uZz46IHt7d2FycmFudHlSZWdpc3RyYXRpb24uY3VzdG9tZXJMYXN0bmFtZX19PGJyIC8+XG4gICAgICA8c3BhbiB2LWlmPVwid2FycmFudHlSZWdpc3RyYXRpb24uY3VzdG9tZXJDb21wYW55XCI+PHN0cm9uZz57e2xvYygnY3VzdG9tZXJDb21wYW55Jyl9fTwvc3Ryb25nPjoge3t3YXJyYW50eVJlZ2lzdHJhdGlvbi5jdXN0b21lckNvbXBhbnl9fTxiciAvPjwvc3Bhbj5cbiAgICAgIDxzdHJvbmc+e3tsb2MoJ2VtYWlsJyl9fTwvc3Ryb25nPjoge3t3YXJyYW50eVJlZ2lzdHJhdGlvbi5jdXN0b21lckVtYWlsfX08YnIgLz5cbiAgICAgIDxzcGFuIHYtaWY9XCJ3YXJyYW50eVJlZ2lzdHJhdGlvbi5jdXN0b21lclBob25lXCI+PHN0cm9uZz57e2xvYygncGhvbmUnKX19PC9zdHJvbmc+OiB7e3dhcnJhbnR5UmVnaXN0cmF0aW9uLmN1c3RvbWVyUGhvbmV9fTxiciAvPjwvc3Bhbj5cbiAgICAgIDxzcGFuIHYtaWY9XCJ3YXJyYW50eVJlZ2lzdHJhdGlvbi5jdXN0b21lckFkZHJlc3NcIj48c3Ryb25nPnt7bG9jKCdhZGRyZXNzJyl9fTwvc3Ryb25nPjoge3t3YXJyYW50eVJlZ2lzdHJhdGlvbi5jdXN0b21lckFkZHJlc3N9fTxiciAvPjwvc3Bhbj5cbiAgICAgIDxzcGFuIHYtaWY9XCJ3YXJyYW50eVJlZ2lzdHJhdGlvbi5jdXN0b21lclBvc3RhbENvZGVcIj48c3Ryb25nPnt7bG9jKCdwb3N0YWxDb2RlJyl9fTwvc3Ryb25nPjoge3t3YXJyYW50eVJlZ2lzdHJhdGlvbi5jdXN0b21lclBvc3RhbENvZGV9fTxiciAvPjwvc3Bhbj5cbiAgICAgIDxzcGFuIHYtaWY9XCJ3YXJyYW50eVJlZ2lzdHJhdGlvbi5jdXN0b21lclBvc3RhbEFyZWFcIj48c3Ryb25nPnt7bG9jKCdwb3N0YWxBcmVhJyl9fTwvc3Ryb25nPjoge3t3YXJyYW50eVJlZ2lzdHJhdGlvbi5jdXN0b21lclBvc3RhbEFyZWF9fTxiciAvPjwvc3Bhbj5cbiAgICA8L3A+XG5cbiAgICA8aDM+e3tsb2MoJ3NlbGxlckluZm9ybWF0aW9uJyl9fTwvaDM+IDxocj5cbiAgICA8cD5cbiAgICAgIDxzdHJvbmc+e3tsb2MoJ2ZpcnN0TmFtZScpfX08L3N0cm9uZz46IHt7d2FycmFudHlSZWdpc3RyYXRpb24uc2VsbGVyRmlyc3RuYW1lfX08YnIgLz5cbiAgICAgIDxzdHJvbmc+e3tsb2MoJ2xhc3ROYW1lJyl9fTwvc3Ryb25nPjoge3t3YXJyYW50eVJlZ2lzdHJhdGlvbi5zZWxsZXJMYXN0bmFtZX19PGJyIC8+XG4gICAgICA8c3Ryb25nPnt7bG9jKCdlbWFpbCcpfX08L3N0cm9uZz46IHt7d2FycmFudHlSZWdpc3RyYXRpb24uc2VsbGVyRW1haWx9fTxiciAvPlxuICAgICAgPHN0cm9uZz57e2xvYygnc3RvcmUnKX19PC9zdHJvbmc+OiB7e3dhcnJhbnR5UmVnaXN0cmF0aW9uLnNlbGxlclN0b3JlfX08YnIgLz5cbiAgICAgIDxzcGFuIHYtaWY9XCJ3YXJyYW50eVJlZ2lzdHJhdGlvbi5zZWxsZXJCdXNpbmVzc0lkXCI+PHN0cm9uZz57e2xvYygnYnVzaW5lc3NJZCcpfX08L3N0cm9uZz46IHt7d2FycmFudHlSZWdpc3RyYXRpb24uc2VsbGVyQnVzaW5lc3NJZH19PGJyIC8+PC9zcGFuPlxuICAgICAgPHNwYW4gdi1pZj1cIndhcnJhbnR5UmVnaXN0cmF0aW9uLnNlbGxlclN0cmVldEFkZHJlc3NcIj48c3Ryb25nPnt7bG9jKCdhZGRyZXNzJyl9fTwvc3Ryb25nPjoge3t3YXJyYW50eVJlZ2lzdHJhdGlvbi5zZWxsZXJTdHJlZXRBZGRyZXNzfX08YnIgLz48L3NwYW4+XG4gICAgICA8c3BhbiB2LWlmPVwid2FycmFudHlSZWdpc3RyYXRpb24uc2VsbGVyUG9zdGFsQ29kZVwiPjxzdHJvbmc+e3tsb2MoJ3Bvc3RhbENvZGUnKX19PC9zdHJvbmc+OiB7e3dhcnJhbnR5UmVnaXN0cmF0aW9uLnNlbGxlclBvc3RhbENvZGV9fTxiciAvPjwvc3Bhbj5cbiAgICAgIDxzcGFuIHYtaWY9XCJ3YXJyYW50eVJlZ2lzdHJhdGlvbi5zZWxsZXJQb3N0YWxBcmVhXCI+PHN0cm9uZz57e2xvYygncG9zdE9mZmljZScpfX08L3N0cm9uZz46IHt7d2FycmFudHlSZWdpc3RyYXRpb24uc2VsbGVyUG9zdGFsQXJlYX19PGJyIC8+PC9zcGFuPlxuICAgIDwvcD5cblxuICAgIDxoMz57e2xvYygncmVjZWl2ZWRXYXJyYW50eURvY3VtZW50cycpfX08L2gzPjxocj5cbiAgICA8cD5cbiAgICAgIDxzdHJvbmc+e3tsb2MoJ2NvbXBvbmVudHMud2FycmFudHlSZWdpc3RyYXRpb25zLndhcnJhbnR5TWFudWFsJyl9fTwvc3Ryb25nPjoge3tsb2MoJ2Zvcm1zLnJhZGlvLnllcycpfX08YnIgLz5cbiAgICAgIDxzdHJvbmc+e3tsb2MoJ2NvbXBvbmVudHMud2FycmFudHlSZWdpc3RyYXRpb25zLmNlRURlY2xhcmF0aW9uJyl9fTwvc3Ryb25nPjoge3tsb2MoJ2Zvcm1zLnJhZGlvLnllcycpfX08YnIgLz5cbiAgICA8L3A+XG5cbiAgICA8aHI+XG4gICAgPHA+XG4gICAgICA8c3Ryb25nPnt7bG9jKCdjb21wb25lbnRzLndhcnJhbnR5UmVnaXN0cmF0aW9ucy5jb250YWN0QWxsb3dlZCcpfX08L3N0cm9uZz46IHt7bG9jKCdmb3Jtcy5yYWRpby55ZXMnKX19PGJyIC8+XG4gICAgPC9wPlxuICAgIDxwPlxuICAgICAgPHN0cm9uZz57e2xvYygnZ2RwckNvbnNlbnQnKX19PC9zdHJvbmc+OiB7e3dhcnJhbnR5UmVnaXN0cmF0aW9uLmdkcHJDb25zZW50VGV4dH19PGJyIC8+XG4gICAgPC9wPlxuXG4gICAgPHAgY2xhc3M9XCJkLXByaW50LW5vbmVcIj48YnIgLz48YSBocmVmPVwiI1wiIHYtb246Y2xpY2s9XCJwcmludFwiPnt7bG9jKCdwcmludERvY3VtZW50Jyl9fTwvYT48L3A+XG5cbiAgPC90aGUtMS1jb2x1bW4tbGF5b3V0PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnVmlld3dhcnJhbnR5UmVnaXN0cmF0aW9uJyxcbiAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICB3YXJyYW50eVJlZ2lzdHJhdGlvbklkOiBudWxsXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIHdhcnJhbnR5UmVnaXN0cmF0aW9uKCkge1xuICAgICAgbGV0IHdhcnJhbnR5UmVnaXN0cmF0aW9uRGF0YSA9IHRoaXMuJHN0b3JlLnN0YXRlLndhcnJhbnR5UmVnaXN0cmF0aW9ucy5maWx0ZXIod2FycmFudHlSZWdpc3RyYXRpb24gPT4gd2FycmFudHlSZWdpc3RyYXRpb24udXVpZCA9PT0gdGhpcy53YXJyYW50eVJlZ2lzdHJhdGlvbklkKVswXTtcblxuICAgICAgaWYod2FycmFudHlSZWdpc3RyYXRpb25EYXRhKXtcbiAgICAgICAgd2FycmFudHlSZWdpc3RyYXRpb25EYXRhLmdkcHJDb25zZW50VGV4dCA9IHdhcnJhbnR5UmVnaXN0cmF0aW9uRGF0YS5nZHByQ29uc2VudCA9PSAnMScgPyB0aGlzLmxvYygnZm9ybXMucmFkaW8ueWVzJykgOiB0aGlzLmxvYygnZm9ybXMucmFkaW8ubm8nKTtcblxuICAgICAgICB3YXJyYW50eVJlZ2lzdHJhdGlvbkRhdGEuZGVsaXZlcnlEYXRlRm9ybWF0dGVkID0gJyc7XG4gICAgICAgIGlmKHdhcnJhbnR5UmVnaXN0cmF0aW9uRGF0YS5kZWxpdmVyeURhdGUpe1xuICAgICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUod2FycmFudHlSZWdpc3RyYXRpb25EYXRhLmRlbGl2ZXJ5RGF0ZSk7XG5cbiAgICAgICAgICBsZXQgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcblxuICAgICAgICAgIGxldCBtb250aCA9IGRhdGUuZ2V0TW9udGgoKSArIDE7XG4gICAgICAgICAgICAgIG1vbnRoID0gbW9udGgudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgbW9udGggPSBtb250aC5sZW5ndGggPT0gMSA/ICcwJyttb250aCA6IG1vbnRoO1xuXG4gICAgICAgICAgbGV0IGRheSA9IGRhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICAgICAgICBkYXkgPSBkYXkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgZGF5ID0gZGF5Lmxlbmd0aCA9PSAxID8gJzAnK2RheSA6IGRheTtcblxuICAgICAgICAgIHdhcnJhbnR5UmVnaXN0cmF0aW9uRGF0YS5kZWxpdmVyeURhdGVGb3JtYXR0ZWQgPSBgJHt5ZWFyfS8ke21vbnRofS8ke2RheX1gO1xuICAgICAgICB9XG5cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHdhcnJhbnR5UmVnaXN0cmF0aW9uRGF0YTtcbiAgICB9LFxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgcHJpbnQoZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgd2luZG93LnByaW50KCk7XG4gICAgfVxuICB9LFxuICBtb3VudGVkKCkge1xuICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgcGFyYW0gL2NvbXBhbnkvOmlkIGFuZCB1c2UgdGhhdCBlbHNlIHVzZSBsb2dnZWQgaW4gdXNlcidzIGNvbXBhbnkgYXMgZGVmYXVsdFxuICAgIHRoaXMud2FycmFudHlSZWdpc3RyYXRpb25JZCA9IHRoaXMuJHJvdXRlLnBhcmFtcy5pZFxuXG4gICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ2dldFdhcnJhbnR5UmVnaXN0cmF0aW9uJywgdGhpcy53YXJyYW50eVJlZ2lzdHJhdGlvbklkKTtcblxuICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnc2V0U3ViaGVhZGVyJywge1xuICAgICAgc3VidGl0bGU6ICcnLFxuICAgICAgdGl0bGU6IHRoaXMubG9jKCdjb21wb25lbnRzLndhcnJhbnR5UmVnaXN0cmF0aW9ucy5zdWJoZWFkZXJUaXRsZScpLFxuICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgc2VhcmNoRW5hYmxlZDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgbGV0IHN1YmhlYWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2pzLXN1YmhlYWRlcicpO1xuICAgIGlmKHN1YmhlYWRlci5sZW5ndGgpIHtcbiAgICAgIHN1YmhlYWRlciA9IHN1YmhlYWRlclswXTtcbiAgICAgIHN1YmhlYWRlci5jbGFzc0xpc3QuYWRkKCdkLXByaW50LW5vbmUnKTtcbiAgICB9XG4gIH1cbn1cblxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDx0aGUtMS1jb2x1bW4tbGF5b3V0PlxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPjxidXR0b24gdi1vbjpjbGljaz1cImFkZFdhcnJhbnR5UmVnaXN0cmF0aW9uXCIgY2xhc3M9XCJidG4gYnRuLS13aGl0ZVwiPnt7bG9jKCdhZGRXYXJyYW50eVJlZ2lzdHJhdGlvbicpfX08L2J1dHRvbj48L2Rpdj48YnIgLz5cbiAgICA8di1jbGllbnQtdGFibGUgOmNvbHVtbnM9XCJjb2x1bW5zXCIgOmRhdGE9XCJmaWx0ZXJlZERhdGFcIiA6b3B0aW9ucz1cIm9wdGlvbnNcIj5cbiAgICAgIDxyb3V0ZXItbGluayBzbG90PVwidXVpZFwiIHNsb3Qtc2NvcGU9XCJwcm9wc1wiIDp0bz1cInsgbmFtZTogJ3dhcnJhbnR5LXJlZ2lzdHJhdGlvbicsIHBhcmFtczogeyBpZDogcHJvcHMucm93LnV1aWQgfX1cIj57e3Byb3BzLnJvdy51dWlkfX08L3JvdXRlci1saW5rPlxuICAgIDwvdi1jbGllbnQtdGFibGU+XG4gICAgPG1vZGFsLXdhcnJhbnR5LXJlZ2lzdHJhdGlvbiByZWY9XCJhZGRXYXJyYW50eVJlZ2lzdHJhdGlvbk1vZGFsXCIgOm1vZGFsLW1vZGU9XCInYWRkJ1wiPjwvbW9kYWwtd2FycmFudHktcmVnaXN0cmF0aW9uPlxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lclwiPjwvZGl2PlxuICAgIDwvZGl2PlxuICA8L3RoZS0xLWNvbHVtbi1sYXlvdXQ+XG48L3RlbXBsYXRlPlxuPHNjcmlwdD5cblxuaW1wb3J0IFZGb3JtIGZyb20gJy4vdi1mb3JtLnZ1ZSc7XG5pbXBvcnQgTW9kYWxXYXJyYW50eVJlZ2lzdHJhdGlvbiBmcm9tICcuL21vZGFsLXdhcnJhbnR5LXJlZ2lzdHJhdGlvbi52dWUnO1xuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnVmlld1dhcnJhbnR5UmVnaXN0cmF0aW9ucycsXG4gIGNvbXBvbmVudHM6IHtcbiAgICAnbW9kYWwtd2FycmFudHktcmVnaXN0cmF0aW9uJzogTW9kYWxXYXJyYW50eVJlZ2lzdHJhdGlvbixcbiAgICAndi1mb3JtJzogVkZvcm1cbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBmb3JtRGF0YToge30sXG4gICAgICBmb3JtRXJyb3JzOiB7fSxcbiAgICAgIHNlYXJjaFRleHQ6ICcnLFxuICAgICAgc2VhcmNoQ29sdW1uczogWyd1dWlkJywgJ3NlcmlhbE51bWJlcicsICdkYXRlQWRkZWQnLCAnc2VsbGVyU3RvcmUnLCAnY3VzdG9tZXJGaXJzdG5hbWUnLCAnY3VzdG9tZXJMYXN0bmFtZScsICdjdXN0b21lclBob25lJ10sXG4gICAgICBjb2x1bW5zOiBbJ3V1aWQnLCAnc2VyaWFsTnVtYmVyJywgJ2RhdGVBZGRlZCcsICdzZWxsZXJTdG9yZScsICdjdXN0b21lckZpcnN0bmFtZScsICdjdXN0b21lckxhc3RuYW1lJywgJ2N1c3RvbWVyUGhvbmUnXSxcbiAgICAgIHNvcnRhYmxlOiBbJ3V1aWQnLCAnc2VyaWFsTnVtYmVyJywgJ2RhdGVBZGRlZCcsICdzZWxsZXJTdG9yZSddLFxuICAgICAgZmlsdGVyYWJsZTogWyd1dWlkJywgJ3NlcmlhbE51bWJlcicsICdkYXRlQWRkZWQnLCAnc2VsbGVyU3RvcmUnXVxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBvcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmlsdGVyYWJsZTogZmFsc2UsXG4gICAgICAgIGhpZGRlbkNvbHVtbnM6IFsnY3VzdG9tZXJGaXJzdG5hbWUnLCAnY3VzdG9tZXJMYXN0bmFtZScsICdjdXN0b21lclBob25lJ10sXG4gICAgICAgIGhlYWRpbmdzOiB7XG4gICAgICAgICAgdXVpZDogdGhpcy5sb2MoJ3dhcnJhbnR5UmVnaXN0cmF0aW9uSWQnKSxcbiAgICAgICAgICBzZXJpYWxOdW1iZXI6IHRoaXMubG9jKCdzZXJpYWxOdW1iZXInKSxcbiAgICAgICAgICBkYXRlQWRkZWQ6IHRoaXMubG9jKCdkZWxpdmVyeURhdGVXYXJyYW50eScpLFxuICAgICAgICAgIHNlbGxlclN0b3JlOiB0aGlzLmxvYygncmVnaXN0ZXJlZEJ5JylcbiAgICAgICAgfSxcbiAgICAgICAgdGV4dHM6IHtcbiAgICAgICAgICAgIG5vUmVzdWx0czogdGhpcy5sb2MoJ25vTWF0Y2hpbmdSZXN1bHRzJylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB3YXJyYW50eVJlZ2lzdHJhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc3RvcmUuc3RhdGUud2FycmFudHlSZWdpc3RyYXRpb25zLm1hcCh3YXJyYW50eVJlZ2lzdHJhdGlvbiA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdXVpZDogd2FycmFudHlSZWdpc3RyYXRpb24udXVpZCxcbiAgICAgICAgICBzZXJpYWxOdW1iZXI6IHdhcnJhbnR5UmVnaXN0cmF0aW9uLnNlcmlhbE51bWJlcixcbiAgICAgICAgICBkYXRlQWRkZWQ6IHdhcnJhbnR5UmVnaXN0cmF0aW9uLmRhdGVBZGRlZCAmJiB3YXJyYW50eVJlZ2lzdHJhdGlvbi5kYXRlQWRkZWQuZm9ybWF0dGVkLFxuICAgICAgICAgIHNlbGxlclN0b3JlOiB3YXJyYW50eVJlZ2lzdHJhdGlvbi5zZWxsZXJTdG9yZSxcbiAgICAgICAgICBjdXN0b21lckZpcnN0bmFtZTogd2FycmFudHlSZWdpc3RyYXRpb24uY3VzdG9tZXJGaXJzdG5hbWUsXG4gICAgICAgICAgY3VzdG9tZXJMYXN0bmFtZTogd2FycmFudHlSZWdpc3RyYXRpb24uY3VzdG9tZXJMYXN0bmFtZSxcbiAgICAgICAgICBjdXN0b21lclBob25lOiB3YXJyYW50eVJlZ2lzdHJhdGlvbi5jdXN0b21lclBob25lXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBmaWx0ZXJlZERhdGEoKSB7XG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSB0aGlzLiRzdG9yZS5zdGF0ZS5zdWJoZWFkZXIuc2VhcmNoVGV4dDsgLy8gVXNlIHN1YmhlYWRlciBzZWFyY2ggaW5wdXQgZm9yIHNlYXJjaGluZ1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMud2FycmFudHlSZWdpc3RyYXRpb25zO1xuXG4gICAgICBpZihzZWFyY2hUZXh0KSB7XG4gICAgICAgIGNvbnN0IHNlYXJjaFJlZ0V4ID0gbmV3IFJlZ0V4cChzZWFyY2hUZXh0LCAnaScpXG5cbiAgICAgICAgcmV0dXJuIGRhdGEuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgZm9yKGxldCBpPTAsIGw9c2VsZi5zZWFyY2hDb2x1bW5zLmxlbmd0aDsgaTxsOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHNlbGYuc2VhcmNoQ29sdW1uc1tpXTtcblxuICAgICAgICAgICAgaWYoc2VhcmNoUmVnRXgudGVzdChpdGVtW2NvbHVtbl0pKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgYWRkV2FycmFudHlSZWdpc3RyYXRpb24oKSB7XG4gICAgICB0aGlzLiRyZWZzLmFkZFdhcnJhbnR5UmVnaXN0cmF0aW9uTW9kYWwuc2hvdygpO1xuICAgIH1cbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdnZXRXYXJyYW50eVJlZ2lzdHJhdGlvbnMnKVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgJCgnLnNwaW5uZXInKS5oaWRlKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLiRzdG9yZS5jb21taXQoJ3NldFN1YmhlYWRlcicsIHtcbiAgICAgIHN1YnRpdGxlOiAnJyxcbiAgICAgIHRpdGxlOiB0aGlzLmxvYygnY29tcG9uZW50cy53YXJyYW50eVJlZ2lzdHJhdGlvbnMuc3ViaGVhZGVyVGl0bGUnKSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIHNlYXJjaEVuYWJsZWQ6IHRydWVcbiAgICB9KTtcbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgVnVleCBmcm9tICd2dWV4J1xuaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5cbmltcG9ydCBBUEkgZnJvbSAnLi4vLi4vc2VydmljZXMvYXBpJztcbmltcG9ydCBkYXRhU2VydmljZSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLXNlcnZpY2UnO1xuXG5jb25zdCBhcGkgPSBuZXcgQVBJKCk7XG5cblZ1ZS51c2UoVnVleClcblxuXG5jb25zdCBzdGF0ZUhlbHBlciA9IHtcbiAgdXBkYXRlQXJyYXkocmVzLCBzdGF0ZUFycmF5LCBrZXkpIHtcblxuICAgIHJlcyA9IEFycmF5LmlzQXJyYXkocmVzKSA/IHJlcyA6IFtyZXNdOyAvLyBUdXJuIGludG8gYXJyYXksIHNvIHdlIGNhbiBoYW5kbGUgaXQgc2FtZSB3YXlcbiAgICBjb25zdCByZXNJZHMgPSB7fTtcbiAgICBjb25zdCBhZGRlZCA9IFtdO1xuXG4gICAgcmVzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICByZXNJZHNbaXRlbVtrZXldXSA9IGl0ZW07XG4gICAgfSk7XG5cbiAgICAvLyBJZiBhbHJlYWR5IGFkZGVkLCB1cGRhdGVcbiAgICBmb3IobGV0IGk9c3RhdGVBcnJheS5sZW5ndGgtMTsgaT49MDsgaS0tKSB7XG4gICAgICBpZihyZXNJZHNbc3RhdGVBcnJheVtpXVtrZXldXSkge1xuICAgICAgICBzdGF0ZUFycmF5LnNwbGljZShpLCAxLCByZXNJZHNbc3RhdGVBcnJheVtpXVtrZXldXSk7XG4gICAgICAgIGFkZGVkLnB1c2goc3RhdGVBcnJheVtpXVtrZXldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgbmV3IG9uZXNcbiAgICBpZihhZGRlZC5sZW5ndGggIT09IHJlcy5sZW5ndGgpIHtcbiAgICAgIHJlcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpZihhZGRlZC5pbmRleE9mKGl0ZW1ba2V5XSkgPT09IC0xKSB7XG4gICAgICAgICAgc3RhdGVBcnJheS5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIHJlbW92ZUZyb21BcnJheShpZCwgc3RhdGVBcnJheSwga2V5KSB7XG4gICAgZm9yKGxldCBpPXN0YXRlQXJyYXkubGVuZ3RoLTE7IGk+PTA7IGktLSkge1xuICAgICAgaWYoc3RhdGVBcnJheVtpXVtrZXldID09PSBpZCkge1xuICAgICAgICBzdGF0ZUFycmF5LnNwbGljZShpLCAxKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBzdG9yZSA9IG5ldyBWdWV4LlN0b3JlKHtcbiAgc3RyaWN0OiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nLFxuICBzdGF0ZToge1xuICAgIGxhbmd1YWdlOiAnJyxcbiAgICB1c2VyOiB7XG4gICAgICBpbmZvOiBudWxsLFxuICAgICAgY29tcGFueTogbnVsbCxcbiAgICAgIHJvbGU6IG51bGxcbiAgICB9LFxuICAgIHN1YmhlYWRlcjoge1xuICAgICAgdGl0bGU6ICcnLFxuICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgc2VhcmNoRW5hYmxlZDogZmFsc2UsXG4gICAgICBzZWFyY2hUZXh0OiAnJ1xuICAgIH0sXG4gICAgY3VzdG9tZXJNYWNoaW5lczogW10sXG4gICAgY3VzdG9tZXJNYWNoaW5lRGV0YWlsczogW10sXG4gICAgY29tcGFuaWVzOiBbXSxcbiAgICB1c2VyczogW10sIC8vIGNvbXBhbnkgaWQgYXMga2V5IGZvciBhbiBhcnJheSBvZiB1c2VyIG9iamVjdHNcbiAgICBjb21wbGFpbnRzOiBbXSxcbiAgICB3YXJyYW50eVJlZ2lzdHJhdGlvbnM6IFtdLFxuICAgIHdhcnJhbnRlZFNlcmlhbE51bWJlcnM6IFtdLFxuICAgIGxvZ2dlZEluOiBmYWxzZSxcbiAgICBuZWVkc0xvZ2dpbmdJbjogdHJ1ZSxcbiAgICBsb2NhbGl6YXRpb246IG51bGwsXG4gICAgcHJlbG9hZGluZzogdHJ1ZSxcbiAgICBjb3VudHJpZXM6IFtdLFxuICAgIHN1YmhlYWRlckZvdW5kOiBmYWxzZSxcbiAgICBzdWJoZWFkZXJTdWJ0aXRsZTogJycsXG4gICAgc3ViaGVhZGVyVGl0bGU6ICcnLFxuICAgIHN1YmhlYWRlckRlc2NyaXB0aW9uOiAnJyxcbiAgICBub3RpZmljYXRpb25zUXVldWU6IFtdLFxuICAgIG5vdGlmaWNhdGlvbnNNYXg6IDZcbiAgfSxcbiAgbXV0YXRpb25zOiB7XG4gICAgc2V0TGFuZ3VhZ2Uoc3RhdGUsIHJlcykge1xuICAgICAgc3RhdGUubGFuZ3VhZ2UgPSByZXM7XG4gICAgfSxcbiAgICBzZXRDdXJyZW50VXNlcihzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZS51c2VyLmluZm8gPSByZXM7XG4gICAgICBzdGF0ZS51c2VyLnJvbGUgPSByZXMucm9sZTtcbiAgICB9LFxuICAgIHNldEN1cnJlbnRVc2VyQ29tcGFueShzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZS51c2VyLmNvbXBhbnkgPSByZXM7XG4gICAgfSxcbiAgICBzZXRDdXJyZW50TWFjaGluZU93bmVyKHN0YXRlLCByZXMpIHtcbiAgICAgIHN0YXRlLm1hY2hpbmUuY3VzdG9tZXJOdW1iZXIgPSByZXMuY3VzdG9tZXJOdW1iZXI7XG4gICAgICBzdGF0ZS5tYWNoaW5lLmNvbXBhbnlOYW1lID0gcmVzLmNvbXBhbnlOYW1lO1xuICAgIH0sXG4gICAgc2V0TG9naW5TdGF0dXMoc3RhdGUsIHJlcykge1xuICAgICAgc3RhdGUubG9nZ2VkSW4gPSByZXM7XG4gICAgfSxcbiAgICBzZXROZWVkc0xvZ2dpbkluKHN0YXRlLCByZXMpIHtcbiAgICAgIHN0YXRlLm5lZWRzTG9nZ2luZ0luID0gcmVzO1xuICAgIH0sXG4gICAgc2V0TG9jYWxpemF0aW9uKHN0YXRlLCByZXMpIHtcbiAgICAgIHN0YXRlLmxvY2FsaXphdGlvbiA9IHJlcztcbiAgICB9LFxuICAgIHNldFByZWxvYWRpbmdTdGF0dXMoc3RhdGUsIHJlcykge1xuICAgICAgc3RhdGUucHJlbG9hZGluZyA9IHJlcztcbiAgICB9LFxuICAgIHNldENvbXBhbmllcyhzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZUhlbHBlci51cGRhdGVBcnJheShyZXMsIHN0YXRlLmNvbXBhbmllcywgJ2lkJyk7XG4gICAgfSxcbiAgICBzZXRDb21wYW55KHN0YXRlLCByZXMpIHtcbiAgICAgIHN0YXRlSGVscGVyLnVwZGF0ZUFycmF5KHJlcywgc3RhdGUuY29tcGFuaWVzLCAnaWQnKTtcbiAgICB9LFxuICAgIHNldENvdW50cmllcyhzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZS5jb3VudHJpZXMgPSByZXNcbiAgICB9LFxuICAgIHNldFN1YmhlYWRlckZvdW5kKHN0YXRlLCByZXMpIHtcbiAgICAgIHN0YXRlLnN1YmhlYWRlckZvdW5kID0gcmVzO1xuICAgIH0sXG4gICAgc2V0U3ViaGVhZGVyKHN0YXRlLCByZXMpIHtcbiAgICAgIHN0YXRlLnN1YmhlYWRlci5zdWJ0aXRsZSA9IHJlcy5zdWJ0aXRsZTtcbiAgICAgIHN0YXRlLnN1YmhlYWRlci50aXRsZSA9IHJlcy50aXRsZTtcbiAgICAgIHN0YXRlLnN1YmhlYWRlci5kZXNjcmlwdGlvbiA9IHJlcy5kZXNjcmlwdGlvbjtcbiAgICAgIHN0YXRlLnN1YmhlYWRlci5zZWFyY2hFbmFibGVkID0gcmVzLnNlYXJjaEVuYWJsZWQ7XG4gICAgfSxcbiAgICBzZXRTdWJoZWFkZXJTZWFyY2hUZXh0KHN0YXRlLCByZXMpIHtcbiAgICAgIHN0YXRlLnN1YmhlYWRlci5zZWFyY2hUZXh0ID0gcmVzO1xuICAgIH0sXG4gICAgc2V0Q3VzdG9tZXJNYWNoaW5lcyhzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZUhlbHBlci51cGRhdGVBcnJheShyZXMsIHN0YXRlLmN1c3RvbWVyTWFjaGluZXMsICdzZXJpYWxOdW1iZXInKTtcbiAgICB9LFxuICAgIHNldEN1c3RvbWVyTWFjaGluZURldGFpbHMoc3RhdGUsIHJlcykge1xuICAgICAgc3RhdGVIZWxwZXIudXBkYXRlQXJyYXkocmVzLCBzdGF0ZS5jdXN0b21lck1hY2hpbmVEZXRhaWxzLCAnc2VyaWFsTnVtYmVyJyk7XG4gICAgfSxcbiAgICBhZGRDb21wYW55KHN0YXRlLCByZXMpIHtcbiAgICAgIHN0YXRlLmNvbXBhbmllcy5wdXNoKHJlcyk7XG4gICAgfSxcbiAgICB1cGRhdGVDb21wYW55KHN0YXRlLCByZXMpIHtcbiAgICAgIHN0YXRlSGVscGVyLnVwZGF0ZUFycmF5KHJlcywgc3RhdGUuY29tcGFuaWVzLCAnaWQnKTtcbiAgICB9LFxuICAgIGRlbGV0ZUNvbXBhbnkoc3RhdGUsIHJlcykge1xuICAgICAgc3RhdGVIZWxwZXIucmVtb3ZlRnJvbUFycmF5KHJlcywgc3RhdGUuY29tcGFuaWVzLCAnaWQnKTtcbiAgICB9LFxuICAgIHNldENvbXBsYWludHMoc3RhdGUsIHJlcykge1xuICAgICAgc3RhdGVIZWxwZXIudXBkYXRlQXJyYXkocmVzLCBzdGF0ZS5jb21wbGFpbnRzLCAndXVpZCcpO1xuICAgIH0sXG4gICAgc2V0V2FycmFudGVkU2VyaWFsTnVtYmVycyhzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZS53YXJyYW50ZWRTZXJpYWxOdW1iZXJzID0gcmVzO1xuICAgIH0sXG4gICAgYWRkQ29tcGxhaW50KHN0YXRlLCByZXMpIHtcbiAgICAgIHN0YXRlSGVscGVyLnVwZGF0ZUFycmF5KHJlcywgc3RhdGUuY29tcGxhaW50cywgJ3V1aWQnKTtcbiAgICB9LFxuICAgIHNldFdhcnJhbnR5UmVnaXN0cmF0aW9ucyhzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZUhlbHBlci51cGRhdGVBcnJheShyZXMsIHN0YXRlLndhcnJhbnR5UmVnaXN0cmF0aW9ucywgJ3V1aWQnKTtcbiAgICB9LFxuICAgIGFkZFdhcnJhbnR5UmVnaXN0cmF0aW9uKHN0YXRlLCByZXMpIHtcbiAgICAgIHN0YXRlSGVscGVyLnVwZGF0ZUFycmF5KHJlcywgc3RhdGUud2FycmFudHlSZWdpc3RyYXRpb25zLCAndXVpZCcpO1xuICAgIH0sXG4gICAgc2V0VXNlcnMoc3RhdGUsIHJlcykge1xuICAgICAgc3RhdGVIZWxwZXIudXBkYXRlQXJyYXkocmVzLCBzdGF0ZS51c2VycywgJ2lkJyk7XG4gICAgfSxcbiAgICBhZGRVc2VyKHN0YXRlLCByZXMpIHtcbiAgICAgIHN0YXRlSGVscGVyLnVwZGF0ZUFycmF5KHJlcywgc3RhdGUudXNlcnMsICdpZCcpO1xuICAgIH0sXG4gICAgdXBkYXRlVXNlcihzdGF0ZSwgcmVzKSB7XG4gICAgICBzdGF0ZUhlbHBlci51cGRhdGVBcnJheShyZXMsIHN0YXRlLnVzZXJzLCAnaWQnKTtcbiAgICB9LFxuICAgIGRlbGV0ZVVzZXIoc3RhdGUsIHJlcykge1xuICAgICAgc3RhdGVIZWxwZXIucmVtb3ZlRnJvbUFycmF5KHJlcywgc3RhdGUudXNlcnMsICdpZCcpO1xuICAgIH0sXG4gICAgYWRkTm90aWZpY2F0aW9uKHN0YXRlLCBtZXNzYWdlcykge1xuICAgICAgc3RhdGUubm90aWZpY2F0aW9uc1F1ZXVlLnB1c2gobWVzc2FnZXMuam9pbignLCAnKSlcblxuICAgICAgaWYgKHN0YXRlLm5vdGlmaWNhdGlvbnNRdWV1ZS5sZW5ndGggPiBzdGF0ZS5ub3RpZmljYXRpb25zTWF4KSB7XG4gICAgICAgIHN0YXRlLm5vdGlmaWNhdGlvbnNRdWV1ZS5zaGlmdCgpXG4gICAgICB9XG4gICAgfSxcbiAgICB1cGRhdGVBZGRpdGlvbmFsSW5mb3JtYXRpb24oc3RhdGUsIG1lc3NhZ2UpIHtcbiAgICAgIHN0YXRlLmFkZGl0aW9uYWxJbmZvcm1hdGlvbiA9IG1lc3NhZ2VcbiAgICB9XG4gIH0sXG4gIGFjdGlvbnM6IHtcbiAgICBnZXRDb3VudHJpZXMoY29udGV4dCkge1xuICAgICAgLy8gT25seSBmZXRjaCBjb3VudHJpZXMgb25jZVxuICAgICAgaWYoY29udGV4dC5zdGF0ZS5jb3VudHJpZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFwaS5nZXRDb3VudHJpZXMoKVxuICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgaWYocmVzLnJlc3VsdC5jb3VudHJpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmNvbW1pdCgnc2V0Q291bnRyaWVzJywgcmVzLnJlc3VsdC5jb3VudHJpZXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdldEN1cnJlbnRVc2VyKHsgY29tbWl0IH0pIHtcbiAgICAgIHJldHVybiBhcGkuZ2V0Q3VycmVudFVzZXIoKVxuICAgICAgLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAvLyBJZiB3ZSBjYW4gZ2V0IHByb3BlciBhbnN3ZXIsIHdlJ3JlIGxvZ2dlZCBpblxuICAgICAgICBpZihyZXMuY29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgY29tbWl0KCdzZXRMb2dpblN0YXR1cycsIHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29tbWl0KCdzZXRDdXJyZW50VXNlcicsIHJlcy5yZXN1bHQudXNlcik7XG4gICAgICAgIGNvbW1pdCgnc2V0Q3VycmVudFVzZXJDb21wYW55JywgcmVzLnJlc3VsdC5jb21wYW55KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZ2V0TG9jYWxpemF0aW9uKHtjb21taXR9KSB7XG4gICAgICByZXR1cm4gYXBpLmdldExvY2FsaXphdGlvbigpXG4gICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICBpZihyZXMucmVzdWx0LmxvY2FsaXphdGlvbikge1xuICAgICAgICAgIGNvbW1pdCgnc2V0TG9jYWxpemF0aW9uJywgcmVzLnJlc3VsdC5sb2NhbGl6YXRpb24pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdldENvbXBsYWludHMoe2NvbW1pdH0sIG9wdGlvbnMpIHtcbiAgICAgIGlmKCFvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBhcGkuZ2V0Q29tcGxhaW50cyh7XG4gICAgICAgICAgaW5jbHVkZUNoaWxkQ29tcGFuaWVzOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgaWYocmVzLnJlc3VsdC5jb21wbGFpbnRzKSB7XG4gICAgICAgICAgICBjb21taXQoJ3NldENvbXBsYWludHMnLCByZXMucmVzdWx0LmNvbXBsYWludHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihyZXMucmVzdWx0LndhcnJhbnRlZFNlcmlhbE51bWJlcnMpIHtcbiAgICAgICAgICAgIGNvbW1pdCgnc2V0V2FycmFudGVkU2VyaWFsTnVtYmVycycsIHJlcy5yZXN1bHQud2FycmFudGVkU2VyaWFsTnVtYmVycylcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXBpLmdldENvbXBsYWludHMob3B0aW9ucylcbiAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgIGlmKHJlcy5yZXN1bHQuY29tcGxhaW50cykge1xuICAgICAgICAgIGNvbW1pdCgnc2V0Q29tcGxhaW50cycsIHJlcy5yZXN1bHQuY29tcGxhaW50cyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZ2V0Q29tcGxhaW50KHtjb21taXR9LCBjb21wbGFpbnRJZCkge1xuICAgICAgcmV0dXJuIGFwaS5nZXRDb21wbGFpbnQoY29tcGxhaW50SWQpXG4gICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICBpZihyZXMucmVzdWx0LmNvbXBsYWludCkge1xuICAgICAgICAgIGNvbW1pdCgnc2V0Q29tcGxhaW50cycsIHJlcy5yZXN1bHQuY29tcGxhaW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBnZXRXYXJyYW50eVJlZ2lzdHJhdGlvbnMoe2NvbW1pdH0sIG9wdGlvbnMpIHtcbiAgICAgIGlmKCFvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBhcGkuZ2V0V2FycmFudHlSZWdpc3RyYXRpb25zKHtpbmNsdWRlQ2hpbGRDb21wYW5pZXM6IHRydWV9KVxuICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgIGlmKHJlcy5yZXN1bHQud2FycmFudHlSZWdpc3RyYXRpb25zKSB7XG4gICAgICAgICAgICBjb21taXQoJ3NldFdhcnJhbnR5UmVnaXN0cmF0aW9ucycsIHJlcy5yZXN1bHQud2FycmFudHlSZWdpc3RyYXRpb25zKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXBpLmdldFdhcnJhbnR5UmVnaXN0cmF0aW9ucyhvcHRpb25zKVxuICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgaWYocmVzLnJlc3VsdC53YXJyYW50eVJlZ2lzdHJhdGlvbnMpIHtcbiAgICAgICAgICBjb21taXQoJ3NldFdhcnJhbnR5UmVnaXN0cmF0aW9ucycsIHJlcy5yZXN1bHQud2FycmFudHlSZWdpc3RyYXRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBnZXRXYXJyYW50eVJlZ2lzdHJhdGlvbih7Y29tbWl0fSwgd2FycmFudHlSZWdpc3RyYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGFwaS5nZXRXYXJyYW50eVJlZ2lzdHJhdGlvbih3YXJyYW50eVJlZ2lzdHJhdGlvbklkKVxuICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgaWYocmVzLnJlc3VsdC53YXJyYW50eVJlZ2lzdHJhdGlvbikge1xuICAgICAgICAgIGNvbW1pdCgnc2V0V2FycmFudHlSZWdpc3RyYXRpb25zJywgcmVzLnJlc3VsdC53YXJyYW50eVJlZ2lzdHJhdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZ2V0Q3VzdG9tZXJNYWNoaW5lcyh7Y29tbWl0fSwgY29tcGFueUlkKSB7XG4gICAgICByZXR1cm4gYXBpLmdldEN1c3RvbWVyTWFjaGluZXMoe1xuICAgICAgICBjb21wYW55OiBjb21wYW55SWQsXG4gICAgICAgIGluY2x1ZGVDaGlsZENvbXBhbmllczogdHJ1ZVxuICAgICAgfSlcbiAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgIGlmKHJlcy5yZXN1bHQuY3VzdG9tZXJNYWNoaW5lcykge1xuICAgICAgICAgIGNvbW1pdCgnc2V0Q3VzdG9tZXJNYWNoaW5lcycsIHJlcy5yZXN1bHQuY3VzdG9tZXJNYWNoaW5lcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZ2V0Q3VzdG9tZXJNYWNoaW5lKHtjb21taXR9LCBzZXJpYWxOdW1iZXIpIHtcbiAgICAgIHJldHVybiBhcGkuZ2V0Q3VzdG9tZXJNYWNoaW5lKHNlcmlhbE51bWJlcilcbiAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgIGlmKHJlcy5yZXN1bHQuY3VzdG9tZXJNYWNoaW5lKSB7XG4gICAgICAgICAgY29tbWl0KCdzZXRDdXN0b21lck1hY2hpbmVzJywgcmVzLnJlc3VsdC5jdXN0b21lck1hY2hpbmUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdldEN1c3RvbWVyTWFjaGluZURldGFpbHMoe2NvbW1pdH0sIHNlcmlhbE51bWJlcikge1xuICAgICAgcmV0dXJuIGFwaS5nZXRDdXN0b21lck1hY2hpbmVEZXRhaWxzKHNlcmlhbE51bWJlcilcbiAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgIGlmKHJlcy5yZXN1bHQuY3VzdG9tZXJNYWNoaW5lRGV0YWlscykge1xuICAgICAgICAgIGNvbW1pdCgnc2V0Q3VzdG9tZXJNYWNoaW5lRGV0YWlscycsIHJlcy5yZXN1bHQuY3VzdG9tZXJNYWNoaW5lRGV0YWlscyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZ2V0Q2hpbGRDb21wYW5pZXMoY29udGV4dCkge1xuICAgICAgcmV0dXJuIGFwaS5nZXRDb21wYW5pZXMoe1xuICAgICAgICBjaGlsZHJlbk9mOiBjb250ZXh0LnN0YXRlLnVzZXIuaW5mby5jb21wYW55LFxuICAgICAgICBpbmNsdWRlVXNlcnNPZlJvbGVzOiBbJ3JldGFpbGVyLWFkbWluJ11cbiAgICAgIH0pXG4gICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICBpZihyZXMucmVzdWx0LmNvbXBhbmllcykge1xuICAgICAgICAgIHJlcy5yZXN1bHQuY29tcGFuaWVzLmZvckVhY2goY29tcGFueSA9PiB7XG4gICAgICAgICAgICBjb21wYW55LnVzZXJzLmZvckVhY2godXNlciA9PiB7XG4gICAgICAgICAgICAgIGlmKCFjb21wYW55LmNvbnRhY3RzKSB7XG4gICAgICAgICAgICAgICAgY29tcGFueS5jb250YWN0cyA9IFtdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb250ZXh0LmNvbW1pdCgnc2V0Q29tcGFuaWVzJywgcmVzLnJlc3VsdC5jb21wYW5pZXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdldENvbXBhbnkoe2NvbW1pdH0sIGNvbXBhbnlJZCkge1xuICAgICAgcmV0dXJuIGFwaS5nZXRDb21wYW55KGNvbXBhbnlJZClcbiAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgIGlmKHJlcy5yZXN1bHQuY29tcGFueSkge1xuICAgICAgICAgIGNvbW1pdCgnc2V0Q29tcGFueScsIHJlcy5yZXN1bHQuY29tcGFueSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZ2V0Q29tcGFueVVzZXJzKGNvbnRleHQsIGNvbXBhbnlJZCkge1xuICAgICAgcmV0dXJuIGFwaS5nZXRVc2Vycyh7XG4gICAgICAgIGNvbXBhbnk6IGNvbXBhbnlJZFxuICAgICAgfSlcbiAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgIGlmKHJlcy5yZXN1bHQudXNlcnMpIHtcbiAgICAgICAgICBjb250ZXh0LmNvbW1pdCgnc2V0VXNlcnMnLCByZXMucmVzdWx0LnVzZXJzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBkZWxldGVDb21wYW55KGNvbnRleHQsIGNvbXBhbnlJZCkge1xuICAgICAgcmV0dXJuIGFwaS5kZWxldGVDb21wYW55KGNvbXBhbnlJZClcbiAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgIGlmKHJlcy5yZXN1bHQuY29tcGFueSkge1xuICAgICAgICAgIGNvbnRleHQuY29tbWl0KCdkZWxldGVDb21wYW55JywgcmVzLnJlc3VsdC5jb21wYW55KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBnZXRVc2VyKHtjb21taXR9LCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhcGkuZ2V0VXNlcih1c2VySWQpXG4gICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICBpZihyZXMucmVzdWx0LnVzZXIpIHtcbiAgICAgICAgICBjb21taXQoJ2FkZFVzZXInLCByZXMucmVzdWx0LnVzZXIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG4gIGdldHRlcnM6IHtcbiAgICBjb3VudHJ5U2VsZWN0T3B0aW9uczogc3RhdGUgPT4ge1xuICAgICAgcmV0dXJuIHN0YXRlLmNvdW50cmllcy5tYXAoaXRlbSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWU6IGl0ZW0uY291bnRyeUNvZGUsXG4gICAgICAgICAgdGV4dDogaXRlbS5uYW1lXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGNoaWxkQ29tcGFuaWVzOiBzdGF0ZSA9PiB7XG5cbiAgICAgIHZhciBjaGlsZHJlbiA9IHN0YXRlLnVzZXIuaW5mby5yb2xlID09PSAnc2l0ZS1hZG1pbidcbiAgICAgICAgICAgICAgICAgID8gc3RhdGUuY29tcGFuaWVzLmZpbHRlcihCb29sZWFuKSAvL2NsZWFyIG51bGwgdmFsdWVzXG4gICAgICAgICAgICAgICAgICA6IHN0YXRlLmNvbXBhbmllcy5maWx0ZXIoY29tcGFueSA9PiB7IHJldHVybiBjb21wYW55LnBhcmVudCA9PT0gc3RhdGUudXNlci5jb21wYW55LmlkIH0pO1xuXG4gICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgfSxcbiAgICBjaGlsZENvbXBhbmllc09wdGlvbnM6IHN0YXRlID0+IHtcbiAgICAgIHZhciBmaWx0ZXJlZENoaWxkcmVuID0gc3RhdGUudXNlci5pbmZvLnJvbGUgPT09ICdzaXRlLWFkbWluJ1xuICAgICAgICAgICAgICAgICAgPyBzdGF0ZS5jb21wYW5pZXMuZmlsdGVyKEJvb2xlYW4pIC8vY2xlYXIgbnVsbCB2YWx1ZXNcbiAgICAgICAgICAgICAgICAgIDogc3RhdGUuY29tcGFuaWVzLmZpbHRlcihjb21wYW55ID0+IHsgcmV0dXJuIGNvbXBhbnkucGFyZW50ID09PSBzdGF0ZS51c2VyLmNvbXBhbnkuaWQgfSk7XG5cbiAgICAgIHJldHVybiBmaWx0ZXJlZENoaWxkcmVuLm1hcCAoaXRlbSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWU6IGl0ZW0uaWQsXG4gICAgICAgICAgdGV4dDogaXRlbS5uYW1lXG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgIH1cbiAgfVxufSk7XG5cbmRhdGFTZXJ2aWNlLnNldFZ1ZXhTdG9yZShzdG9yZSk7XG5cbmV4cG9ydCBkZWZhdWx0IHN0b3JlXG4iXX0="}